直到2017年


16

在这个挑战中,您将构建一个程序,该程序会随着时代的发展而不断发展……直到2017年。

挑战

每当此挑战说明说“程序”时,您也可以阅读“功能”。

您的提交在执行时将输出一个THE LENGTH OF YOUR SUBMISSION+ 1字节长的程序。

执行程序,它会输出一个程序,它是THE LENGTH OF YOUR SUBMISSION+ 2字节长...等等。

但是,当程序达到2017字节的长度时,它必须改为输出2017并退出。

规则

  • 最终程序的输出必须为2017并且仅2017。它可以是字符串,也可以是整数,但必须读取2017并且不能读取或不读取,2017.0或读取0x7E1其他此类废话。
  • 没有标准漏洞
  • 允许您的初始程序要求输入,该输入将添加到您的字节数中。
    因此,如果您的初始程序是324个字符长,并且需要输入13个字节,那么您的总分将是 324 + 13 = 337, 并且它输出的程序必须是 338长个字节。
    • perl -X但是,只要您的初始程序和所有生成的程序都使用相同的标志,就可以使用命令行标志(例如)。同样,它们也计入总字节数。命令行标志前的破折号,斜杠等不计入总数,因此例如perl -X算作一个额外的字节。
  • 如果返回一个函数,则它应该是一个实际函数,而不是在求值时产生一个函数的字符串。
  • 不允许使用错误的奎因(如果您的程序是奎因)。

伪码,99个字节

IF (PROGRAM LENGTH == 2017)
  PRINT 2017
ELSE
  PRINT (THE SOURCE OF THIS PROGRAM + 1 BYTE PADDING)

只要符合上述规则,您的提交内容可能会有所不同。


只是附加诸如;;;允许的NOP 吗?
FlipTack

@FlipTack是的。–
user2428118

“命令行标志前的破折号,斜杠等不计入总数,因此,例如perl -X算作一个额外的字节。” -这是否有意违反Meta上所述的规范?通常,破折号,斜线等有时应计算在内,具体取决于没有该选项的调用的样子:meta.codegolf.stackexchange.com/questions/273/…–
hvd

@hvd不要以为我读过那个,所以不,这不是故意的。就是说,我认为忽略它们不会有太大的危害,因此我不会为这一挑战而改变它。
user2428118

Answers:


6

*> <>29 28 30字节

" r::2+l'-':*7-(?ul1-n;Ol?!;ou

在这里尝试!(* 尝试使用2017字节
*将延迟设置为0ms否则您可能需要等待很长时间

每次后续运行都会添加一个额外的内容。如果它有2017个字节并运行,它将输出2017年并停止执行,没有其他输出。

更新:通过检查长度是否小于2017年而不是等于保存了1个字节

更新2:固定的+2字节输出

说明

" r: 2+                         build quine
    :                           copy extra " "
       l                        push length to stack
        '-':*7-                 push "2018" to stack
               (?u     O        if not length < 2018:
                  l1-n;           output length-1 and exit
                       Ol?!;ou  output entire stack and exit

是的,不是很正确when your program has reached a length of 2017 bytes,不是2016年
破坏的柠檬

@DestructibleWatermelon已修复
redstarcoder'1

4

Python 2.7,90个字节

这是一个相对简单的方法:

p='q';s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1929 else'2017'";exec s

在这里尝试第一次迭代! 在这里尝试倒数第二次迭代! 在这里尝试最后的迭代!

取消高尔夫:

p='q'      # The length of string p is the number of iterations so far.

s=r"p+='q';print('p=\''+p+'\';s=r\"'+s+'\";exec s')if len(p)<1928 else'2017'"

exec s     # s contains the source code, but also contains a line saying "p += 'q'",
           # which makes the byte count longer. When the length of p is 1928 (i.e. when the
           # entire program is 2017 bytes long), 2017 is printed instead.

@redstarcoder最后的迭代恰好有2017个字符。你可以看到在右上角的字节数,我认为......
Calconym

啊,我的错,不知道怎么回事,对不起!
redstarcoder '17

您可以使用p='';...1929else,但是请注意,打印操作还将在末尾打印换行符,因此应在程序中添加尾随的换行符,否则在第一次运行后会增加两个字节。
mbomb007 '17


1

> <>,34个字节

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#

在线尝试!请注意,为了测试此值是否较小,必须能够在7个字节中生成您的值(负1)。

说明

":l' '95**)b*f3++0.1-}'#'r>o<:ln;#
".................................   push this string
 :                                   duplicate
  l                                  push length of stack
   ' '95**                           push 2016
          )                          1, if length > 2016, 0 otherwise
           b*                        multiply by 11
             f3++                    add 18
                 0.                  jump to that character on this line
                                     if the length is sufficiently long, this skips the
                                     next 10 characters, to the 11th (`b` from earlier):
                             :ln;    (if length is > 2016)
                             :         duplicate
                              l        push length
                               n       output as number
                                ;      terminate
                   1-}'#'r>o<        (if length <= 2016)
                   1-                  subtract 1 from the last char, `#`, to get `"`,
                     }                 which is then moved to the bottom
                      '#'              pushes `#` (will be appended)
                         r             reverses the stack
                          >o<          output stack, until error (accepted by default)
                                 #   This is never reached, but is used to generate `"`

