胶带可以修复母亲节


54

基于Duct磁带,可以解决任何问题,这些问题过于广泛,使用非常相似的规则。仅这次,目标非常明确:

挑战

您的任务是制作一个可以显示的程序hello mom-无需编写任何代码。

在StackOverflow的问题和答案中,您只能使用已经为您编写的代码。您所能做的就是用胶带尽力而为。当然,我们必须提供适当的归属,以免权利被终止,这一点非常重要。


规则

  1. 您必须包含指向您在答案中使用的问题/答案的链接。
  2. 不能修改找到的代码,但以下情况除外:

    一种。您可以重命名变量,函数和方法。(这并不意味着你可以改变一个方法调用,通过改变,说scanner.nextInt()scanner.nextLine()和声称您更改的方法名。改变必须在定义或引用同一实体)。如果将变量,函数或方法再次重命名,则该解决方案仍然可以使用,因此重命名要包含hello mom为变量名的代码不起作用。

    b。您可以适当地调整缩进。

    C。您可以假定已加载适当的模块以使代码段正常工作。(例如,import用于Java和Python的using语句,用于C#和C ++的语句以及所有语言的等效项)如果代码段中包含imports,则可以将其移至代码顶部。

    d。如果语言要求代码在某种方法体内执行(例如,public static void main(String[] args)对于Java,static int Main(string[] args)对于C#等),则可以将代码包装在适当的方法中。但是该主要方法的内容必须保持不变。

  3. 您必须提供所执行的任何变量/方法/函数/类重命名的明确列表。

  4. 您不能接受片段摘要(这意味着,如果您从帖子中获取代码块,则整个过程都将完成)
  5. 为不熟悉您所用语言的人提供代码的简要说明。
  6. 您必须使用此挑战开始之前发布的摘要。
  7. 人气比赛,所以最投票获胜!

最后期限

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


1
@iamkrillin这将使任何hello world示例转换为hello mom代码变得相当简单。还要注意规则中有关变量重命名的最后一行。
丹尼斯·贾黑鲁丁

23
7.您必须使用此挑战之前发布的摘要。(我可以用执行此操作的代码回答一堆与字符串有关的问题)
Geobits,2014年

1
您可以在另一个代码段中插入代码吗?
durron597

3
@Gareth,你知道吗,还有其他国家...
Martin Ender

1
@JeffGohlke或an m或an o作为文字。或者是将代码点转换为字符和代码段的代码段,可让您计算正确的代码点。限制正是鼓励创造力的原因。这是我在面对您自己的挑战时提到的内容,也是为什么我建议限制范围(以及随后为何关闭范围)的原因。
马丁·恩德

Answers:


60

脑干

天哪,我为什么要对自己这样做?

实际上,可以在某个地方的某些答案中单独找到每个BF符号作为代码段。有趣的是将其他人的代码拼凑在一起,每个代码代表一组BF指令。不幸的是基本没有无与伦比的[]符号在那里,所以我只好骗一点对于那些,我必须得到非常多的里程了一个时髦的哈斯克尔片断其中有一堆在它的长处的。可能还有其他人。除此之外,还有一些科学怪人的代码:

byte x = 1;
byte y = 2;
byte z = x + y;   // ERROR: Cannot implicitly convert type 'int' to 'byte'
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
[
int a = (b > 10) ? some_value                 
                 : another_value;
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
int a = (b > 10) ? c : d;
byte x = 1;
byte y = 2;
byte z = x + y;   // ERROR: Cannot implicitly convert type 'int' to 'byte'
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
?"<<-"
]
exec >{space}> (command)
byte z = (int) x + (int) y;
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
find . -type f -print -exec cat {} \;
git reset .
byte x = 1;
byte y = 2;
byte z = x + y;   // ERROR: Cannot implicitly convert type 'int' to 'byte'
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
System.out.print("B");
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
fatal: Failed to resolve 'HEAD' as a valid ref.
while read p; do 
echo $p
done < $filename
static HMODULE hMod = NULL;
  static bool once = false;
  if (!once++)
    hMod = LoadLibrary("xxx");
 if (originalValue.length > size) {
static HMODULE hMod = NULL;
  static bool once = true;
  if (once--)
    hMod = LoadLibrary("xxx");
$ cd /usr/local/wherever
$ grep timmy accounts.txt
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub}
ls -ld $(find .)
git commit --amend -m "New commit message"
wget -q -O - $line 
git rebase --interactive $parent_of_flawed_commit
find . -type f -user 'user1' -maxdepth 1

而且,由于我母亲是英国人,因此输出非常简单 hello mum

参考书目:

https://stackoverflow.com/questions/17845014/what-does-the-regex-mean

[]道歉

https://stackoverflow.com/a/21460161/2581168

find . -type f -print -exec cat {} \;

https://stackoverflow.com/questions/6161328/what-exactly-does-this-do-exec-command

exec >{space}> (command)

https://stackoverflow.com/questions/20130538/what-is-in-haskell

addop = do {symb "+"; return Op Add}  +++ do {symb "-"; return Op Sub} 

https://stackoverflow.com/questions/21947452/why-is-printing-b-dramatically-slower-than-printing

System.out.print("B");

https://stackoverflow.com/questions/941584/byte-byte-int-why

byte x = 1;
byte y = 2;
byte z = x + y;   // ERROR: Cannot implicitly convert type 'int' to 'byte'

https://stackoverflow.com/a/160295/2581168

int a = (b > 10) ? c : d;

int a = (b > 10) ? some_value                 
                 : another_value;

https://stackoverflow.com/questions/13273002/what-does-mean-in-r

?"<<-"

https://stackoverflow.com/questions/3450420/bool-operator-and

static HMODULE hMod = NULL;
static bool once = false;
if (!once++)
    hMod = LoadLibrary("xxx");

static HMODULE hMod = NULL;
static bool once = false;
if (!once--)
    hMod = LoadLibrary("xxx");

https://stackoverflow.com/questions/22776085/in-which-case-will-size-originalvalue-length-in-string-constructor-string

if (originalValue.length > size) {

https://stackoverflow.com/questions/3797795/does-mean-stdout-in-bash

wget -q -O - $line 

https://stackoverflow.com/questions/179123/how-do-i-edit-an-incorrect-commit-message-in-git/179147#179147

git commit --amend -m "New commit message"

git rebase --interactive $parent_of_flawed_commit

https://stackoverflow.com/questions/14763413/grep-ls-output-across-tabs/14763499#14763499

find . -type f -user 'user1' -maxdepth 1

https://stackoverflow.com/questions/945288/saving-current-directory-to-bash-history

$ cd /usr/local/wherever
$ grep timmy accounts.txt

https://stackoverflow.com/questions/348170/undo-git-add-before-commit/682343#682343

fatal: Failed to resolve 'HEAD' as a valid ref.

错误消息不是代码。虽然一个人应该很容易解决
durron597

6
另外,对于代码片段是否需要使用答案的语言,可能应该有一个裁定。但是无论如何都做得很好
durron597 2014年

@ durron597,是的,但是我有点喜欢在其中显示错误消息。有一个git add .在同一职位如果OP有问题的。
ymbirtt 2014年

可能有一些J答案[].s 不匹配,但通常包含s。stackoverflow.com/questions/21898628/...
ɐɔıʇǝɥʇuʎs

1
这太棒了。+1000
asteri

33

爪哇

从这些开始:

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 editednames = titleCase(name);

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

myString = myString.toLowerCase();

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

System.out.println(Name + " " + Income);

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

public static <T> T last(T[] array) {
   return array[array.length - 1];
}

添加必需classpublic static void main(String[] args){ }规则2d中所允许的内容(不在静态方法周围),并在6个摘要中的确切3个中更改一些变量/方法名称:

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

结果程序:

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];
  }
}

