Pilih kutipan atau frasa yang panjangnya tepat 5 kata, seperti Programming puzzles and code golf!
.
Tulis sebuah program yang, ketika ditambahkan sendiri sebanyak n kali, menghasilkan kata pertama n + 1 dari frasa Anda.
Misalnya, jika kode program MYPROG
Anda dan frasa Anda Programming puzzles and code golf!
, jalankan ...
MYPROG
harus keluarProgramming
MYPROGMYPROG
harus keluarProgramming puzzles
MYPROGMYPROGMYPROG
harus keluarProgramming puzzles and
MYPROGMYPROGMYPROGMYPROG
harus keluarProgramming puzzles and code
MYPROGMYPROGMYPROGMYPROGMYPROG
harus keluarProgramming puzzles and code golf!
Menambahkan lebih dari 4 kali tidak ditentukan, program Anda dapat melakukan apa saja.
Aturan
- Frasa Anda haruslah tata bahasa Inggris yang bermakna secara tata bahasa. Idealnya itu harus ditulis dengan huruf kapital dan diselingi dengan benar.
- Frasa Anda mungkin panjang tetapi entropinya, yang dihitung oleh http://www.shannonentropy.netmark.pl/ , mungkin tidak kurang dari 3,5 .
(Tempel di frasa Anda, tekan Hitung dan cari H terakhir (X) .) - Frasa Anda hanya dapat berisi karakter ASCII yang dapat dicetak (hex 20 hingga 7E). Kode Anda hanya dapat berisi ASCII yang dapat dicetak dan tab serta baris baru.
- Frasa Anda harus mengandung tepat 5 kata unik dan 4 spasi. Semua non-spasi dihitung sebagai bagian dari kata-kata. Spasi adalah kata batas. Mereka mungkin tidak memimpin atau mengikuti; harus ada satu selain semua kata terakhir.
- Outputnya juga harus mengandung satu ruang antar kata. Output pada setiap langkah penambahan mungkin berisi spasi tambahan tetapi tidak mengarah spasi.
- Output ke stdout. Tidak ada input.
Mencetak gol
Skor Anda adalah panjang dalam byte dari program awal yang tidak ditambahkan. (mis. MYPROG
skor 6)
Karena ini adalah kode-golf, skor terendah akan menang.
code-golf
source-layout
Hobi Calvin
sumber
sumber
Jawaban:
CJam - 24
Cobalah di http://cjam.aditsu.net/
Penjelasan:
Lm
menghapus huruf yang terkandung dalam L (awalnya "") dari "TheguywasnotI"3<
mengambil 3 huruf pertama]
mengumpulkan isi stack dalam arrayS*
bergabung dengan array menggunakan ruang sebagai pemisah:L
menetapkan string yang dihasilkan ke L (juga meninggalkannya di stack )Versi lama (28 byte):
Penjelasan:
S/
dipisah denganW):W
penambahan spasi W (awalnya W = -1)=
dapatkan kata W'th]
mengumpulkan isi stack dalam array yangS*
bergabung dengan array menggunakan spasi sebagai pemisahsumber
Piet (jawaban kehormatan)
Ular jalannya ke bawah, kehabisan tepat melalui biru dan masuk kembali melalui hijau. Mencetak "Buah lalat seperti pisang."
Saya menggunakan PietCreator untuk membuat ini, tetapi Anda dapat mencobanya di sini . Membuat ulang program Piet sangat menyebalkan, jadi saya mulai dengan kecepatan 35x35 dan melanjutkannya, artinya saya menggunakan lebih banyak kode daripada yang saya butuhkan.
Versi ukuran sebenarnya
sumber
> <> (42)
Ikan benar-benar hewan peliharaan terbesar. Beberapa orang menyimpan bug sebagai hewan peliharaan karena kurangnya logika yang tidak bisa dipahami. Program ini melakukan yang terbaik untuk alasan dengan orang-orang seperti itu.
Perhatikan bahwa ini bukan baris baru di program. Output penuh dibalik di baris pertama; frasa lengkapnya adalah "Apa yang bisa dilakukan bug?" (entropi 3.58418).
Penjelasan lengkap:
Ini adalah salah satu program yang lebih menyenangkan> <> yang saya tulis, karena ini adalah yang pertama yang menggunakan refleksi. Baris pertama adalah tempat daging program.
!v
adalah no-op, karena!
menyebabkan instruksi selanjutnya dilewati.'?od gub yna nac tahW;'
menyimpan frasa lengkap pada tumpukan (mundur karena setiap huruf didorong ke tumpukan dalam urutan yang ditulis, sehingga harus dibalik agar dapat dibuka dengan baik).00p
Di sinilah keajaiban yang sebenarnya mulai terjadi. Perhatikan bahwa itu tidak hanya menyimpan frasa, tetapi juga menyimpan a;
.00p
memasukkan karakter teratas ke stack ke dalam program pada posisi (0, 0), jadi sekarang karakter pertama dari program adalah a;
.Akhir
!
melompati titik koma itu, dan memindahkan kursor ke atasv
, yang mengarahkan program mengalir ke bawah.Mulai sekarang, semuanya hanya rutinitas pencetakan. Karena tidak ada baris baru, penambahan berturut-turut dari program ini cukup tambahkan dua baris terakhir, karena baris pertama adalah di sebelah kanan
voo <
, dan dengan demikian tidak akan pernah dieksekusi.Pada akhirnya, kursor diarahkan keluar kiri bawah program, dan membungkus kembali ke kiri atas, di mana
;
itu dimasukkan sebelumnya, mengakhiri program.sumber
"It is by a rope."
frasa Anda mengulangi karakter, sehingga memiliki entropi yang lebih rendah daripada yang bisa.Python 66
Entropi: 3,61635
Ouput:
Terima kasih @JasonS dan @grc untuk tips tentang memperpendek bagian deteksi variabel.
Pembaruan: Lihat jawaban JasonS untuk trik sampul jahat yang mendorongnya hingga 55 byte. :)
sumber
i=locals().get('i',-1)+1;
is -5 bytesi='i'in dir()and i+1
. Edit: aturan berubah.i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
Python 3, 55 (bonus 67)
Maksudmu membungkus?
OK, beberapa penjelasan tentang # 2 (spoiler)
credits
adalah python builtin yang berisi teks yang ingin saya gunakan. Ini adalah tipe khusus dengan diformatrepr
sehingga Anda bisa mengetikkannya di interpreter interaktif dan melihat output yang bagus, jadi saya harus melakukannyastr()
. Saya menghabiskan sedikit waktu mencari builtin untuk ini, dan "Terima kasih telah mendukung pengembangan Python" karena frasa terlalu bagus untuk dilewatkan.Karena ada banyak teks dan saya hanya ingin 5 kata, saya ingin menyimpan posisi awal dan akhir dari masing-masing substring. Itu dalam byte di awal.
bytes
objek dalam python3 bertindak seperti array bilangan bulat ketika Anda menggunakan operasi urutan pada mereka.Tetapi kode hanya dapat berisi karakter yang dapat dicetak, jadi saya harus menemukan offset (49) yang akan membuat semua nilai posisi saya dicetak sebagai karakter.
"Terima kasih" ada di dekat bagian awal string sementara kata-kata lainnya mendekati akhir, yang berarti nilai posisi saya terlalu jauh untuk semua berada dalam kisaran yang dapat dicetak. Mulitplying string oleh 2 membuat salinan lain "Terima kasih" yang lebih dekat dengan kata-kata lain.
Mengambil
[49:]
irisan string adalah satu byte sumber yang lebih sedikit daripada menambahkan 49 ke a dan b.Konstruk yang digunakan dalam ketiga jawaban adalah
x=<value>;dostuff and increment;x
. Trailingx
tidak melakukan apa-apa sama sekali, tetapi ketika dikombinasikan dengan salinan kode selanjutnya berubah menjadixx=<value>
yang mencegahx
konter ditimpa.a,b,*q=q
adalah urutan normal Python 3 membongkar.sumber
Python 2 (37)
Setelah Sarah menjadi presiden cabang Mensa setempat, ia menjadi fokus perhatian romantis dari pria yang mencari pasangan yang cerdas. Pada setiap kencan, Sarah akan mencoba membuat hubungan pribadi, tetapi para pria hanya akan menyelidikinya pada pertanyaan-pertanyaan filosofis yang musykil. Frustrasi bahwa tidak ada yang peduli dengan sisi emosinya, dia berseru ...
Keluaran:
Entropinya
H(x)=3.5
persis.Penghargaan untuk Jason S., yang jawabannya pada dasarnya saya gunakan grosir. The
ii
trick sampul indah.sumber
print
spasi daripada menambahkannyaC - 65
Komentar penyalahgunaan :)
Karena itu, baris baru menjadi penting dan kode harus ditambahkan sebagai berikut:
sumber
CJam, 24 byte
Jika dijalankan lima kali, itu mencetak Liz OK untuk saya . Tanda baca tidak termasuk, maaf.
Bagaimana itu bekerja
sumber
Pyth , 32
Frase: "Itu dengan seutas tali."
Entropi: 3,5
Bagaimana itu bekerja:
p
berarti mencetak dengan pemisah yang ditentukan.Argumen pertama
?kqZ4d
,, memberikan pemisah.?kqZ4d
berartik if Z==4 else d
.k
adalah''
, sementarad
ini' '
.Argumen kedua, nilai yang akan dicetak, dihasilkan oleh pemisahan (
P
) pada spasi (d
), dan pengindeksan ke dalam daftar itu (@
) diZ
.Akhirnya,,
Z
yang secara otomatis diinisialisasi ke 0, bertambah 1 (~Z1
).sumber
Naskah Golf, 53
Yang ini menyenangkan.
Frase: "Kamu bukan bebek." (yang sepenuhnya benar; entropi 3.5110854081804286)
Penjelasan:
Tumpukan akan mulai seperti
''
pada "jalankan" pertama (karena tidak ada STDIN yang disediakan).'1'
s ditambahkan ke ini untuk menunjukkan berapa kali kode telah ditempelkan.Sekarang apa yang terjadi pada putaran kedua:
Dan seterusnya.
"Tapi," Anda berpikir, "bagaimana Anda membuat 1 untuk tidak menghasilkan?" Ah, itu bagian yang menyenangkan. Implementasi Golfscript
puts
(yang dipanggil saat program berakhir) seperti ini:Saya hanya mengubahnya menjadi
Sehingga
1
s ditekan dari output akhir.sumber
J - 42 char
Saya bisa menggunakan frasa yang lebih pendek, tetapi mengapa? Itu tidak akan menjadi favorit saya.
Ini bekerja karena dualisme J monad / angka dua: setiap kata kerja dapat dipanggil sebagai monad — dengan satu argumen di sebelah kanannya — atau sebagai angka dua — dengan argumen di sebelah kiri dan yang lain di sebelah kanan.
Pertimbangkan sesi berikut dengan J REPL:
Di sana,
,
diperlakukan sebagai angka dua, karena ada di antara dua argumen, dan(#~1=6|#\)&.;:
merupakan satu angka karena tidak memiliki argumen kiri. Jadi, jika kita memiliki kata kerja yang bisa bertindak seperti,
ketika diad dan(#~1=6|#\)&.;:
saat monadik, kita akan ditetapkan.Seperti yang mungkin sudah Anda duga, konjungsi semacam itu ada dan sepertinya
:
. Monadikf :g
sama denganf
, dan itu sama dengang
saat diad. Ini menyelesaikan masalah.Contoh, yang dapat Anda coba sendiri di tryj.tk :
Dan ya, sifat kebalikannya
;:
membuatnya sehingga tidak ada spasi tambahan.Menggunakan
It is by a rope.
sebagai ungkapan memberikan 35 arang:(#~1=6|#\)&.;: :,'It is by a rope.'
. Kami tidak membutuhkan ruang tambahan seperti yang kami lakukan untuk kalimat saya, karena;:
alasan-alasan misterius .sumber
BBC Basic, 40
Termasuk satu baris baru. Akan menjadi 30 jika kata kunci dapat dianggap sebagai token bukannya ASCII.
Saya menangkap pacar saya tidur dengan tukang susu, jadi saya mencampakkannya dan saya tidur dengan saudara perempuannya untuk membalas dendam.
As my ex do I!
(lima "huruf" dua huruf dengan karakter unik) tidak cukup entropi, jadi saya menambahkan smile-out smiley di akhir untuk membuat entropi tepat 3,5. Lagi pula, dalam kenyataannya saya memiliki kehidupan yang cukup normal, bukan plot opera sabun yang aneh.Mengulangi program 5 kali kita dapatkan
Hanya 5
READ
pernyataan yang dieksekusi, dan 5 item data pertama dibaca dariDATA
pernyataan pertama . sisa data bersifat mubazir. Keluaran:sumber
Ruby, 50
Ini menggunakan panjangnya sendiri untuk menentukan berapa banyak kata yang akan dicetak. Pengulangannya diabaikan dengan mengakhiri karakter komentar
#
,. Frasa yang dipinjam dari bitpwner : sangat mudah memiliki frasa pendek dengan jumlah huruf yang sama di setiap kata.Karena setiap kata + akhir adalah 4 karakter, rumusnya adalah, misalnya untuk program dengan panjang 56:,
(File.size($0)/56)*4 - 1
tetapi saya dapat membagi sebelumnya56/4 = 14
, sehinggaFile.size($0)/14 - 1
menghemat beberapa karakter.50
bukan kelipatan4
, tetapi12
cukup dekat untuk rentang yang dibutuhkan.sumber
Chip , 165 + 3 = 168 byte
+3 untuk bendera
-w
"Aku memenangkan jas merah" (3.5) (Aku sebenarnya belum memenangkan hal semacam itu) (... belum)
Perhatikan baris baru yang tertinggal, sehingga salinan gabungan muncul di bawah kode yang ada.
Cobalah online! (asli)
Cobalah online! (asli, ditambah keempat salinan)
Ini sedikit berantakan. Ternyata yang paling sulit adalah kondisi terminasi. (Iterasi pertama saya mencetak kata, diikuti oleh aliran byte nol tanpa akhir ...).
Bagaimana itu bekerja
Pertama frase:
12 karakter unik + 4 spasi = tepat 3,5 entropi.
Dan kodenya:
Setiap salinan mencetak kata pertama, kemudian memberi tahu salinan di bawah ini untuk mencetak kata berikutnya. Jika hanya ada satu contoh, tidak ada salinan kedua, jadi tidak ada apa-apa selain kata pertama yang dicetak.
Jika ada dua salinan, keduanya akan mencetak kata pertama secara bersamaan (byte ATAU bersama-sama jadi baik-baik saja), maka hanya salinan kedua yang akan mencetak kata kedua.
Jika kelima salinan ada, semua akan mencetak kata pertama, dll, dll, dan salinan kelima akan mencetak kata terakhir dengan sendirinya.
Sirkuit penghentian akan menghentikan program segera setelah semua salinan tidak secara aktif mencetak.
sumber
Ruby, 63
sumber
Perl, 37
Mirip dengan apa yang dimiliki, tetapi mengambil keuntungan dari qw perl untuk menyimpan beberapa karakter.
sumber
Panjang pesan rebmu + 27
Apakah kita harus pergi dengan "IQ saya bukan saya!" itu akan menjadi 43. Tapi saya mendukung pesan ini:
Rebol Setara / Merah:
Rebol memiliki 3 persyaratan dasar: JIKA, BAIK, dan KECUALI. KECUALI setara dengan JIKA TIDAK tetapi bisa lebih jelas: "Selalu lakukan KECUALI berikut kondisi ini kebetulan benar."
Dalam hal ini syaratnya adalah kita menguji untuk melihat apakah simbol S telah diberi nilai dalam konteks saat ini. Kita harus menggunakan kutipan di atasnya, karena mencoba menggunakan S yang tidak dikutip dalam ekspresi bersyarat akan mengevaluasinya dan mungkin menimbulkan kesalahan. (
value?
tidak mengutip parameternya secara default karena Anda mungkin ingin memiliki simbol yang Anda periksa berada dalam variabel, misalnyasym: 's
kemudianif value? sym [...]
akan benar-benar memeriksa apakah S didefinisikan, bukan SYM)Hanya pasta pertama dari program yang akan menetapkan serangkaian string ke S. Pasta yang berurutan akan mengambil string dari kepala seri dan meneruskannya ke PRINT / ONLY yang akan mencetak argumennya tanpa menambahkan umpan baris.
(Catatan: CETAK / HANYA adalah cara penggantian yang disarankan untuk mengatakan PRIN, yang sedang dipertimbangkan dalam Rebol 3 dan Merah; penggantian cetak sekarang sedang diuji di Rebmu.)
sumber
AHK , 44 byte
Perhatikan baris baru di bagian akhir. Satu-satunya hal yang cerdas di sini adalah bahwa string adalah semua kata 3-huruf sehingga kita tidak perlu membagi apa pun. Sebagai gantinya, kami hanya menarik substring berdasarkan
i
. Output ke layar aktif seolah-olah itu diketik pada keyboard.sumber
Javascript (53)
Saya mengambil teks dari aditsu karena saya tidak melakukan apa-apa dengan teks, sehingga kata-kata yang dipilih agak tidak relevan untuk solusi (kecuali untuk jumlah byte).
Apakah termasuk
alert
dalam kasus ini? Sunting: Membaca aturan itu mungkin tidak karena saya tidak bergabung dengan string dengan spasi. Saya akan menambahkan spasi untuk membuatnya adil.Perhatikan juga bahwa yang mahal
var
sebenarnya relevan dalam kasus ini.sumber
var i|=0;
TIDAK bekerja di sini ???|=
atau serupa denganvar
. Tanpavar
, Anda mendapatkanReferenceError: i is not defined
.var i=i|0
meluas kevar i=undefined|0
, danundefined|0
tampaknya0
.var i=i|0
setara denganvar i;i=i|0
. Itu sebabnya Anda tidak mendapatkan kesalahan referensi. Alasannya akan diatur ke 0 pertama kali adalah apa yang dikatakan @ nyuszika7h.Perl, 43
56Saya menerima bahwa saya tidak dapat memenangkan yang ini. Upaya awal saya menjelaskan mengapa:
sumber
Lua, 77
Solusi yang cukup sederhana:
(H (X) = 4.23)
sumber
Javascript, 138
(baris tambahan baru ditambahkan hanya untuk dibaca)
Cetakan
I'll sleep when I'm dead
. Menggunakan timer untuk memastikan output hanya dicetak sekalisumber
Bash Murni, 51 byte
H (X) = 3.59447
Ini bisa diturunkan sedikit lebih banyak dengan memburu salah satu frasa yang lebih pendek, tapi saya senang tetap menggunakan kutipan paling terkenal dari Lennon dari
Descartes. (Maaf @ Bagan, tetapi semua kata harus unik).Keluaran:
Berhati-hati menyisipkan spasi di antara kata-kata, tetapi tidak ada spasi awal atau akhir.
Bergantung pada fakta bahwa dalam bash, variabel yang tidak terdefinisi, ketika diperluas sebagai string memiliki nilai "", tetapi ketika diperluas secara aritmetika memiliki nilai 0.
sumber
!
sekarang - tampaknya melakukan trik.PHP
8978 charIni sedikit bertele-tele, dan pasti tidak akan menang, tapi itu tetap menyenangkan. Inilah yang saya pikirkan
Frasa:
code golf is pretty fun
Entropi = 3,82791
Kode:
Golf:
sumber
Python3 - 122 byte
Buka pintu ruang pod [HAL]
Saya kira saya akan mendapatkan kredit kutu buku dengan yang ini. Andai saja pertanyaan itu memungkinkan satu kata lagi ...
Apa yang program saya lakukan adalah mengambil nama file (p.py adalah basis) dan memeriksa berapa kali nama dasar diulang. Kemudian mengambil irisan dari string
n
kali.n
menjadi jumlahp
s dalam nama file.Manfaat dari regex adalah bahwa program dapat dipanggil apa pun yang Anda suka dan masih akan berfungsi (asalkan Anda mengubah nama dasar dalam kode): program asli saya disebut golfed.py.
sumber
05AB1E , 21 byte (Tidak bersaing)
Cobalah online!
Penggunaan:
Penjelasan
sumber
“€í€Ü€…‚¿‹·“
heheStax , 24
Jalankan dan debug itu
Kutipan: Beberapa hewan lebih setara.
sumber
SmileBASIC, 54 byte
Saya lebih suka "Pasir bisa dimakan." tapi itu gagal dalam tes entropi. Tentu saja saya bisa memilih frasa yang lebih pendek tapi itu membosankan.
Kata
READ
kunci membaca nilai dariDATA
dan menyimpannya dalam variabel. MenggunakanREAD
lagi akan mendapatkan item berikutnya, dan seterusnya.sumber
Pyth , 27 byte
Sekali , dua kali , tiga kali , empat kali , dan lima kali . Menambahkan setelah ini mulai mengulangi frasa.
sumber