Tantangan
Tuliskan program P terpendek sehingga
- P mengambil bilangan bulat positif n sebagai input, dan mengeluarkan string program P 1
mengeksekusi P 1 (tanpa input) menghasilkan string program P 2 ,
mengeksekusi P 2 (tanpa input) menghasilkan string program P 3 ,
...
- mengeksekusi P n (tanpa input) menghasilkan persis "Halo!" (tanpa tanda kutip).
Secara skematis:
P (n) → P 1 → P 2 → ... → P n → Halo!
Kriteria
- I / O adalah via stdin / stdout.
- Panjang program diukur dalam byte.
- Program hanya terdiri dari karakter yang dapat dicetak ASCII.
- Tidak boleh ada duplikat di antara program P, P 1 , ..., P n .
EDIT: Program P, P 1 , ..., P n dimaksudkan sebagai kode sumber, dan "mengeksekusi program" mengacu pada pemrosesan apa pun yang menghasilkan output (yaitu, interpretasi, kompilasi & eksekusi, dll.).
Jawaban:
Golfscript
3914Contoh:
Dengan asumsi bahwa n = 4 dan program kami adalah P , ini adalah langkah-langkahnya:
Jalankan P dengan parameter 4 . Outputnya adalah
"\"\\\"\\\\\\\"Hello!\\\\\\\"\\\"\""
( P 1 )Menjalankan output P 1
"\"\\\"Hello!\\\"\""
( P 2 )Menjalankan output P 2
"\"Hello!\""
( P 3 )Menjalankan output P 3
"Hello!"
( P 4 )Menjalankan output P 4
Hello!
. Jika Anda tidak mempercayai saya, ikuti tautan ini ☺.sumber
\'\\\'\\\\\\\'Hello!\\\\\\\'\\\'\'
(mis., Melewatkan tanda kutip luar), ketika saya menjalankannya baik di Linux maupun di bawah Menangkan 7 (menggunakanecho 4 | ...
pada prompt perintah). Adakah yang tahu apa masalahnya?~''\(,{)2\?('\\'*}/]"'"*:z"'Hello!"z-1%"'"
;"..."
, di mana...
inputnya. Misalnya,;"4"
akan mengungkapkan masalah missing-quote di atas, sedangkan hanya mendahului program dengan"4"
tidak.) ...;
. Ketika saya menulis program pertama saya lupa tentang ini di sepanjang jalan, meskipun saya yang menulis tentang hal itu di situs meta: meta.codegolf.stackexchange.com/a/521/3527JavaScript, 58 karakter
sumber
_
adalah 0, ini menghasilkan "Hello!", jika tidak, output definisi fungsi dan panggilan dengan_
minus satuPerl (
4536)Jalankan dengan
perl -M5.010
menggunakansay
.Untuk
n=1
, keluaransay q(Hello!)
Untuk
n=2
, keluaransay q(say q(Hello!))
Untuk
n=3
, keluaransay q(say q(say q(Hello!)))
dan sebagainya.
sumber
Python3, 66
sumber
Gangguan Umum, 68 karakter
Satu-satunya hal yang tidak langsung: itu menghasilkan satu tingkat program lebih dari yang dibutuhkan dan mengevaluasinya, karena
eval
satu karakter lebih pendek dariprint
.sumber
Gangguan Umum: 65
Versi ini lebih kecil dari jawaban CL yang ada. Jika Lisp Anda rusak dengan stackoverflow, maka Anda harus menggunakan ini, 81 byte:
Saya tahu saya terlambat ke pesta, dan saya yakin ini masih bisa dioptimalkan.
Demonstrasi (hati-hati, beberapa REPL online tidak berfungsi dengan benar):
Perhatikan bahwa:
Diuji menggunakan SBCL 1.2.11.debian
Ada banyak peringatan karena saya melakukan hal-hal yang secara serius tidak seharusnya dilakukan. Untungnya, semua peringatan dicetak dengan tanda titik koma, sehingga mereka tetap diperlakukan sebagai komentar.
Duplikasi adalah karena satu adalah nilai balik dan satu output aktual. Jika nilai kembali juga akan dihitung, maka menyederhanakan menjadi 58 byte:
#1=(SETF N(READ)(CADDR'#1#)(1- N)W(IF(= N 0)"Hello!"'#1#))
Saya masih tahu saya terlambat ke pesta
sumber
Python 2.7, 57
sumber
Haskell, 62
sumber
Bash, 47 atau 12 (jika saya menggunakan golfbash)
Kode:
kode golfbash:
Kode sebelumnya (49):
Menggunakan:
Buat program P
Contoh
Buat P1:
Buat P2:
Buat P3:
Buat P4:
Jalankan P4:
Katakanlah saya membuat bahasa tujuan umum baru yang disebut golfbash - sedikit mirip golfscript - yang memiliki beberapa perintah berguna seperti ini:
Maka saya bisa menulis ini:
Ini akan legal, bukan?
sumber
F #, 182
sumber
J - 31 char
Perlu diingat bahwa J menggunakan string gaya Pascal:
'It''s too easy!'
Dijelaskan:
".1!:1]1
- Baca dalam satu baris dari stdin dan ubah menjadi angka.<:2^
- Ambil 2 pangkat angka ini, dan pengurangan.''''#~
- Buat string dengan banyak salinan karakter kutipan tunggal.'Hello!'(],,)
- Tambahkan kutipan ini ke depan dan belakangHello!
.Pemakaian:
sumber
Python 2.7: 75
Pertama kali bermain golf, tidak yakin apakah saya melakukannya dengan benar;
sumber
h
juga dikenal dalam program-program berikutnya? (Sehingga ini harus dijalankan dalam REPL atau sesuatu?)Clojure, 36 byte
Simbol
mengevaluasi ke
Bangun simbol dengan 5 tanda kutip tunggal dan jalankan hasilnya sampai tidak ada tanda kutip.
sumber