Tantangan:
Buat program atau fungsi yang mengambil input integer, yang menampilkan program / fungsi baru seperti yang ditentukan di bawah ini.
Memasukkan:
Integer n
: Waktu dalam detik sebelum Bom Waktu meledak.
Keluaran:
Program asli yang memiliki waktu dalam detik n
sebagai input, akan menampilkan program / fungsi baru yang melakukan hal berikut:
- Sudah beberapa
n
detik berlalu sejak program sebelumnya dijalankan? MencetakBOOM!
- Lain-lain: Cetak program / fungsi yang, ketika dijalankan dengan sendirinya, mengatur ulang timer ke
n
detik (dan bertindak sama seperti program / fungsi yang pertama kali dikeluarkan).
CATATAN: Ini tidak persis sama dengan program / fungsi keluaran pertama (dalam kebanyakan bahasa setidaknya), karena waktu mulai telah berubah (lihat contoh klarifikasi di bawah).
Contoh kode semu:
Katakanlah program aslinya ABC
dan inputnya adalah 60
detik:
ABC
& 60
keluaran DEF(60)
.
- Jika
DEF(60)
dijalankan dalam 60 detik, itu akan menghasilkanDEF_G(60)
, yang bertindak persis samaDEF(60)
, tetapi dengan waktu mulai yang baru. - Jika
DEF(60)
dijalankan setelah 60 detik, itu akan ditampilkanBOOM!
.
Contoh klarifikasi yang saya maksud dengan 'waktu mulai':
- Program dasar dengan input
60
detik dijalankan pada12:00:00
. Ini output program output pertama dengan waktu mulai12:00:00
. - Program keluaran pertama ini dengan waktu mulai
12:00:00
dijalankan pada12:00:45
. Ini mengeluarkan program keluaran kedua dengan waktu mulai12:00:45
. - Program keluaran ketiga ini dengan waktu mulai
12:00:45
dijalankan pada12:01:25
. Ini mengeluarkan program keluaran keempat dengan waktu mulai12:01:25
. - Program keluaran keempat ini dengan waktu mulai
12:01:25
dijalankan pada12:05:00
. Ini akan menampilkanBOOM!
.
Perhatikan bagaimana output pertama akan dicetak BOOM!
setelahnya 12:01:00
, tetapi program output telah berkembang sehingga meskipun 12:01:25
pada langkah 3, itu masih akan menampilkan program berikutnya sebagai gantinya BOOM!
(karena program output-of-output telah memulai waktu di luar program output pertama) .
Aturan Tantangan:
- Aturan quine default berlaku.
- Setidaknya
n
detik harus berlalu. Jadi jika inputnya60
dan waktu mulai adalah12:00:00
, pada saat12:01:00
itu masih akan menampilkan program v2, tetapi pada saat12:01:01
itu akan menampilkanBOOM!
. - Program output tidak akan mengambil input apa pun ( kecuali untuk parameter kosong yang tidak digunakan jika lebih pendek ). Waktu mulai harus diberikan ke program berikutnya sebagai nilai 'hard-coded' (itulah sebabnya output dari program output tidak persis sama dengan yang sebelumnya (dalam kebanyakan bahasa).
- Hanya ukuran program / fungsi utama Anda yang dihitung dalam satuan byte.
- Anda dapat menampilkan program / fungsi baik sebagai string (atau format wajar yang sebanding, seperti byte / array karakter / daftar), sebagai fungsi jika bahasa Anda mendukung ini, atau format wajar lainnya (tanyakan apakah Anda tidak yakin).
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa pun'. - Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
- Juga, silakan tambahkan penjelasan jika perlu.
Jawaban:
JavaScript, 51 byte
Tes di browser
versi lama
Tes di browser
sumber
return()=>
. Dan meskipun saya hampir tidak pernah memprogram dalam JavaScript, saya memeriksa skrip uji Anda dan bahkan memodifikasinya dengan menambahkan tes untuk fungsi output fungsi: Uji di sini dengan tes fungsi-fungsi keempat. Segalanya tampak bekerja, dan ini mengejutkan saya mungkin menambahkan, jadi +1 dari saya. PS: Dalam aturan itu disebutkan harus mengeluarkan string bukan fungsi. Tapi saya akan sedikit mengubah aturan untuk memungkinkan keduanya. Bisakah Anda memodifikasi skrip sehingga menghasilkan fungsi untuk mencatat selama pengujian?f=(t,o=setTimeout(_=>o=0,t*1e3))=>_=>o?f(t):'BOOM!'
harus bekerjaJavaScript, 53 byte
Tampilkan cuplikan kode
Jawaban lama (kembali harus berupa string)
JavaScript, 78 byte
Tampilkan cuplikan kode
sumber
Java 8, 234 byte
Maaf memposting tantangan saya sendiri segera. Ini terutama dimaksudkan sebagai klarifikasi lebih lanjut dari tantangan, dan saya ragu apakah akan menambahkannya ke pertanyaan itu sendiri atau mempostingnya sebagai jawaban (dan memutuskan untuk mempostingnya sebagai jawaban untuk tidak mengacaukan posting tantangan).
Dan meskipun saya ingin mengatakan itu juga sesuatu untuk (mencoba dan) mengalahkan, itu bahkan tidak layak disebutkan karena, well .. Java (hampir) selalu dikalahkan. ; p
Cobalah online.
Contoh output:
Coba fungsi lambda yang dikeluarkan di sini.
Contoh output:
Penjelasan:
Fungsi utama mengambil input integer dan mengembalikan sebuah String. Ini pada dasarnya mengembalikan fungsi yang merupakan quine, dengan input integer dan waktu mulai (dalam detik sebagai timestamp) sebagai nilai hard-coded.
Fungsi utama:
n=60
digunakan dalam contoh di bawah ini:Program keluaran pertama:
Program keluaran kedua:
Sama seperti program keluaran pertama, kecuali yang
70492.687613232
diganti dengan70548
.sumber
Perl 5 +
-p
, 88 byteProgram output harus dijalankan dengan
-M5.010
untuksay
, tetapi tidak-p
.Cobalah online!
sumber
05AB1E , 50 byte
Pasti bisa bermain golf sedikit lebih, tapi cukup sulit untuk menghasilkan semi-quine yang menghasilkan program-quine dengan nilai yang dimodifikasi.
Cobalah online atau coba jalankan contoh 20 detik .
Penjelasan:
Contoh program yang dihasilkan:
Yang didasarkan pada Quine default:
"34çìD«"34çìD«
.Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
‘ÒÞ!
adalah"BOOM!"
.CATATAN: Alasan spasi di sana
çì
adalah karena jika tidak itu menafsirkan sebagai kamus-string (triumph
) karena’...’
.sumber