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はカウントされないため、たとえば1バイト追加されます。
  • 関数を返す場合、評価時に関数を生成する文字列ではなく、実際の関数である必要があります。
  • 不適切なクイン(プログラムがクインの場合)は許可されません。

擬似コード、99バイト

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

上記のルールに準拠している限り、提出内容は異なる場合があります。


;;;許可されたようなNOPを追加するだけですか?
FlipTack

@FlipTackはい。–
user2428118

「コマンドラインフラグの前のダッシュ、スラッシュなどは合計にはカウントされません。たとえば、perl -Xは1バイト追加としてカウントされます。」-メタで説明されているように、これは意図的にここの規範に反していますか?通常、ダッシュ、スラッシュなどは、そのオプションなしの呼び出しがどのように見えるかに応じてカウントされることがあります。meta.codegolf.stackexchange.com
273

@hvd私はそれを読んだとは思わないので、いや、それは意図的ではありません。そうは言っても、それらを無視しても大きな害はないと思うので、この挑戦​​のためにそれを変えません。
user2428118

回答:


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

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

ここで最初の反復を試してください! ここから最後から2番目の反復を試してください! ここで最後の反復を試してください!

ゴルフをしていない:

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

p='';...and は使用できます1929elseが、印刷では最後に改行も印刷されるため、プログラムに末尾の改行を追加する必要があります。そうしないと、最初の実行後に2バイト増加します。
mbomb007


1

> <>、34バイト

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

オンラインでお試しください!これをより小さい値でテストするには、値(マイナス1)を7バイトで生成できる必要があることに注意してください。

説明

":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();}}}//

これは、プロジェクトがEclipseで作成され、次の規則を使用していることを前提としています。 .java、作業ディレクトリのSRCにあるファイルます。ソースがどこにあるかを検出する方法は他にもありますが、これもルールに反するとは思いません。

基本的に.javaソースコードを開き、2017年まで(コメントの後)Asを追加します。ソースのファイルサイズが合計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に等しくない場合、その数が今回よりも1つ多くインクリメントされたプログラムが出力されます。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でテスト済み。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.