字谜代码


10

让我们再试一次。

竞赛的目的是制作两段彼此相同的字母(彼此必须包含不同顺序的相同字节)的代码,它们将执行以下任务:

  • 必须测试输入的数字是happy还是prime,并测试数字是否是数字(例如,7必须输出happy prime4必须输出sad non-prime)。

  • 另一个必须以字为单位输出其代码大小(以字节为单位)(输出60字节的程序,输出sixty39字节的程序thirty-nine)。

如果规则需要任何澄清,请随时告诉我。

这是一场代码高尔夫比赛,因此最短的程序将获胜!


是什么阻止一个从做/*program1*/program2然后program1/*program2*/?我认为您不应该发表评论。
William Barbosa 2014年

@WilliamBarbosa为什么?这几乎不是一个最佳解决方案。
Martin Ender

但是您也可以共享某些部分,而不必共享其他部分,这使事情变得容易得多
骄傲的haskeller 2014年

1
@proudhaskeller禁止评论不能解决这个问题。您总是可以将字符填充到字符串,变量名或其他原因未执行的代码部分中。
Martin Ender 2014年

1
FWIW,我认为你应该已经删除了自己的提交。是否进行运算处理,这是一个有趣的答案。
丹尼斯2014年

Answers:


6

CJam,80 49 48个字符

更新:受丹尼斯的实现启发来计算数字的平方和,这是一个简短的版本

快乐/悲伤素数/非素数:

ri:T{Ab2f#:+}G*X="happy""sad"?STmp4*"non-prime">

怎么运行的:

ri:T                                "Read input as integer and store it in T"
    {       }G*                     "Run this code block 16 times"
     Ab                             "Convert the number into base 10"
       2f#                          "Calculate square of each digit"
          :+                        "Sum all the squared digits and put the sum on stack"
X=                                  "Compare the sum after 16th iteration to 1"
  "happy""sad"?                     "If sum is 1, put `happy` to stack, otherwise `sad`"
               ST                   "Put space on stack then put the value of T on stack"
                 mp4*               "Put 4 to stack if input is prime, otherwise 0"
                     "non-prime">   "Put `non-prime` to stack and slice out first four characters if the input number is prime"

永久性

""A"forTy-eiGhT""ri:{b2#:+}*X=appsadSmp4*nnpm>"?

工作原理:

""                                  "Push empty string to stack"
  A                                 "Push 10 to stack"
   "forTy-eiGhT"                    "Push `forTy-eiGhT` to stack"
                "ri:....pm>"        "Push this string to stack too"
                            ?       "Keep `forTy-eiGhT` on stack and pop the other string"

在线尝试

第一个程序从STDIN读取数字


我原来的80个字符的解决方案

快乐/悲伤素数/非素数:

r:N{1/~]{i_*T+:T;}/T_s\1=:H!X):XK<&0:T;}g;H"happy""sad"?SNimp"prime"_"non-"\+?:Y

八十

"eigHTY""r:N{1/~]{i_*T+:T}/_s\1=:H!X):XK<&0:T}happysad?SNmp";"prim_";"non-\?:+";

4

CJam,50 49字节

幸福与素养测试

li_{Ab2f#:+}30*(T="happy""sad"?S@mp4*"non-prime">

从STDIN读取一个数字。两种测试仅适用于64位整数。

在线尝试。

自己的长度

A"forTy-nine""l_{b2#:+}30*(=happsadS@mp4*pim>"?""

打印九十九


+1表示31字节的改进,“ forTy-九”。
Josiah Winslow 2014年

3

Golfscript-81

此程序测试数字是否为幸福和/或质数。

~.:a;0.{).a\%!@+\}a*;2="""non-"if"prime"@ {`0\{48-.*+}/}9*("sad ""happy "if@@#get

该程序是最后一个字词的变位符号,输出“八十一”(字节大小作为一个单词)。

;"eighty-one"#   !""""""""%()***++-..../002489:;=@@@@\\\`aaaaadffiimnppprs{{{}}}~

这应该作为一个例子。


2
嗯,为GolfScript中的代码高尔夫挑战提供参考实现可能不是最好的主意。我相信这是很难击败的,因此对于参与者来说有点令人沮丧。
Martin Ender 2014年

我看到人们没有注意到您写的问题并批评您……我完全同意马丁的观点。
自豪的haskeller 2014年

@proudhaskeller自我回答绝对没有错。
贾斯汀

我说回答自己或注释代码没有错。
Josiah Winslow 2014年

2
@JosiahWinslow有没有错吧。我只是说,如果您立即发布一个很好的解决方案,您可能会错过一些有趣的较长答案。
Martin Ender 2014年

1

J-87字符

J中对此进行的幼稚尝试。不使用标准库,尽管我怀疑使用该库会不会更短。

((sad`happy{~1 e.(,[:+/@:*:,.&.":@{:)^:(1-{:e.}:)^:_);@,' ';'gtv]non-prime'}.~4+4*1&p:)
'((ad`app{~1 .(,[:+/@:*:,.&.":@{:)^:(1-{:.}:)^:_);@, ;onprm}.~4+4*1&p:)']'eighty-seven'
('(ad`app{~1 .(,[:+/@:*:,.&.:@{:)^:(1-{:.}:)^:);@, ;onprm}.~4+4*1&p:']'eighty-seven'"_)

顶部的行是一个动词,它使用一个整数并将其幸福和原始性诊断为输出字符串。第二行是返回字符串的表达式eighty-seven,而第三行是不变的函数。我之所以把两者都包括在内是因为它们既有可能,又因为我不知道对函数答案(而不是程序答案)的裁定是什么,并且J没有无参数函数之类的东西,您只需给函数a虚拟参数。

我们失去了检查幸福的大多数字符。(,[:+/@:*:,.&.":@{:)是对一个数字的平方求和的主体,并且(1-{:e.}:)是对该数字是否已经发生的检验。sad`happy{~1 e.将其转换为单词结果,然后将其附加到字符串的开头,non-prime如果数字实际上是素数,则可能会截取四个字符。

在七字图中,我们只隐藏了'eighty-seven'我们忽略的字符串中没有的所有位。如果J有更多可重复使用的字母,我可以做得更好,但是事实并非如此,所以很好。


那是一个很好的解决方案。
Josiah Winslow 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.