Tumbuhkan Hingga 2017

16

Dalam tantangan ini Anda akan membangun sebuah program yang tumbuh saat melintasi sepanjang zaman ... Sampai 2017.

Tantangan

Setiap kali deskripsi tantangan ini mengatakan "program", Anda juga dapat membaca "fungsi".

Kiriman Anda, ketika dieksekusi, akan menampilkan program yang THE LENGTH OF YOUR SUBMISSION+1 panjangnya byte.

Ketika bahwa program yang dijalankan, itu akan menampilkan program yang THE LENGTH OF YOUR SUBMISSION+ 2byte panjang ... dan seterusnya.

Namun , ketika program Anda telah mencapai panjang 2017 byte, alih-alih harus 2017keluar dan keluar.

Aturan

  • Output dari program akhir harus 2017dan hanya 2017. Ini bisa berupa string atau integer, tetapi harus membaca 2017dan bukan 2017.0atau 0x7E1omong kosong semacam itu.
  • Tidak ada celah standar .
  • Hanya program awal Anda yang diizinkan untuk meminta input, yang akan ditambahkan ke bytecount Anda.
    Jadi, jika program awal Anda panjangnya 324 karakter dan membutuhkan input 13 byte, total skor Anda akan menjadi 324 + 13 = 337 dan program yang dihasilkan olehnya harus 338 sepanjang byte.
    • Namun, menggunakan flag baris perintah (mis. perl -X) - asalkan program awal Anda dan semua program yang dihasilkan menggunakan flag yang sama . Juga, mereka juga menghitung total bytecount. Tanda hubung, garis miring, dll. Di depan flag baris perintah tidak dihitung terhadap total, jadi mis. perl -XDihitung sebagai satu byte tambahan.
  • Jika Anda mengembalikan suatu fungsi, itu harus merupakan fungsi aktual dan bukan string yang, ketika dievaluasi, menghasilkan fungsi.
  • Quine yang tidak benar (jika program Anda adalah quine) tidak diizinkan.

Contoh

Pseudocode, 99 byte

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

Kiriman Anda dapat bekerja secara berbeda, asalkan sesuai dengan aturan di atas.

pengguna2428118
sumber
Apakah hanya menambahkan NOP seperti yang ;;;diizinkan?
FlipTack
@FlipTack Ya. ·
user2428118
"Tanda hubung, garis miring, dll. Di depan flag baris perintah tidak dihitung terhadap total, jadi mis. Perl -X dihitung sebagai satu byte tambahan." - Apakah ini sengaja bertentangan dengan norma di sini seperti yang dijelaskan di Meta? Biasanya, tanda hubung, garis miring, dll. Kadang-kadang harus dihitung, tergantung pada seperti apa permohonan tanpa opsi itu: meta.codegolf.stackexchange.com/questions/273/…
hvd
@ DVD Jangan kira saya membaca yang itu, jadi tidak, itu tidak disengaja. Yang mengatakan, saya tidak berpikir ada banyak ruginya mengabaikan mereka sehingga saya tidak akan mengubahnya untuk tantangan ini.
user2428118

Jawaban:

6

*> <> , 29 28 30 byte

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

Coba di sini! (* coba dengan 2017 byte )
* atur penundaan ke 0ms atau Anda mungkin harus menunggu lama

Ini menambahkan tambahan setiap menjalankan subsquent. Jika memiliki 2017 byte dan dijalankan, itu akan menampilkan 2017 dan menghentikan eksekusi tanpa output lainnya.

Pembaruan: Disimpan 1 byte dengan memeriksa apakah panjangnya kurang dari 2017 bukannya sama

Pembaruan 2: Memperbaiki output untuk +2 byte

Penjelasan

" 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
redstarcoder
sumber
Ya, tidak tepat when your program has reached a length of 2017 bytes, tidak tahun 2016
Destructible Lemon
@DestructibleWatermelon diperbaiki
redstarcoder
4

Python 2.7, 90 byte

Berikut ini yang relatif sederhana:

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

Coba iterasi pertama di sini! Coba iterasi kedua dari belakang di sini! Coba iterasi terakhir di sini!

