Ini 10 Agustus 2019, tetapi tugas Anda masih melibatkan Y2K. Aneh, kan?
Buat program yang mencetak sendiri, dengan nomor dua digit ditambahkan padanya. Pertama kali Anda menjalankannya, ia harus menambahkan 00 ke outputnya (kode sumbernya, karena ini adalah varian quine). Ketika Anda menjalankan output itu, program asli tanpa nomor dua digit, itu harus menampilkan program asli, tetapi dengan 01 ditambahkan. Jalankan output itu untuk mendapatkan program OG dengan 02 ditambahkan, maka untuk mendapatkan program dengan 03 ... Rantai ini harus berlanjut hingga 99. Program itu harus di-output BREAKING NEWS: WORLD ENDS
.
Jika program Anda adalah Y2Kparanoia: yes
:
- Seharusnya output
Y2Kparanoia: yes00
- Keluaran itu harus dicetak
Y2Kparanoia: yes01
- Keluaran itu harus dicetak
Y2K paranoia: yes02
- Ulangi hingga langkah 100: program ini menampilkan berita kiamat yang ditentukan
Ini adalah kode golf, sehingga program terpendek yang dapat mencetak sendiri sambil mengikuti langkah-langkah ini akan menang.
2Kparanoia: yes97
dan memproduksi2Kparanoia: yes98
, jadi tidak seharusnya (4) membacaRepeat to step 100, but step 101 will output "BREAKING NEWS: WORLD ENDS"
? (Yaitu2Kparanoia: yes99
menghasilkan berita)Jawaban:
Perl 6 ,
122 114106 byte-8 Bytes berkat Shelvacu
Cobalah online!
Mengambil format quine standar dan menambahkan string berita yang melanggar serta panggilan fungsi baru dengan nomor yang ditambahkan. Ini digunakan
END
untuk menjalankan fungsi ketika program berakhir.sumber
END
danour
variabel:END {<print $s-199??"END\{<$_>~~.EVAL};our\$s="~($s-1&&$s-99)+100!!"BREAKING NEWS: WORLD ENDS">~~.EVAL};our$s=1
Ruby,
158154146128122100 byteTerinspirasi oleh jawaban ini .
EDIT: Saya dapat menghapus
(s.split(35.chr)[0]+35.chr).inspect
dan menggantinya dengans[0..-2]
(rentang setiap nilai kecuali yang terakhir) dan%{ ... }
sintaks string yang saya gunakan sebelumnya. Disimpan 22 byte!Versi lama:
EDIT: Menyimpan sepasang parens (dan pasangan yang sesuai di bagian data) dengan menyadari bahwa itu
"BREAKING NEWS: WORLD ENDS"
adalah format string yang benar-benar valid, dan ruby mengabaikan parameter extraneos.Ketika mulai ini saya menyadari bahwa karena nomor harus pergi di akhir program, dan ruby tidak mengizinkan menggunakan variabel sebelum mereka dinyatakan, saya harus membuat kode berjalan setelah angka entah bagaimana. Saya bisa melakukan sesuatu seperti
def a(s) ... end;a 1
yang akan terjadi...end;a 100
, namun menggunakanEND
sintaks Ruby yang kurang dikenal menggunakan byte lebih sedikit. Namun, blok di dalamnyaEND
berada dalam cakupan yang berbeda, jadiS
harus berupa variabel global atau konstan.Penjelasan:
END{ ... };S=1
: Jalankan blok kode tepat sebelum program berakhir; Tetapkan konstanS
ke1
(atau100
-199
di iterasi berikutnya)$><<( ... )
:$>
adalah jalan pintas di ruby untuk stdout, dan<<
pada IO menulis ke IO. Diperlukan parens, jika tidak demikian($><<S)>198...
S>198?"BREAKING NEWS: WORLD ENDS":(q=...)%[q,S<2?0:S-99]
: Jika saya memecah ini menjadi kode yang sedikit lebih masuk akal itu akan menjadi:The
%
Operator diterapkan string secara efektifprintf
, dengan LHS menjadi format string dan RHS menjadi argumen.%{ ... (q=%%{%s}) ... S=1%02d}
: ruby memiliki sintaks yang menarik untuk string yang juga memungkinkan pasangan kurung keriting muncul di dalam string tanpa keluar selama mereka seimbang. Ini sangat membantu, karena jika tidak, quine yang sama harus melarikan diri dari string untuk menjadikannya sebagai string literal. Dua pergantian dalam string format adalah%s
untuk string biasa dan%02d
untuk jumlah yang tepat ke ukuran 2 dengan karakter0
.Pikiran saya tentang memperpendek lebih lanjut:
Akan lebih baik untuk dapat menggunakan,EDIT: Konstanta bersifat global dan dapat menjadi satu karakter!s
bukan$s
, tetapi mendefinisikans=$s;
atau membuat fungsidef a(s) ...
keduanya menggunakan lebih banyak byte daripada yang mereka simpan, dan saya tidak bisa memikirkan cara lain untuk melakukannya.S
selalu kurang dari itu100
, sehingga bisa dibandingkan dengan menggunakan angka 2 digit, bukan angka 3 digit. Namun, jika saya gunakanS=0
di akhir, dua digit berikutnya ditafsirkan sebagai oktal,8
dan9
tidak valid dan semuanya adalah bunk.S=
sama sekali tidak valid, dan saya tidak tahu cara lain untuk membuat nilai valid baik sebelum dan sesudah menambahkan dua digit. Dari catatan,0
(dan setiap bilangan bulat lainnya) adalah truthy di ruby.Setiap pemikiran tentang bagaimana membuat ini lebih pendek, tolong beri tahu saya!
Cobalah online!
sumber
s=100-1
? Makas
akan menjadi 99, 0, -1 ...- 99, dan-s
akan menjadi -99, 0 ... 99.Pergi,
382 366 354 340 305 298272 byteTidak akan menang tetapi saya bersenang-senang dengan tantangan.
Cobalah di Go Playground!
Berdasarkan quine. Jika variabel
n
kurang dari 199, maka itu menambah variabel stringn
aksen kubur (\x60
), karakter Go untuk string multiline, diikuti oleh koma,
. Ini berlanjut dengan mencetak 147 karakter pertamas
(untuk mencegah pencetakan,
karena itu hanya terjadi di akhir) kemudian mencetaks
secara keseluruhan, dan akhirnya mencetak100
jikan == 1
dann+1
sebaliknya. Hasilnya adalah berturut-turut berjalan mengubah variabeln
di akhir program menjadi 100, 101, dll. Jika variabelnyan
199 atau lebih, maka ia mencetak berita.sumber
Haskell ,
240232218216 byteCobalah online!
Diadaptasi dari quine
sumber
JavaScript (ES6), 116 byte
94 byte, jika fungsi pengerasan diizinkan
sumber
f=${f}
), itu bukan quine menurut codegolf.meta.stackexchange.com/a/4878/13400C # (Visual C # Interactive Compiler) , 193 byte
Cobalah online!
sumber
Pyth ,
8180 byteCobalah online!
Penjelasan:
Dan kode dalam string adalah (berita singkat):
sumber