输出:

hello mom

2
这似乎违反了规则;2a指示您无法更改通过将titleCase()更改为last()进行的方法调用所调用的方法。
比利·麦曼

1
@BillyMailman如果您的解释正确,则您永远不能使用方法定义,除非q / a还在某处提供了对该方法的调用。我将尝试编辑是否有OP的裁定
durron597

2
实际上,@ BillyMailman是正确的。但是,您执行此操作的方法是将方法重命名为,titleCase()而不是重命名外部引用。这就是您将其绑在一起的方式。规则2a规定更改方法/功能名称是合法的。
asteri 2014年

1
@JeffGohlke固定
durron597 2014年

28

C#

可能是疯狂,round回和复杂的方式来获得(精确的)结果-仅使用变量重命名,并且在任何代码中都没有任何文字“ mom”。

阅读“如果您从帖子中获取代码块,那么就把整个事情都做完了”的规则,从字面上看可能无济于事,但使它变得更加有趣。

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小提琴

http://dotnetfiddle.net/PbjhPn

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

简短说明

基本上,我们得到“ Hello world!” 从简单的字符串格式。现在我们需要“妈妈”来代替它。为此,我们使用通过MD5(具有“ world”作为密码和“ Hello world!”)运行PBKDF1的804次迭代的Base64编码结果。作为盐。产生一个字符串“ ciSf5cCls11 / MoM ...”。我们提取该“ MoM”并将其用作“ world”的替代。然后我们清理字符串。

