新年回收


23

2015年的一个好的决议是生活更加可持续。我们将从回收开始。就是回收代码!

您的任务是将数字打印2015到STDOUT,带或不带尾随换行符(而已)。但是,您必须通过回收 PPCG中的一些旧代码来做到这一点。这是这样的:

  • 选择在2014-12-16 00:00:00Z(我在沙盒中发布此日期)之前在CodeGolf.SE上发布的所有答案例外:您不能使用去年的“新年挑战”中的任何答案。
  • 从该答案中选择一个代码块(不是内联代码段,它必须在其自己的段落中)。该块必须作为实际代码发布,例如,您不能使用碰巧使用等宽格式的测试用例或示例输出。
  • 重新排列该代码块中的字符以形成您对此挑战的提交。您只能更改顺序,不能添加或删除任何字符。这包括换行符。
  • 您必须能够证明原始源代码块在您的语言上在语法上是有效的。在最佳情况下,您可以通过显示其运行时没有编译时或运行时错误来做到这一点。因此,尽管原始代码可能是Java,但您可以将其用于空白答案(因为每个文件在空白中均有效),但可能无法将其用于Python答案(因为原始密码无效) )。

请注意,您的答案必须忽略所有输入和外部状态(包括实际当前日期)。它可以从标准输入,比如阅读,只要当它是空的,并产生相同的输出流的所有可能的内容,它不会崩溃。

生成的代码必须是完整程序(不是函数,也不是假定为REPL环境的代码段)。

这是代码高尔夫,所以最短的答案(以字节为单位)获胜。

排行榜

我相信这会以不同的语言显示出来。因此,以下Stack Snippet会按语言生成常规排行榜和获胜者概述。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

# Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数保持标题。例如:

# Ruby, <s>104</s> <s>101</s> 96 bytes


并非每个空白程序都是有效的。我得到一个错误的ideone.com/Jphkf3
Ypnypn

这个问题刚浮现在我的脑海:是否允许您以注释掉原始代码很大一部分的方式回收原始代码?
ProgramFOX 2015年

@ProgramFOX是的,因为如果您不得不注释很多,可能会损害您的分数。
马丁·恩德

@Ypnypn在我看来,这似乎是运行时错误,而不是语法错误,对吗?
马丁·恩德

Answers:


22

GolfScript,9个字节

原来的答案(DIBS!)也是GolfScript,这是我怎么知道它在语法上是有效的。我在http://golfscript.apphb.com/上进行了测试。

2015}{.**

我鄙视用于高尔夫的语言,但是我必须赢得挑战,因此发布答案就背叛了我的价值观。我不知道大多数字符会用这种语言做什么,但是我曾经无意间学到了在略过GolfScript答案的同时},在程序的其余部分中留下了无与伦比的注释。这使我可以忽略其余字符。


1
never,我从来没有想过无与伦比的花括号在GS中是有效的。
Martin Ender'1

3
@MartinBüttner你没看过吗?
FryAmTheEggman 2015年

16

Befunge-93,2085个字节

我以为我会很有趣,可以通过回收最好的回收品来变元。为了简洁起见,这里不做任何奖励。

