PPCG belum memiliki cukup quines ...
Tantangan:
Tugas Anda adalah membuat program "A0". Ketika program ini dijalankan tanpa input, tidak menghasilkan apa-apa. Ketika program ini dijalankan dengan input, output "A1". Ketika "A1" dijalankan tanpa input, output "A0". Ketika "A1" dijalankan dengan input, output "A2". Cukup banyak, "A (k)" akan menampilkan "A (k-1)" saat dijalankan tanpa input, dan akan menampilkan "A (k + 1)" saat dijalankan dengan input.
Detail
Saya percaya tantangan ini cukup sederhana; tidak ada aturan lain kok. Omong-omong, setiap program harus mengandung setidaknya 1 byte. Anda dapat berasumsi bahwa input hanya akan terdiri dari karakter ASCII, dan Anda dapat mengabaikan spasi jika Anda inginkan, tetapi Anda mungkin tidak menentukan input tertentu. Outputnya bisa berupa STDOUT atau STDERR, tetapi semua program Anda harus di-output ke yang sama. Yang lain juga dapat berisi teks (jadi Anda dapat output ke STDOUT dan kemudian keluar dengan kesalahan) Terima kasih kepada @Dennis karena menunjukkannya.
Semua program harus dalam bahasa yang sama, dan setiap program harus unik dari yang lain.
Skor sama dengan panjang program "A0". Karena ini adalah tantangan kode-golf, skor terendah akan menang!
Jawaban:
Pip , 28 byte
Cobalah online!
Penjelasan
Ini adalah versi modifikasi dari quine Pip terpendek yang diketahui
V Y"`V Y`.RPy"
. Quine itu bekerja dengan mendefinisikan string, menariknya ke dalamy
variabel, dan kemudian mengevaluasinya. Ketika dievaluasi, string mengambil repr dariy
(sehingga membungkus nilaiy
dalam tanda kutip ganda) dan menyatukan pola literal`V Y`
ke depannya.Strategi kami adalah memasukkan sebuah ke
0
dalam program, lalu ganti0
dengan10
jika ada input, atau ganti10
dengan0
jika tidak ada input. (Dengan demikian, A ( k ) akan berisi angka yang terdiri dari k 1 diikuti oleh 0.)0
dan10
nyaman karena ada variabel bawaan (i
dant
, masing-masing) dengan nilai-nilai tersebut, sehingga kami dapat merujuknya tanpa menggunakan angka aktual .Jadi alih-alih
RPy
, kami inginRP yRit
jika ada input danRP yRti
jika tidak. Kita dapat menggabungkan dua kasus dengan menukar nilait
dani
jika ada input (I#q Sti
), lalu lakukanRP yRti
. (Kita harus menguji#q
, panjang input, karena input suka0
adalah falsey.)Sekarang kita hanya perlu mendapatkan literal
0
dalam kode dan menangani kasus khusus A0 yang tidak menghasilkan output. Keduanya dapat diselesaikan dengan menguji0+i
dan mengembalikanu
jika itu salah:110+i
).i
dant
ditukar dani
10.0+i
masih benar.i
masih 0 dan0+i
falsey. Alih-alih inti quine, kita outputu
, yang merupakan variabel bawaan untuk nil. Mencetak nil tidak menghasilkan keluaran.sumber
Python 2, 93 byte
Ada linefeed baris tambahan.
Coba dengan input | Cobalah tanpa masukan
Ini dimodifikasi dari jawaban saya pada pertanyaan serupa.
Jika ada input, maka akan bertambah
p
. Sehingga program yang dihasilkan akanp=2+...
,p=3+...
, dllsumber
input()
dan membutuhkan input untuk dikelilingi oleh tanda kutip, daripada menggunakanraw_input()
. Jika Anda ingin memasukkan nol, gunakan"0"
.