Pernahkah Anda ingin bertanya kepada kompiler "Mengapa?" Sebagian besar dari kita merasa frustrasi ketika kode tidak berfungsi sebagaimana mestinya. Karena itu Mathworks menerapkan fungsi kecil yang menyenangkan why
,, yang menjawab pertanyaan. Untuk memberikan beberapa contoh dari MATLAB:
why
The programmer suggested it.
why
To fool the tall good and smart system manager.
why(2)
You insisted on it.
why(46)
Bill insisted on it.
Tugas Anda adalah mengimplementasikan why
fungsi dalam bahasa Anda. Fungsi harus bekerja dengan dan tanpa argumen input (sebagai alternatif, gunakan input 0
atau -1
). Fungsi harus dinamai why
(atau, menulis why(n)
dalam STDIN harus menghasilkan string yang sesuai untuk dicetak).
Jika tidak ada argumen yang diberikan, atau argumen itu nol atau negatif, string keluaran harus berupa frase acak dan valid. Jadi, harus ada fungsi why
, why()
, why(0)
atau why(-1)
yang kembali kalimat acak.
Jika argumen input, n
diberikan (argumen fungsi, bukan STDIN), output harus menjadi string ke-n (didefinisikan di bawah). Jadi, why(1)
harus selalu menampilkan (mencetak / menampilkan) hasil yang sama.
Kalimat-kalimat dibangun sebagai berikut (Tipe 1, Tipe 2 dan Khusus). Semua kalimat diakhiri dengan !
.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
Daftar orang:
Stewie
Peter
Homer
The programmer
The system manager
You
Daftar akhiran:
suggested it
insisted on it
did it
Daftar kata kerja adalah:
To fool
To satisfy
To please
Daftar kata sifat:
the smart
the bald
the tall
the rich
the stupid
Daftar kasus khusus:
How should I know?
Stop asking!
Don't ask!
Cara untuk memilih yang bernomor adalah:
Jenis kalimat:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Nama: Nama ke-n didefinisikan menggunakan modulus (%).
n = 1: 1 % 7 => Stewie
n = 2: 2 % 7 => Peter
...
n = 6: 6 % 7 => You
n = 7: 7 % 7 => How should I know?
n = 11: 11 % 7 => The programmer
n = 14: 14 % 7 => Stop asking!
n = 21: 21 % 7 => Don't ask!
Akhir: Akhir n juga didefinisikan menggunakan modulus. Asumsikan akhir (1, 2 dan 3) terdaftar seperti (1 2 2 3)
. Karena angkanya selalu aneh, gunakan((n+1)/2 % 4)
n = 1: ((1+1)/2 % 4) => suggested it
n = 3: ((3+1)/2 % 4) => insisted on it
n = 13: ((13+1)/2 % 4) => did it
Kata sifat: Kata sifat n didefinisikan dengan menggunakan modulus. Karena angkanya selalu genap, gunakan:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Kata kerja: Kata kerja n juga didefinisikan menggunakan modulus. Asumsikan kata kerja (1, 2 dan 3) terdaftar seperti (1 2 2 3)
Karena angkanya selalu genap untuk kata kerja, gunakan(n % 8) / 2
n = 2: (2 % 8)/2 => To fool
n = 4: (4 % 8)/2 => To satisfy
n = 6: (6 % 8)/2 => To satisfy
n = 8: (8 % 8)/2 => To please
Sekarang, cara membuat yang acak harus cukup sederhana, cukup pilih yang acak n
.
Beberapa contoh:
why
You suggested it!
why
To fool the tall Homer!
why
Don't ask!
why(1)
Stewie suggested it!
why(14)
Stop asking!
why(8)
To please the rich Stewie!
Aturan golf kode standar berlaku. Pemenang akan dipilih satu minggu dari hari tantangan diposting.
why
atauWHY
dapat diterima?/2
bekerja. Itu memberikan nilai fraksional.13
juga harusinsisted
(14/2 = 7% 4 = 3 = ke-2 dari yang bersikeras).the rich The programmer
yang ditentukanthe
?The
danTo
dalam daftar Anda mungkin harus huruf kecil agar sesuai dengan contoh Anda ...Jawaban:
JavaScript (ES6) 345
Tidak yakin tentang angka-angkanya, tapi ini usahaku.
Tes menjalankan cuplikan di bawah ini di peramban yang mendukung EcmaScript.
sumber
0
pembatas string Anda, bukan,
!split(0)
memiliki panjang yang samasplit','
(berpura-pura ini adalah backticks)C #, 502 byte
Proyek ini perlu memiliki AssemblyName diatur ke mengapa yang akan menghasilkan executable dengan nama yang benar.
Sepenuhnya golf:
Lekukan dan baris baru untuk kejelasan:
Contoh input / output:
sumber
Powershell
437461453 BytesSunting: Kehilangan duplikat kata kerja
Membagi antara corpus dan perhitungan untuk byte-count
to
,the
,it
dan!
tempat-tempat karena mereka telah tetap).Tetapkan argumen default ke 0 jika tidak ditentukan. Jika argumen
<1
maka mendapat nomor acak<99
fn:1
dan tayangan ulang. Secara teknis ini berarti-50
akan berfungsi juga, diperlakukan sebagai kasus acak.Penjelasan:
fn:1
99 Dipilih untuk menyimpan byte. Jika ada lebih dari 99 kemungkinan kalimat di atas (tidak dihitung) naik menjadi 999 atau 9999 sebagaimana berlaku (+1/2 byte)sumber
MUMPS, 379 byte
Ketika tidak ada input yang diberikan, angka acak dalam 0,839 dihasilkan.
Pemakaian:
Strategi evaluasi kiri-ke-kanan MUMPS menghemat beberapa byte pada tanda kurung di sini.
Catatan: lihat string-string yang terlihat seperti itu
"foo^bar^baz^qux"
? Itulah yang disebut "string dibatasi", dan merupakan cara standar menyimpan daftar yang sesuai dengan batas ukuran string maksimum, karena MUMPS sebenarnya tidak memiliki daftar / array (atau, memang, struktur data selain pohon). Untuk daftar yang terlalu besar untuk ditampung dalam satu string, kami menggunakan pohon dengan kedalaman 1 dan meletakkan nilai pada daun pohon. Menyenangkan!sumber
why
fungsi. ;)Emacs Lisp 473 Bytes
'Pemborosan' terbesar mungkin adalah
format
,%s
... bagian. Jika variabel bisa dimasukkan ke dalam string tanpa spesifikasi itu akan menghemat 10 byte%s
dan 12 lagiformat
sumber
Ruby
396378372 byteSaya yakin ini bukan golf maksimal.
Sunting: Saya baru menyadari bahwa saya tidak tahu prioritas operator. Baiklah..
sumber
CJam, 281 byte
Permalink
Belum pernah menggunakan CJam sebelumnya, jadi saya akan ambil kiat. Saya yakin ada banyak trik yang saya tidak tahu!
(Saya tidak tahu bagaimana menamai ini sebagai fungsi yang disebut "mengapa" - tampaknya fungsi tidak ada di CJam - jadi saya tidak yakin apakah jawaban CJam baik-baik saja atau tidak ...)
sumber
Lua 5.3.0,
452460446 byteIni adalah upaya pertama saya di kode golf, jadi tolong perbaiki saya jika saya melakukan sesuatu yang salah!
Tidak Disatukan:
sumber
Python (2), 692 byte
Saya masih belajar, jadi harap lembut! :)
Bekerja dengan atau tanpa int sebagai argumen baris perintah.
Saya mencoba untuk menekankan kebenaran kode sebanyak mungkin, seperti menghasilkan angka acak dari
-sys.maxint - 1
kesys.maxint
dan menampilkan kalimat dalam kasus yang tepat.Kode ini sangat bergantung pada pernyataan if yang saya yakin dapat diganti dengan sesuatu yang lebih efisien.
Umpan balik sangat diterima!
Tidak dikumpulkan (1341 bytes)
sumber
argument%8/2-1
dan hapus yang kedua. Anda juga bisa mengganti==0
dengan<1
.