+2012+1+1e1 or b+bbv+b+NN
"a"""""
p((('?'.ord-' '.ord )/(1.0/'A'.ord)).to_i)
<<id
                   1
                   !
                   _"  fabaaaca"-.-.-.-.+"O"2::++p

aa
AaAAaAAaAAaAAaA
eEe ddd OoOOoOOoOOoOOoOOoOOoOOoOOoOOoO ddD Ccc eEE
ccc LLl
SssSss LLl
SsS LLl
SsSSsSSsSSsS LLl
cccccc
mMm



+   +     a     pppp  pppp  y   y     n   n eeeee +     +    y   y eeeee     a     rrr    "
+   +    a a    p   p p   p  y y      nn  n e      + + +      y y  e        a a    r  r   "
+++++   aaaaa   pppp  pppp    y       n n n eee    + + +       y   eee     aaaaa   rrr    "
+   +  a     a  p     p       y       n  nn e       + +        y   e      a     a  r  r
+   + a       a p     p       y       n   n eeeee   + +        y   eeeee a       a r  r   "



Hope to see another round of awesome programming puzzles and code golf challenges

===============================
"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " ' ' ' ' '

Big char dump below (will clean up if there's more languages to squeeze in):

  $$$$$$$()++++++++++++++++++++++++++++--------------------------/////:::;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<>>>>>??AAACCDDEEEFHHLLMMMMM
NOOOOOOOOOOORRRRRRRRRSSSUUUUV[\]___aaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbcccccccccccccddddddddddddddddddddddddddddddddddddddd
ddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeee
eeeeeeeeeeeeeeeeeeffffffffffghhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilll
llllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnn
nnnnnnnnnnnnnoooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppp
ppppppppppppprrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrsssssss
ssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttttttttttttttttt
ttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
uuuuuuuuuuuuvvvvvvvvwwxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

"""
one=1
print(int(ord('A')/(one/(ord(' ')-one))))
id
"mOO"

实际上,这也是5种语言的多语种:Befunge-93oOo CodePyth,Python 3和Ruby。但是,由于原始代码仅在语法上适用于Befunge-93,因此,我仅对此进行计数。

不幸的是,原始代码只有一对,[]而且太多了.,所以我无法真正使Brainfuck适应(因此oOo代码)。


笔记

事实证明这是令人惊讶的限制,因为:

  • 可用的完整位数是001111111222,要求ord用于Ruby和Python。特别是没有5,事实证明这对Pyth来说很痛苦。
  • 缺少@意味着p需要使用它来放置@Befunge。
  • 缺乏*含义意味着我们必须通过除以数字的倒数来相乘。好玩

Befunge-93

Befunge程序是

                   v
                   1
                   !
                   _"  fabaaaca"-.-.-.-.+"O"2::++p

我们跳过了无用的说明。我们编码每个数字作为一个字符之间的ASCII值的差异,特别是cabfa

代码

对应的BF为

>><->>->>>><>+++++[>++++++++++<-]>.--.+.++++.>>[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>><;;;;;;;;;;;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>]

,其中唯一相关的部分是

+++++[>++++++++++<-]>.--.+.++++.

腐霉菌

Pyth仅执行第一行,因此

+2012+1+1e1 or b+bbv+b+NN

请注意,Pyth使用前缀表示法,因此该行的第一部分实际上是

2012 + (1 + (1 + (1 % 10)))

注:e表示%10

由于Pyth的性质,此文件会自动打印。该行的其余部分是有效的Pyth,但是o禁止自动打印之前的前面的空格。

Python 3

大多数Python代码使用字符串注释掉,尤其是中间的一个大的三引号字符串。忽略一些杂散的字符串,我们有:

+2012+1+1e1 or b+bbv+b+NN
"""
...
"""
one=1
print(int(ord('A')/(one/(ord(' ')-one))))
id

第一行和最后一行在语法上均有效,但不执行任何操作。中间的两行显示了我们需要的内容。

红宝石

Ruby代码类似,但是我们使用Heredoc而不是三引号引起来的字符串来注释掉大部分程序。忽略一些杂散的字符串,我们有:

+2012+1+1e1 or b+bbv+b+NN
p((('?'.ord-' '.ord )/(1.0/'A'.ord)).to_i)
<<id
...
id

同样,第一行在语法上是有效的,但是什么也不做。第二行显示了我们需要的内容。


4
嘿,您肯定不会获得“最短代码”奖,但您的创造力却为+1!
Doorknob

11

CJam,12个字节

T~mp[]!_1+oE^

解密代码”主题是随机数打印的一个很好的来源。组装起来很有趣:)

