首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >胶带可以固定母亲节

胶带可以固定母亲节
EN

Code Golf用户
提问于 2014-05-09 13:53:54
回答 4查看 7.6K关注 0票数 54

基于胶带可以修复任何东西。的问题,这太宽泛了,有着非常相似的规则。只是这一次的目标非常具体:

挑战

你的任务是制作一个显示hello mom的程序--从来没有写过一行代码。

您只能在StackOverflow的问答中使用已经为您编写的代码。你能做的就是用最好的胶带把它粘在一起。当然,非常重要的是,我们要提供适当的归属,这样我们的权利就不会终止。

规则

  1. 您必须包括到您在回答中使用的问题/答案的链接。
  2. 除了以下例外情况外,您可能不会修改所找到的代码: a.您可以重命名变量、函数和方法。(这并不意味着您可以通过将scanner.nextInt()更改为scanner.nextLine()并声称您正在更改方法名称来更改方法调用。更改必须在对同一实体的定义或引用中进行。如果变量、函数或方法将再次重命名,则解决方案仍然有效,因此将包含hello mom的代码重命名为变量名不算。你可以适当地调整压痕。您可以假设加载了适当的模块,代码段才能工作。(例如,用于Java和Python的import语句,用于C#和C++的using语句,以及它们在所有语言中的等效语句)如果代码片段包括您的imports,您可以将它们移到代码的顶部。如果语言要求代码在某种方法体中执行(例如,public static void main(String[] args) for Java,static int Main(string[] args) for C#,等等),则可以将代码包装在适当的方法中。但主要方法的内容必须保持不变。
  3. 必须提供执行的任何变量/方法/函数/类重命名-ings的显式列表。
  4. 你不能拿走片段(也就是说,如果你从一个帖子中获取一个代码块,你就拿走了整个代码)。
  5. 为那些不熟悉你使用的语言的人提供一个简短的描述。
  6. 在开始此挑战之前,您必须使用已发布的片段。
  7. 人气竞赛,所以最多的人赢了!

截止日期

我将接受在母亲节结束时( UTC-11时区午夜)投票最多的提案,但以后提交的提案仍然可以获得选票。

EN

回答 4

Code Golf用户

发布于 2014-05-09 18:30:43

Java

从以下几个方面开始:

https://stackoverflow.com/a/19509316/1768232

代码语言:javascript
复制
String myStr = "hello";
String myStr1 = "hello";

https://stackoverflow.com/a/8341513/1768232

代码语言:javascript
复制
String[] history = new String[] { "hey", "you", "Mom" };

https://stackoverflow.com/a/23300004/1768232

代码语言:javascript
复制
String editednames = titleCase(name);

https://stackoverflow.com/a/20698093/1768232

代码语言:javascript
复制
myString = myString.toLowerCase();

https://stackoverflow.com/a/19393222/1768232

代码语言:javascript
复制
System.out.println(Name + " " + Income);

https://stackoverflow.com/a/1181979/1768232

代码语言:javascript
复制
public static <T> T last(T[] array) {
   return array[array.length - 1];
}

按照规则#2d中允许的那样添加所需的classpublic static void main(String[] args){ } (而不是围绕静态方法),并在6个代码段中的3个中更改一些变量/方法名称:

  • 更改第三个片段中的name -> history
  • 更改第三个片段中的editednames -> myString
  • 在第五个片段中更改Name -> myStr
  • 在第五个片段中更改Income -> myString
  • 在第六个片段中更改last -> titleCase

由此产生的方案:

代码语言:javascript
复制
public class DuctTape {
  public static void main(String[] args) {
    // https://stackoverflow.com/a/19509316/1768232
    String myStr = "hello";
    String myStr1 = "hello";

    // https://stackoverflow.com/a/8341513/1768232
    String[] history = new String[] { "hey", "you", "Mom" };

    // https://stackoverflow.com/a/23300004/1768232
    String myString = titleCase(history);

    // https://stackoverflow.com/a/20698093/1768232
    myString = myString.toLowerCase();

    // https://stackoverflow.com/a/19393222/1768232
    System.out.println(myStr + " " + myString);
  }

  // https://stackoverflow.com/a/1181979/1768232
  public static <T> T titleCase(T[] array) {
    return array[array.length - 1];
  }
}

输出:

代码语言:javascript
复制
hello mom
票数 34
EN

Code Golf用户

发布于 2014-05-10 13:57:31

C

可能是疯狂的、迂回的和复杂的方式来获得(确切的)结果-只有变量重命名和没有任何字面上的“妈妈”在任何代码中。

读一读“如果你从一篇文章中获取一个代码块,你就把整件事都拿走了”的规则很可能没有帮助--但却让它变得更有趣。

代码语言:javascript
复制
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;

public class Program
{
    void Main()
    {
        // Step 1
        var n = 3;
        var helloAndGoodbye = "12345678900"
                    .Select((c, i) => new { letter = c, group = i / n })
                    .GroupBy(l => l.group, l => l.letter)
                    .Select(g => string.Join("", g))
                    .ToList();

        // Step 2
        string place = "world";
        string greet = String.Format("Hello {0}!", place); 

        // Step 3
        byte[] b1 = System.Text.Encoding.UTF8.GetBytes (greet);
        byte[] b2 = System.Text.Encoding.ASCII.GetBytes (greet);

        // Step 4
        string encryptionKey = "test";
        var md5 = MD5.Create();
        var keyBytes = Encoding.UTF8.GetBytes(encryptionKey);
        byte[] encryptionKeyBytes = md5.ComputeHash(keyBytes);

        // Step 5
        string strName = md5.GetType().Name;
        if(strName == "Person")
        {
            //My Code
        }

        // Step 6
        string HashAlgorithm = new string(strName.Take(n).ToArray());

        // Step 7
        int previousYear = DateTime.Now.AddYears(-1).Year;

        // Step 8
        string myString = previousYear.ToString();

        // Step 9
        string totallyRandomString = new string(myString.Take(n).ToArray());

        // Step 10
        int myInt = System.Convert.ToInt32(totallyRandomString);

        // Step 11
        int x = myInt << 1 + 1;

        // Step 12
        PasswordDeriveBytes DerivedPassword = 
                    new PasswordDeriveBytes(place, b1, HashAlgorithm, x);
        byte[] KeyBytes = DerivedPassword.GetBytes(32);

        // Step 13
        string base64 = Convert.ToBase64String(KeyBytes);
        byte[] bytes = Convert.FromBase64String(base64);

        // Step 14
        var split = base64.Split('/');
        var last = split[split.Length -1];
        var prev = split[split.Length -2];

        // Step 15
        string truncatedToNLength = new string(last.Take(n).ToArray());

        // Step 16
        Regex rgx = new Regex("[^a-zA-Z0-9 -]");
        greet = rgx.Replace(greet, "");

        // Step 17
        var newString = greet.Replace(place.ToString(), truncatedToNLength);

        // Step 18
        var searchStr = newString.ToLower();
            searchStr = searchStr.Trim();

        // Step 19
        Console.WriteLine(searchStr); 
    }
}

.NET Fiddle

http://dotnetfiddle.net/PbjhPn

http://dotnetfiddle.net/bg20wb (删除代码块中的冗余行)

短解释

基本上,我们得到了“你好世界!”从一个简单的字符串格式。现在我们需要“妈妈”来代替它。为此,我们使用Base64编码的结果运行PBKDF1的804次迭代,使用以"world“作为密码和"Hello!”的MD5!像盐一样。生成一个字符串“ciSf5cCls1l/MoM.”。我们提取"MoM“并将其用作"world”的替代物。然后我们把绳子清理干净。

我们怎么去804?前一年缩短为三个字符(= "201"),然后乘以4。

长篇解释与定语

他说:我们从一些遵循规则的过度杀戮开始。整数3在这个程序中是一个非常重要的常数。这里,我们将这个整数赋值给n。我们必须从源中包含整个块。它可能是多余的,但只要我们稍后重新命名我们需要的split变量,它就会编译得很好。来源

替换变量名:

代码语言:javascript
复制
split              > helloAndGoodbye

设置启动字符串("Hello!“)。来源

这是一个非常私人的信息给我们的妈妈。所以我们显然需要一些密码技术来处理那些NSA类型。为此,我们需要一些参数,我们现在就准备。

3:转换greet ("Hello!“)到用于盐渍的字节数组。来源

代码语言:javascript
复制
myString           > greet

4:虽然我们使用的是加密技术,但实际上并不需要实例化MD5类。但是,我们确实需要为我们的参数之一分配字符串"MD5“,以便更深入地使用--这在可用代码中并不容易找到。所以我们再来一次..。“捷径”..。同样,整个代码块按照规则包括在内,尽管我们只需要第二行。来源

5:现在我们需要md5变量(MD5CryptoServiceProvider)类型的名称。if是另一个冗余。来源

代码语言:javascript
复制
entity             > md5

6:得到前3(噢,这是我们的常数!)类型名称的字符。来源

代码语言:javascript
复制
s                  > strName
truncatedToNLength > HashAlgorithm

7:代码控制:使用DateTime.Now将意味着这将只工作到2019年。为了更好地证明未来,我们使用了前一年。然后它将工作到2020年;-)来源

8:将我们的previousYear转换为字符串。来源

代码语言:javascript
复制
myInt              > previousYear

9:嘿,代码重用!;-)得到前3(我们的常数!)年度人物。来源

代码语言:javascript
复制
s                  > myString
truncatedToNLength > totallyRandomString

10: Aaaaaaaand..。将结果转换为整数。来源

代码语言:javascript
复制
myString           > totallyRandomString

埃里克·利珀特把每一个答案都做得更好。以迂回的方式乘以4。来源

代码语言:javascript
复制
y                  > myInt

12:通过place (密码)和greet (salt)发送PBKDF1,使用MD5和x (现在是201*4 = 804)迭代。来源

代码语言:javascript
复制
Password           > place
SaltValueBytes     > b1
PasswordIterations > x

13:乔恩·斯基特( Jon )也能给出更好的答案。将派生密码转换为基数64。我们抛出bytes数组。来源

代码语言:javascript
复制
bytes (first occurrence) > KeyBytes

14:多么疯狂的随机事件啊!我们现在有一个base64,其中包含"MoM“。很方便,就在"MoM“前面是一个'/‘。因此,将字符串拆分为分隔符:来源

代码语言:javascript
复制
filePath          > base64

15:嘿,我们最喜欢的代码重用磁带!得到前3(常数!)last的信件。来源

代码语言:javascript
复制
s                 > last

16:删除"!“。来源

代码语言:javascript
复制
str               > greet

17: MoM是我们的世界--所以让字符串反映出来(将" world“替换为"MoM")。来源

代码语言:javascript
复制
someTestString   > greet
someID           > place
sessionID        > truncatedToNLength

18:最后,改为小写。修剪好的尺寸(可能是因为它是管道胶带块的一部分)。来源

代码语言:javascript
复制
wordToSearchReplacemntsFor > newString

19:输出到控制台。来源

代码语言:javascript
复制
_surface         > searchStr

--一点“奖金材料”/commentary

  • 起初,我尝试了每一个内置密码散列(每个结合HMAC)和输入(“世界”,“你好世界!”,“你好世界”,“你好世界”等)的组合。在寻找一些有用的PDKDB1 (或2)迭代之前,看看是否会奇迹般地给出一个可用的输出来派生"mom“。
  • 对于使用年份作为201*4 = 804迭代的输入不太满意。起初,我试图为HttpStatusCode.Created (201)找到一些有用的代码作为输入--带有一个类似于“我们已经创建了'Hello!‘字符串的”巨魔借口“,所以这里最好的做法是使用' created’状态代码”。不幸的是,我从未发现HttpStatusCode枚举的用法没有引入对大多数ASP.NET WebAPI框架的依赖。
  • 代码的开始(“你好世界!”)在我第一次添加字符串格式之后,就再也没有看到它了。如果我有,是的,我可能已经意识到place的分配实际上在源代码中的另一个块中--所以我可以简单地将派生的“妈妈”分配给place,而不是使用"world“,然后再替换它。啊,好吧。
票数 28
EN

Code Golf用户

发布于 2014-05-09 13:57:56

Java

代码语言:javascript
复制
import java.util.*;

public class HelloMom {

     public static void main(String[] args) {
         Hashtable<String, String> ht = new Hashtable<String, String>();

        ht.put("Answer", "42");
        ht.put("Hello", "World");    // First value association for "Hello" key.
        ht.put("Hello", "Mom");      // Second value association for "Hello" key.

        for (Map.Entry<String, String> e : ht.entrySet()) {
          System.out.println(e);
        }
    }
}

输出

代码语言:javascript
复制
Answer=42
Hello=Mom

里面有些烦人,但这是我所能做的最好的事。

https://stackoverflow.com/a/1050075/573421

票数 14
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/26861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档