如何到达804?前一年剪裁为三个字符(=“ 201”),然后乘以4。

详细说明和归因

1:我们从一些遵循规则的过大杀手开始。整数3是此程序中非常重要的常数。在这里,我们将该整数分配给n。我们必须从源头包括整个块。它可能是多余的,但是只要我们重命名split以后将需要的变量,它就可以很好地编译。资源

替换的变量名称:

split              > helloAndGoodbye

2:设置起始字符串(“ Hello world!”)。资源

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

3:greet(“ Hello world!”)转换为字节数组以加盐。资源

myString           > greet

4:尽管我们使用的是加密技术,但实际上并不需要实例化MD5类。但是,我们确实需要为我们的参数之一分配字符串“ MD5”才能在以后使用-这在可用代码中很难找到。因此,我们将采用另一个“快捷方式” ...再次,按照规则包括了整个代码块,尽管我们只需要第二行。资源

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

entity             > md5

6:获取类型名称的前3个(哦,这是我们的常量!)字符。资源

s                  > strName
truncatedToNLength > HashAlgorithm

7:代码拖曳:使用DateTime.Now将意味着这将一直持续到2019年。为了使它更适合将来,我们使用了上一年。然后它将工作到2020年;-) 来源

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

myInt              > previousYear

9:嘿,代码重用!;-)获取今年的前3个(我们的常数!)字符。资源

s                  > myString
truncatedToNLength > totallyRandomString

10: Aaaaaaaand ...将结果转换回整数。资源

myString           > totallyRandomString

11:埃里克·利珀特(Eric Lippert)使每个答案都更好。以回旋方式乘以4。资源

y                  > myInt

12:使用MD5 (现在是迭代)通过PBKDF1 发送place(密码)和greet(盐)。资源x201*4 = 804

Password           > place
SaltValueBytes     > b1
PasswordIterations > x

13:乔恩·斯基特(Jon Skeet)也使每个答案都更好。将派生的密码转换为以64为基数。我们丢弃该bytes数组。资源

bytes (first occurrence) > KeyBytes

14:多么疯狂的随机事件!现在,我们有了一个base64带有“ MoM”的标记。方便地,就在“ MoM”之前是单个“ /”。因此,以该字符作为分隔符分割字符串:Source

filePath          > base64

15:嘿,我们最喜欢的代码重用磁带!获取的前3个(常数!)字母last资源

s                 > last

16:删除“!”。资源

str               > greet

17: MoM是我们的世界-因此,使字符串反映这一点(将“ world”替换为“ MoM”)。资源

someTestString   > greet
someID           > place
sessionID        > truncatedToNLength

18:最后转换为小写 进行适当的修剪(或可能因为它是胶带块的一部分)。资源

wordToSearchReplacemntsFor > newString

19:输出到控制台。资源

_surface         > searchStr

一点“奖励材料” /注释

  • 最初,我尝试了内置加密哈希(每个都与HMAC结合)和输入(“世界”,“你好世界!”,“你好世界”,“你好世界”等)的每种组合,以查看是否会奇迹般地给出一个有用的输出,用于从中推导“妈妈”,然后采取简单的方法,即寻找许多有用的PDKDB1(或2)迭代。

  • 使用年份作为201 * 4 = 804迭代的输入并不十分满意。最初,我试图找到一些有用的代码供HttpStatusCode.Created(201)用作输入-带有“巨魔借口”,类似“我们已经创建了'Hello world!'。字符串,因此一种好的做法是在此处使用“已创建”状态代码”。不幸的是,我从来没有发现HttpStatusCode枚举的用法没有引入对大多数ASP.NET WebAPI框架的依赖。

  • 在我第一次添加代码后,就再也没有看过代码的开头(“ Hello world!”字符串格式)。是的,如果我有的话,我可能已经意识到的分配place实际上是在源代码的另一个块中-因此我可以简单地将派生的“妈妈”分配给place而不是使用“世界”,然后再替换它。呃,好吧。


5
+1表示“妈妈是我们的世界”,“ Lippert和Skeet使每个答案都更好”。
弗洛里斯2014年

“特里姆……”
Nit 2014年

24

Befunge 98

我的代码:

var abc = function(){};
display: table-*
display: table-*
display: table-*
display: table-*
display: table-*
display: table-*
display: table-*
display: table-*
+
+
+
+
+
+
+
, new {area = ""}
byte z = x + y;
byte z = x + y;
byte z = x + y;
byte z = x + y;
byte z = x + y;
byte z = x + y;
byte z = x + y;
byte z = x + y;
display: table-*
+
+
+
+
+
+
+
+
, new {area = ""}
"1,23,4"
  String[] temp = data.split("\\s+\\^,?\"'\\|+");
List<Set<Integer>> foo;
"1,23,4"
+
: base(name)
: base(name)
, new {area = ""}
, new {area = ""}
10001.10010110011
10001.10010110011
10001.10010110011
+
+
+
, new {area = ""}
"1,23,4"
  String[] temp = data.split("\\s+\\^,?\"'\\|+");
"1,23,4"
, new {area = ""}
"1,23,4"
[5326, 4223, 1204]
Runnable prs = new Runnable() {
    public void run() {
        Document doc = null;
        try {
            doc = Jsoup.connect("http://play.radio.com/").get();

        } catch (IOException e) {

            e.printStackTrace();
        }
        parser.postDelayed(prs, 10000);
    }
};
"1,23,4"
$selector.append("somestuff");
$selector.append("somestuff");
-new Date().getTimezoneOffset()/60;
: base(name)
10001.10010110011
10001.10010110011
10001.10010110011
+
+
+
 [0000] push        ebp
 [0001] mov         ebp,esp
 [0003] push        edi
 [0004] push        esi
 [0005] push        ebx
 [0006] sub         esp,1Ch
 [0009] xor         eax,eax
 [000b] mov         dword ptr [ebp-20h],eax
 [000e] mov         dword ptr [ebp-1Ch],eax
 [0011] mov         dword ptr [ebp-18h],eax
 [0014] mov         dword ptr [ebp-14h],eax
 [0017] xor         eax,eax
 [0019] mov         dword ptr [ebp-18h],eax
*[001c] mov         esi,1
 [0021] xor         edi,edi
 [0023] mov         dword ptr [ebp-28h],1
 [002a] mov         dword ptr [ebp-24h],0
 [0031] inc         ecx
 [0032] mov         ebx,2
 [0037] cmp         ecx,2
 [003a] jle         00000024
 [003c] mov         eax,esi
 [003e] mov         edx,edi
 [0040] mov         esi,dword ptr [ebp-28h]
 [0043] mov         edi,dword ptr [ebp-24h]
 [0046] add         eax,dword ptr [ebp-28h]
 [0049] adc         edx,dword ptr [ebp-24h]
 [004c] mov         dword ptr [ebp-28h],eax
 [004f] mov         dword ptr [ebp-24h],edx
 [0052] inc         ebx
 [0053] cmp         ebx,ecx
 [0055] jl          FFFFFFE7
 [0057] jmp         00000007
 [0059] call        64571ACB
 [005e] mov         eax,dword ptr [ebp-28h]
 [0061] mov         edx,dword ptr [ebp-24h]
 [0064] lea         esp,[ebp-0Ch]
 [0067] pop         ebx
 [0068] pop         esi
 [0069] pop         edi
 [006a] pop         ebp
 [006b] ret
10001.10010110011
+
: base(name)
, new {area = ""}
"1,23,4"
List<Set<Integer>> foo;

"1,23,4"
+
10001.10010110011
10001.10010110011
10001.10010110011
+
+
+
, new {area = ""}
, new {area = ""}
def logme(func):
    def wrapped(*args):
        for arg in args: print str(arg)
        func(*args)
    return wrapped

@logme
def my_func(*args):
    res = 1
    for arg in args :
        print "Multiplying %s by %s" % (arg, res)
        res*=arg
    print res
    return res

之所以有效,是因为v第一行(在第一行中)将IP向下发送。因此,我们基本上在执行此程序:

dddddddd+++++++,bbbbbbbbd++++++++," L"+::,,111+++," ","[R           }"$$-:111+++             *                            1+:,"L "+111+++,,d     @

这样做:

  • dddddddd+++++++,推送104和打印
  • bbbbbbbbd++++++++,推送101和打印
  • " L"+,推送32和的ascii值L,然后将它们相加,重复两次,然后打印两次
  • 对于重复的那个, 111+++,那张上加3张并打印
  • " ",打印一个空格。"[R }"$$-:111+++按下9并复制它,然后将3加到最高值
  • * 将前两个值相乘
  • 1+:, 递增该数字,重复并打印
  • "L "+111+++,版画o。从更早的位置,打印m,然后d @推送13(不执行任何操作)并结束程序。

4
是的。实际上,我确实运行了该程序,并输出hello mom
Justin