1

Java,251字节(Eclipse IDE)

import java.io.*;class G{public static void main(String[]args) throws Exception{File x=new File("./src/G.java");if(x.length()==2017){System.out.print("2017");}else{PrintWriter y=new PrintWriter(new FileOutputStream(x,1>0));y.print("A");y.close();}}}//

假设该项目是使用.java工作目录的SRC中的文件约定在Eclipse 中完成的。还有其他方法可以检测出源在哪里,但是我也不认为这违反了规则。

基本上打开.java源代码,并附加As到2017年(在评论后)。当源文件的大小总计达到2017字节时,它将打印2017。


1

C,197字节

#define A ""
char*s="#define A %c %s%c%cchar*s=%c%s%c;%cmain(){printf(sizeof A==1820?%c2017%c:s,34,A,34,10,34,s,34,10,34,34);}";
main(){printf(sizeof A==1820?"2017":s,34,A,34,10,34,s,34,10,34,34);}

1

Python 2,217 167 78字节

请注意应该有一个尾随换行符。我使用了与Calconym相似的概念,因此感谢您的启发!

p='q';s='p+=p[0];print"p=%r;s=%r;exec s"%(p,s)if len(p)<1941else 2017';exec s

在线尝试

尝试2016年 ; 尝试2017


先前版本:

该程序使用inspect模块来获取当前行号。然后,它会打印自己,但在导入后会有额外的一行,这将更改下一个程序的行号。这里也应该有尾随换行符。

from inspect import*
n=stack()[0][2];s='from inspect import*%sn=stack()[0][2];s=%r;print(s%%(chr(10)*n,s))if n<1852else 2017';print(s%(chr(10)*n,s))if n<1852else 2017

在线尝试


1

CJam39 33 30字节

33q:X~

与输入

2017:N=N{33')X+`":X~"+}?

在线尝试!

这在功能上与我的先前版本等效,除了它避免了编写和转义引号的需要。以前的版本:

33"2017:N=N{33')X+`\":X~\"+}?":X~

哪个输出

33")2017:N=N{33')X+`\":X~\"+}?":X~

哪个输出

33"))2017:N=N{33')X+`\":X~\"+}?":X~

等等。最后,程序

33"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))2017:N=N{33')X+`\":X~\"+}?":X~

输出2017

怎么运行的

33      Push 33
  q     Read the input: 2017:N=N{33')X+`":X~"+}?
   :X   Store it in variable X
     ~  Eval it

但是输入中的代码实际上是做什么的?

 2017:N                      Push 2017 and store it in N
       =                     Check if the other number (33 on first run) equals 2017
        N                     If it does, push 2017
         {                    Else, execute this block:
          33                   Push 33
            ')                 Push the ) character
              X                Push X
               +               Concatenate with ')
                `              String representation (wraps it in quotes, escapes quotes inside)
                 ":X~"       Push the string ":X~"
                      +      Concatenate
                       }?    (end of block)

如果该程序的第一个数字不等于2017,则它将输出一个程序,该程序中该数字的递增时间比本次多。如果它等于2017(即已增加1984倍),则只需按2017并终止。第一个数字以33(代码长度)开头;每次增加都会将代码长度增加1,并将该数字增加1,因此,当33增加到足以变为2017时,代码也将为2017字节长。


0

JavaScript, 98 83个字节

那是一个很大的挑战……猜猜这就是我需要返回实际函数,而不仅仅是返回函数的源代码。

原始功能

function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

我在用着 function=>这里而不是这里,因为后者不支持命名函数,只是将匿名函数分配给变量。

第一次迭代

在浏览器控制台中运行上面的命令会返回一个函数,当转换为字符串时,它看起来像:

function x(){return "33".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}

到2017年

由于每个函数都返回一个新函数,因此您可以将原始函数/其结果调用1934次以获得2017

console.log((
function x(){return "3".length>1933?2017:Function(`return ${x}`.replace(/3/,33))()}
)()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
)

经过Firefox测试。

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.