T~     bitwise not of 0 is -1                     [-1]
mp     replace with 0 as -1 is not prime          [0]
[]!    not of an empty array (falsy) is 1         [0, 1]
_      copy that 1                                [0, 1, 1]
1+     add 1                                      [0, 1, 2]
o      output top of stack                        [0, 1]           2
E      push 14                                    [0, 1, 14]       2
^      bitwise xor                                [0, 15]          2
       (CJam implicitly prints stack afterwards)  []               2015

奖励答案

14个字节:

36.e8 .79e2%15

19个字节:

0_*1_)@@{_%\_)*\};5

7

鸵鸟,198

我很高兴得到鸵鸟的答案;我不在乎它有多长。:P(顺便说一下,这是0.5.0版本

{: rotate ( circ n -- )
    neg swap change-circular-start

IN: 1 9 [a,b] <circular> dup 6 rotate >array .
{ 4 5 6 7 8 9 1 2 3 }
IN: 1 9 [a,b] <circular> dup 3 rotate >array .
 7 8 9   3 4  6 };2 n15

原件

: rotate ( circ n -- )
    neg swap change-circular-start ;

IN: 1 9 [a,b] <circular> dup 6 rotate >array .
{ 4 5 6 7 8 9 1 2 3 }
IN: 1 9 [a,b] <circular> dup 3 rotate >array .
{ 7 8 9 1 2 3 4 5 6 }

我所做的只是以下更改:

  • 包装所有内容,而不是立即弹出()2 n15的代码块{};)。

  • 2 n15在最后。2push a 2npush a 015pushes 15,最终2015在输出时变为。

这实际上帮助我发现了一个问题:2n15确实出于某种原因(它打印不工作215),但两者2 n152n 15工作。我必须弄清楚为什么会这样。

这是我用来查找此完美代码示例的搜索查询:

创建:.. 2014-12-16是:答案代码:“ 2”代码:“ 0”代码:“ 1”代码:“ 5”代码:“]”代码:“;”

这个答案适用于140,但我将看看是否可以缩小尺寸。


7

JavaScript,26个字节

原件

alert(998|(103>8>0&41>-0))

回收:

alert(4030>>(998>1|8&1-0))

它只是将4030向右移一位。


5

CJam,14个字节

这个有点棘手,所以即使它有点长,我也必须张贴它。原始答案也在CJam中,因此有效。

原始答案:

92e8.17 5e6.3%

2015年回收利用:

9.68e3 .7e2%15

怎么运行的

9.68e3 is 9680
.7e2 is 70
9680 70% is 9680%70 = 20
15 is 15

因此堆栈中包含,2015逐一打印,打印2015

在这里在线尝试


5

Marbelous,54个字节

无聊的答案(54个字节)

32303135
:R
:Q
++003333333567QQRR}0

(后跟大量等于54个字节的尾随换行符)

原始答案

主板只需放下代表每个字符的大理石2015RQ木板已定义,但从未使用过。

替代答案(92个字节)

3W!!?0]]>W/\&0&1@1@0@0
      ]]>W/\&0&1@1@0@0
                @1  @0
03  02
\\  //
32+A
  Dp

原始答案

应该检查空白单元格的空间。首先打印2(0x32),然后打印0x03+0x02+0x0A=0x0F=15为三位数的十进制(015)。前三行不执行任何操作。

在这里测试答案。


4

珀斯25

https://github.com/isaacg1/pyth

J6ifqT++2010/JJ4U*2^TJ^TT

这里是原始答案(也用pyth编写)。我知道这不是一个非常有竞争力的答案(有长度为26的python答案),但是我真的很喜欢提出这个答案,而且我认为这是一个相当幽默的答案。

说明:

