Beberapa orang di sini mungkin adalah pembaca XKCD yang rajin. Jadi, saya pikir saya akan menantang kalian untuk melakukan sesuatu yang bisa dilakukan Megan dengan mudah: membuat skrip yang menghasilkan ribuan perumpamaan yang meyakinkan tentang apa yang tidak bisa dilakukan komputer.
Skrip Anda
- Dapat ditulis dalam bahasa apa pun
- Harus kode-golf
- Harus mengambil input (pada
stdin
atau setara dengan bahasa Anda) pada jumlah perumpamaan yang akan dimuntahkan (Anda dapat menganggap ini tidak akan melebihiMAX_INT
atau setara). - Akan menampilkan sejumlah perumpamaan yang dibuat secara acak .
Perumpamaannya adalah sebagai berikut
- Dimulai dengan
'Computers will never '
- Berikutnya, salah satu dari 16 kata kerja bahasa Inggris unik yang dapat Anda pilih secara bebas untuk mengoptimalkan program Anda, tetapi harus menyertakan
code-golf
danunderstand
. - Selanjutnya, salah satu dari 16 kata benda bahasa Inggris unik yang lagi-lagi, Anda dapat memilih dengan bebas untuk mengoptimalkan program Anda, tetapi harus menyertakan
a salad
danan octopus
. - Selanjutnya, salah satu dari 16 klausa bahasa Inggris unik yang dapat Anda pilih secara bebas untuk mengoptimalkan program Anda, tetapi harus menyertakan
for fun
danafter lunch
. - Berakhir dengan karakter baris baru (
\n
atau setara)
Jadi, misalnya, jika inputnya adalah 2
, output yang valid adalah
Computers will never code-golf a salad for lunch
Computers will never hug a tree in vain
Ukuran program dihitung dalam byte, bukan karakter (jadi tidak ada unicode omong kosong). Tidak ada celah standar .
Ini adalah tantangan pertama saya, jadi jika saya harus membuat beberapa perubahan yang jelas, mohon komentar.
Sunting: Saya berpikir untuk mengurangi ukuran kamus dari jumlah byte, untuk mendorong kamus 'kompresi'. Saya akan melihat dari jawaban di masa depan jika ini layak; jika ya, Anda dapat mengandalkan bonus.
Jawaban:
CJam,
238232 (atau 209) byteIni menggunakan banyak kata kerja / kata benda / klausa dari jawaban yang sudah diposting tetapi beberapa juga baru. Saya telah mengkonversi basis karakter untuk mencukur beberapa byte tambahan.
String yang dikonversi dasar dapat di-golf 24 byte lebih (untuk mendapatkan solusi 209 byte ; Perhatikan bahwa Anda harus mempertimbangkan jumlah karakter alih-alih jumlah byte karena semua karakter memiliki kode ASCII kurang dari 255 tetapi situs masih menganggap beberapa memiliki kode unik ) tetapi saya ingin string hanya terdiri dari karakter ASCII yang dapat dicetak.
Hanya untuk referensi, berikut adalah versi 209 byte:
Mengambil jumlah baris untuk dicetak dari STDIN seperti:
Keluaran:
Cobalah online di sini
sumber
Inilah pendekatan yang sedikit berbeda:
Python,
368 308297 byteEDIT, saya benar-benar bermain golf kali ini. Memotong 60 karakter.
Inilah trik golf yang paling saya banggakan:
Saya bahkan tidak tahu python bisa melakukan itu! Berikut penjelasan yang lebih sederhana:
menetapkan a dan b ke 0 dan 1, dan kemudian ke 1 dan 2, dan kemudian ke 2 dan 3.
Ini menggunakan linguistik perpustakaan NodeBox untuk menghasilkan daftar kata kerja / kata benda / klausa, dan kemudian secara acak memilih dari mereka.
Perpustakaan ini tidak terlalu bagus untuk menghasilkan kata-kata acak (karena itu 368 byte), tetapi hal yang menyenangkan tentang pendekatan ini adalah Anda mendapatkan beberapa perumpamaan meyakinkan yang cukup acak dengannya. Inilah yang saya maksud.
Tapi, hei, saya tidak berpikir program orang lain akan menghasilkan pepatah: "Komputer tidak akan pernah membedakan peternak hewan untuk kue abu."
Berikut adalah versi yang tidak dikoleksi (574 bytes):
Dan yang terakhir tapi pasti yang tidak kalah pentingnya, berikut adalah beberapa perumpamaan meyakinkan favorit saya, yang saya prediksi akan menjadi frase-catch catch yang sangat populer dalam 10-15 tahun ke depan.
dan favorit pribadi saya:
sumber
from random import choice as C
bisafrom random import*;C=choice
for i in ' '*(something)
sehingga Anda dapat dengan mudah menyimpan dua byte dari menghilangkan ruang di antarain
dan' '
JavaScript ES6, 331
336byteTampilkan cuplikan kode
Saya memilih kata-kata yang berfungsi sebagai kata kerja dan kata benda untuk mempersingkat daftar, tetapi beri tahu saya jika itu tidak diizinkan. Cobalah di atas menggunakan Cuplikan Stack (Kode di sana telah diformat untuk menggunakan ES5) atau di http://jsfiddle.net/5eq4knp3/2/ . Berikut adalah contoh output:
sumber
s
untuk melompat melewati bagian lain dari pidato dalam daftar. Kedua tilde itu BUKAN operator bitwise, dan mereka hanya berfungsi sebagai cara yang lebih pendek untuk dilakukanMath.floor()
.r=s=>12
sama denganfunction r(s){return 12}
, hanya lebih pendek. Lihat juga dokumen di MDN .~~
adalah semacam sepertiMath.floor
(tetapi berperilaku berbeda untuk angka negatif), dan=>
merupakan definisi fungsi gaya ES6 dengan batasthis
.Python -
390 385383Output contoh acak:
sumber
Perl - 366
Ini tesnya:
sumber
CJam,
353317301 byteSaya menggunakan daftar kata Falko, untuk keadilan, sehingga satu-satunya perbedaan dalam golf adalah karena bahasa dan bukan isinya (saya mungkin mengubah daftar kata jika orang-orang mulai bermain golf konten juga).
sumber
NetLogo, 396
Saya juga menggunakan daftar kata Falko, dengan dua pengecualian (yang tidak mengubah panjang program).
Bergantung pada bagaimana Anda mendefinisikan "program", Anda dapat menghapus lima pertama dan tiga karakter terakhir, sehingga skor 388.
sumber