14

爪哇

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);
        }
    }
}

输出量

Answer=42
Hello=Mom

里面有一个讨厌的=,但这是我能做的最好的

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


出色的发现!
弗洛里斯2014年

1
实际上,在开始挑战之前,我进行了一些搜索,但没想到在一篇文章中会找到完整的解决方案。很高兴您仍然找到了一个!
丹尼斯·贾赫鲁丁

11

C

此代码大部分来自于答案的查找“查找第一个单词的开头”,该单词是BLUEPIXY发布的palindrom [sic] ,输出该单词mom。在第21和22行,由user142019(幸运的是,在末尾添加了分号helloprintf(“ %%% s”,“ hello”)的答案结尾处的代码段打印了。话来自一个答案,如何在C填充打印空间中号Oehm

输出:

%hello        mom

不幸的是,我无法消除多余的空格或百分比字符:(

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int isPalindrome(const char *str){
    const char *front, *back;
    front=str;
    back =str + strlen(str)-1;
    for(;front<back;++front,--back){
        while(!isalpha(*front))++front;//isalnum?
        while(!isalpha(*back))--back;
        if(front > back || tolower(*front)!=tolower(*back))
            return 0;
    }
    return 1;
}

int main(){
    const char *data="Hello mom and dad, how is it going?";
    char *p, *src;
    printf("%%%s", "hello");
    printf("        ");
    p=src=strdup(data);
    for(;NULL!=(p=strtok(p, " \t\n,.!?"));p=NULL){
        if(isPalindrome(p)){
            printf("%s\n", p);
            break;
        }
    }
    free(src);
    return 0;
}

7

爪哇

import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Random;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author LH
 */
public class Kopierpaste
{

    //https://stackoverflow.com/questions/15182496/why-does-this-code-using-random-strings-print-hello-world
    //randomizer code for the first String
    public static String randomString(int i)
    {
        Random ran = new Random(i);
        StringBuilder sb = new StringBuilder();
        for (int n = 0;; n++)
        {
            int k = ran.nextInt(27);
            if (k == 0)
            {
                break;
            }

            sb.append((char) ('`' + k));
        }

        return sb.toString();
    }

    public static void main(String[] nope)
    {
        //catching a System.out() based code snippet
        //https://stackoverflow.com/questions/4183408/redirect-stdout-to-a-string-in-java
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        System.setOut(new PrintStream(baos));
        //same as randomizer
        //getting hello, world inside a ByteArray
        System.out.println(randomString(-229985452) + " " + randomString(-147909649));

        //undo the redirecct of System.out()
        //https://stackoverflow.com/questions/4183408/redirect-stdout-to-a-string-in-java && https://stackoverflow.com/a/14716148/1405227
        System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));


        //stringify the out of first part
        //https://stackoverflow.com/questions/4183408/redirect-stdout-to-a-string-in-java
        String text = baos.toString();


        //getting rid of the world part
        //https://stackoverflow.com/a/17008136/1405227
        String firstWord = text.substring(0, text.indexOf(' '));

        //needing the word Mom
        //https://stackoverflow.com/a/8341513/1405227
        //history -> a
        String[] a = new String[]
        {
            "hey", "you", "Mom"
        };

        //stitching the array together in a certain fashion ([elem1, elem2, elem3]
        //https://stackoverflow.com/a/2822736/1405227
        //myarray->a
        String b = Arrays.toString(a);

        //getting rid of the ,s
        //https://stackoverflow.com/a/7552284/1405227 stripping annoying bullcrap out
        //result ->c
        //yourString ->b
        String c = b.replaceAll("[-+.^:,]", "");


        //getting the Mom] part
        //https://stackoverflow.com/a/15317037/1405227
        //sentence -> c
        String lastToken = c.replaceAll(".* ", "");

        //getting rid of more crap
        //https://stackoverflow.com/a/18599016/1405227
        //message -> lastToken
        lastToken = lastToken.replaceAll("\\W", "");


        //finally out
        //https://stackoverflow.com/a/19393222/1405227
        //name -> firstWord
        //income -> lastToken
        System.out.println(firstWord + " " + lastToken);
    }
}

文档和源链接在注释中(以//开头)

干净使用的来源清单


+1。我想采用随机的hello world方法,但感到无聊,并且更直接地做到了。做得很好
durron597 2014年

是的,记住这一点,要解决这个问题,我不得不滥用system.out重定向hax。花了我一段时间让妈妈接受我的方法和一些讨厌的正则表达式。但幸运的是,我们让Google深入研究了
masterX244,2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.