Tidak Terkumpul:

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.
Calconym
sumber
@redstarcoder Iterasi akhir memiliki tepat 2017 karakter. Anda dapat melihat jumlah byte di sudut kanan atas saya pikir ....
Calconym
Ah kesalahan saya, tidak yakin bagaimana itu terjadi, maaf!
redstarcoder
Anda dapat menggunakan p='';...dan 1929else, tetapi perhatikan bahwa pencetakan juga mencetak baris baru di bagian akhir, jadi Anda harus menambahkan baris baru ke program Anda, jika tidak maka akan bertambah dua byte setelah dijalankan pertama kali.
mbomb007
2

Microscript II, 38 byte

{v{h}sl+s""+vK#s2017=(2017ph)lp"~"ph}~
SuperJedi224
sumber
1

> <> , 34 byte

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

Cobalah online! Perhatikan bahwa, untuk menguji ini untuk nilai yang lebih kecil, nilai Anda (minus 1) harus dapat dihasilkan dalam 7 byte.

Penjelasan

":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 `"`
Conor O'Brien
sumber
1

Java, 251 Bytes (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();}}}//

Ini dengan asumsi proyek dibuat di Eclipse, menggunakan konvensi .javafile di SRC dari dir yang berfungsi. Ada cara lain untuk mendeteksi di mana sumbernya, tetapi saya juga tidak berpikir ini melanggar aturan.

Pada dasarnya buka .java source-code, dan tambahkan As hingga 2017 (setelah komentar). Ketika ukuran file sumber mencapai total 2017 byte, ia akan mencetak 2017.

Guci Gurita Ajaib
sumber
1

C, 197 Bytes

#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);}
Giacomo Garabello
sumber
1

Python 2, 217 167 78 byte

Perhatikan bahwa harus ada baris tambahan. Saya menggunakan konsep yang mirip dengan apa yang digunakan Calconym, jadi terima kasih atas ilhamnya!

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

Cobalah online

Coba di 2016 ; Coba pada 2017


Versi sebelumnya:

Program ini menggunakan inspectmodul untuk mendapatkan nomor baris saat ini. Kemudian, ia mencetak dirinya sendiri tetapi dengan garis tambahan setelah impor, yang mengubah nomor baris untuk program berikutnya. Seharusnya juga ada baris baru yang tertinggal di sini.

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

Cobalah online

mbomb007
sumber
1

CJam , 39 33 30 byte

33q:X~

dengan input

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

Cobalah online!

Ini secara fungsional setara dengan versi saya sebelumnya, kecuali bahwa itu menghindari kebutuhan untuk menulis dan melarikan diri dari tanda kutip. Versi sebelumnya:

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

Output yang mana

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

output yang mana

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

dan seterusnya. Akhirnya, programnya

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

Keluaran 2017.

Bagaimana itu bekerja

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

Tetapi apa yang sebenarnya dilakukan oleh kode dalam input?

 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)

Jika angka pertama program tidak sama dengan 2017, maka itu akan menampilkan program di mana angka itu bertambah satu kali lebih banyak daripada saat ini. Jika itu sama dengan 2017 (yaitu sudah meningkat 1984 kali), maka cukup tekan 2017 dan hentikan. Angka pertama dimulai sebagai 33 (panjang kode); setiap kenaikan akan menambah panjang kode sebesar 1 DAN angka itu menjadi 1, jadi ketika 33 telah bertambah cukup menjadi 2017, kode juga akan menjadi 2017 byte panjang.

Kucing Bisnis
sumber
0

JavaScript, 98 83 byte

Itu adalah tantangan yang cukup ... Tebak itulah yang saya dapatkan karena membutuhkan fungsi aktual untuk dikembalikan dan bukan hanya sumber fungsi.

Fungsi asli

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

Saya menggunakan functionalih-alih di =>sini karena yang terakhir tidak mendukung fungsi bernama, hanya menetapkan fungsi anonim ke variabel.

Iterasi pertama

Menjalankan hal di atas di konsol browser Anda mengembalikan fungsi yang, ketika dilemparkan ke string, terlihat seperti:

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

Menuju 2017

Karena setiap fungsi mengembalikan fungsi baru, Anda dapat memanggil fungsi asli / hasilnya 1934 kali untuk mendapatkan 2017 .

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

Diuji dengan Firefox.

pengguna2428118
sumber