J6                           : J=6
  i                   ^TT    : convert_to_base(..., 10 BILLION)
   fqT          U*2^TJ       : filter(lambda T: T==..., range(2*10^6)
      ++2010/JJ4             : 2010 + J/J + 4

基本上,这是过滤前200万个等于2015年的数字的列表。然后,它将此数字列表视为基数为100亿的数字。幸运的是,该范围内只有一个等于2015的数字,所以您得到2015 * 10000000000 ^ 0,也就是2015。这需要几秒钟的时间才能运行。




2

Mathematica,60个字节

⌊DF@IM~RS~ad~ee~ee~ggggiiimmnnoorrrstt~.22346⌋Print@2015

资源

Floor括号中的部分只是一系列不存在的函数的函数应用程序(由于Mathematica具有符号计算模型,因此Mathematica不会遇到问题)。同样,只写底数和Print@2015就是乘法,Mathematica也没有抱怨。没有语法糖,那将是

Floor[ggggiiimmnnoorrrstt[ee[RS[DF[IM], ad], ee], 0.22346]] * Print[2015]

由于我们不假设使用REPL环境,因此永远不会打印此评估结果(可能是Null Floor[ggggiiimmnnoorrrstt[ee[RS[DF[IM], ad], ee], 0.22346]]),而Print实际的副作用仅归因于STDOUT。

感谢Sp3000提供的源代码。


2

> <>,​​57个字节

来自RadioASCII挑战的原始C ++代码:

#include <cstdio>
int main(){int x;printf("Lawrencium");}

回收的> <>(鱼)代码:

eclne)nfn;
   ""#(();<>Laaccddiiiiiiimmnnnoprrsttttuuwx{}

像Befunge一样,> <>是基于堆栈的2D语言。执行从左上方开始,最初是向右执行。仅以以下方式执行程序的第一行:

e      Push 14                          [14]
c      Push 12                          [14, 12]
l      Push the length of the stack     [14, 12, 2]
n      Output as num                    [14, 12]          2
e      Push 14                          [14, 12, 14]      2
)      Push 1 if greater than else 0    [14, 0]           2
n      Output as num                    [14]              20
f      Push 15                          [14, 15]          20
n      Output as num                    [14]              2015
;      Terminate                        [14]              2015

现在最大的问题是-为什么C ++代码>>>有效?在> <>中,有多种方法可以更改程序流的方向(毕竟,这是一种2D语言):

^>v<     Arrows which direct program flow a certain direction
_/|\     Mirrors which reflect the direction of program flow
#        Four-way mirror, reflect from all directions

当执行C ++代码时,初始字母会#向左反映程序流。但是> <>是环形的,因此指令指针回绕,从行尾开始出现,遇到了>再次引导程序流向右的指针。然后,指针回绕到#,反弹回>...,因此发生无限循环,并且永远不会引发错误。


1

Python 3,1878字节

很长,但还是想分享:

import sys,re,zlib as z,base64
print(2015)#,PIL.Image as ire.search(str(z.adler3(i.open(sys.argv[1]).tobytes()[2::6])%203)+'(\\D+',z.decompress(base64.b8decode(b'c${Tc%XZ>86NyfdNqBH<%b?iLI_EpFkwO-GfQC$tcfjoB$+h*^;0s?o$g*?uzgjxs%~BKif!C3zALZEU!&?wJd#-mqgS@p<P&+)AsV|c*52*C>U&(_4w^urvvWJU8Bj;bvv4ia;eiJLu+bsXLru`DjH|W<`|;xLq++kv5k8VWZgQe*`_u+opEF8>A6qjM%k#skzbiuJ7dL_*><K@9l6!M*H(|w)PZJ2`RYy7K2VVrv+zc)&2Fc?wvh|^#ksyymE?D!Q$3!LbFX%h%vT%1#lr486Iybw?0!`H)ZlZ#XIao2uXTr}(IBl@wRWHa#})bgV);O3HoW7+T*!5M3=^mu6Ri$`7L;uUWj~gsqR6gQR9h7^nKdBIgy>ats36%|M|8p1x;32(ZfK9R5_xK5ts=Sz70c%SIK&g3N1E|sg{n3>JSbKwwhssGcb$8uMNw=Nv;f_;rj?}kz(3-&#FQw@O;q(8nGHjbrTC(NQv=ckXT|eHr|amahCq(7T6<LBTr5Gj>fHV~3DcYINN!Qr`6Dl?jT>!4u5~bb%Zi6VTax;%vg*m325J_$nEC%yqbbYeEp!K_K7k)W-XCP`6+}N7tktMVX+{@c2L&kLAc&IvspGrzZ$F`uOBg}fA3W2neAU}tg~<+iCN=<sR^Zke+9WNhnCyy6!8nfa>33&OWiPt2s=OMTrUgilSYQxrG!gziB!Aj83zX&6S|yjIQkA?iF0n%?<+B=%_D11aoCv?@Q&eei{sqNkr7RG`#*xyzSUE6BUNnZK)3|3Wls}K$qaKv;jOO#!{3Ms)4CQ?shafnAF^zVq(`K9o2xL5JoQoGea+W1$+xmw&8OMOtN1Pid6UAcd+*_bB6IY$KjrO=ac^tPv3(8O`&(agOBbT{Va6s}Rm9&`I#yivC;MhW8=n+^^&Reho;~!~W<xgH6bVq3^=H7)sUXV2nv~DP4`CY`f55i&qH)DvPMQy>)y*Z=|68w@v=#oo5^RSh5R2F%1-vt>h=|+1n0pE^Yq-72!)1+o{hD_3<Cyxpyr6r%cei-AFQ*h1seM$MP>ovLS2k#Ci$to#do$s3MXu2lZsw~9HkbjVWM@1!{w>}LWVj#j2qC(+*Okc>=<qcV}*}+U_QK+(ZZ(x>ZMdDDWtgHiBK+7p6aHHI`u-h6z7|Xm`>D1t4uEp271y7oCI^{1^H~O7QRxTA_U&92Q8z$J2O|5Lbeg_0umd^pSU<%-ki7LtDvo&AgIt0h~6(y@Hr+kyLJ$<B#07KdGob0EW$7@f{GszaUv#tkpSyk759Khmvq-aiyM-_&x_VCTx$Vy<;$<k{T$-@{Mhc<<%KD1AHK^MKkg%pYIW}SxhV?&a{o9=rs@*+hqyoioE=TF>9S<KxY+^69^OA0jkS#0!w@kw4}KTcP9#+PVW+qB|7B`Y?eRs+7}8RSAs?i?-Cz#Wp(Iihd`nI!Q_i%R^o_;fvDQ5|{Cr;yWeirL>_l#(wn)$QenJkK6Sgw)5NleBzvo&G#@>X`7Ib*aS4LHx9epI%BXXV&y7LJ&54g}D25-Q8>DZQ5hGKyIeJkQQu08%j|<x~)q(AOVw9P~Z*c0Z@VM6n#<}tBT6+T%4mZ9f*y76xlEFM~o$xr9*SZHd^6D-C!pkkp3m(-~W3&>KY@106L+;I><MJ^Dz`f{(I3i?u`2pWjUjlwZx`B1JB#h#u3xTH*b1K?TG40|4lxF1$_Pw+t?h2')).decode()).group(1))

摘自KennyTM的答案

我看到在代码中可以找到2、0、1和5以及#,因此我移动了一些字符print(2015),可以注释掉其余字符。我还将PIL导入放入注释中,因此不需要该库。


1

PHP,21字节

<?=65*4*31*2/8;//7**9

让我们再试一次。来自另一个PHP的答案从解读的源代码。它非常基本,但是到目前为止,它是非高尔夫语言中最短的程序。您可以在http://codepad.org/15EjIYAU上进行验证。原始代码如下:

<?=9*8*7*6*5*4/3/2/1;

您甚至不需要4*2/8;)
Martin Ender 2015年

我知道,但是我想使其变得更有趣,而且无论如何它都会被注释掉。
NinjaBearMonkey 2015年
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.