Tantangan ini diilhami oleh serangkaian buku anak-anak muda oleh Fiona Watt dan Rachel Wells, yang baru-baru ini saya nikmati bersama putri saya.
Dalam setiap buku mouse (diilustrasikan, tetapi bukan bagian dari teks) mengeluh bahwa suksesi 5 hal dari jenis yang sama bukan hal itu. Ini kemudian mendukung ini dengan menyatakan bahwa beberapa komponen benda tidak memiliki properti yang diharapkan.
Pada waktu bertanya yang keenam, tikus menemukan benda itu dan senang karena ia memiliki properti yang diharapkan.
Berikut ini adalah contoh teks yang khas:
That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.
Sekarang, kebanyakan orang pemrograman akan menyadari bahwa ini adalah metode yang sangat algoritmik untuk menghasilkan beberapa teks. Karena ini adalah proses yang sangat jelas, kita harus dapat mereproduksi ini dengan menulis beberapa kode.
Mari kita mulai dengan tiga kumpulan kata:
things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
"engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
"nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
"tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
"hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
"soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
- Pertama, kami memutuskan hal apa yang akan kami uraikan.
- Kemudian 5 kali, kita akan menghasilkan baris "Itu bukan [hal] saya, [bagian] nya juga [properti].
- Akhirnya, kami menghasilkan baris "Itu [benda] saya! [Bagian] nya begitu [properti]!
Tantangan
- Hasilkan teks cerita "Itu bukan ..."
- Itu tidak harus secara konsisten mereproduksi teks yang sama.
- Ini kode golf, jadi cobalah melakukannya dalam jumlah byte terkecil.
- Silakan gunakan bahasa apa saja.
- Ruang putih tidak masalah, tetapi harus ada karakter baris baru di antara garis.
- Daftar kata-kata sumber bukan bagian dari jawaban Anda (dalam TIO mereka dapat ditambahkan ke header).
- Anda dapat mengubah nama daftar kata sumber.
- Output dapat berupa output ke terminal atau teks yang dihasilkan menjadi objek.
- Harap sertakan tautan ke juru bahasa online.
- Abaikan bentuk jamak, "tanduknya adalah" baik-baik saja.
- Itu tidak perlu masuk akal. Jika corong puteri Anda terlalu halus, katakan saja.
Output sampel:
That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.
Selamat bermain golf!
Jawaban:
05AB1E , 63 byte
Cobalah online.
Versi 68 byte yang tidak menampilkan bagian atau properti yang digandakan:
Cobalah online.
Kedua program menganggap daftar hal adalah input pertama, dan daftar yang berisi daftar bagian dan daftar properti adalah input kedua.
Penjelasan:
Lihat tip tambang 05AB1E ini (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“
ini"that's my ÿ! its ÿ is so ÿ."
dan“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
itu"that's not my ÿ, its ÿ is too ÿ."
.sumber
Python 3 , 149 byte
Cobalah online!
-9 byte berkat movatica
sumber
Arang , 72 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengharapkan array hal, bagian, dan properti berada dalam variabel
θ
,η
danζ
, yang paling mudah diatur dengan menyediakannya dalam input daripada header. Penjelasan:Pilih hal yang acak.
Cetak lima kalimat negatif.
Cetak kalimat positifnya.
sumber
Japt v2.0a0
-R
, 73 byteMengambil tiga daftar sebagai
U
,V
, danW
. Itu adalah variabel input default, jadi cukup letakkan ketiga daftar di bagian input.Cobalah
sumber
PowerShell , 147 byte
Program utama ini tidak akan mengulangi bagian atau properti apa pun dalam proses, dan memiliki pengacakan yang masuk akal.
Cobalah online!
Menulis
get-random
berkali-kali membutuhkan banyak karakter! Namun, kecuali Anda mau membiarkan bagian dan properti diulang, saya tidak bisa melihat cara untuk mengecilkan ini di PowerShell lebih jauh. Kecuali Anda memindahkan 3 pipa baris pertama ke ujung 3 garis penugasan di header. Untuk memiliki sesuatu sepertiTapi sepertinya itu curang, dan masih belum mengalahkan jawaban Neil.
Sunting: Terima kasih atas tipnya Matt, dan terima kasih AdmBorkBork untuk menyempurnakannya, menghapus 3 set
get-
teks, menguranginya menjadi 159 byte, kemudian beberapa lagi golf dari Adm turun menjadi 147. Kode yang saya pikirkan memungkinkan duplikat dan pernyataan kontradiktif adalah 144 karakter setelah menerapkan kiat golf yang sama.Cobalah online!
Namun, tidak hanya memiliki kecenderungan untuk mengatakan hal yang sama beberapa kali, tetapi cukup banyak mengharuskan input Anda menjadi jumlah elemen yang sama. Saya percaya generator angka acak semu yang digunakan sangat tergantung pada jam, dan panggilan berulang yang cepat sering dapat menghasilkan hasil yang sama. Maka ia memiliki syarat bahwa ia hanya menggunakan seluruh daftar jika semua daftar memiliki panjang yang sama. Dengan hanya menyimpan 3 ~ 5 karakter dan memiliki begitu banyak peringatan, saya lebih suka kode pada awal posting ini.
sumber
Get-
dariGet-Random
. Ini kata kerja default yang diuji saat mengevaluasi perintah.Jelly , 72 byte
Cobalah online!
sumber
JavaScript, 129
input adalah tiga array, mengembalikan string
sumber
Ruby , 128 byte
Cobalah online!
sumber
C # ,
204203 byteIni adalah jawaban pertama saya di situs ini, jadi saya harap ini berfungsi dengan baik. Itu juga membutuhkan ketiga hal itu, tetapi menurut pertanyaan itu tidak masuk hitungan:
Cobalah online!
Satu byte lebih sedikit berkat Sok.
sumber
\r
tidak diperlukan, yang akan menghemat 2 byte.APL (Dyalog Unicode) , 117 byte SBCS
Cobalah online!
?N
menghasilkan indeks acak di antara indeks N pertama.M?N
menghasilkan indeks acak M (tanpa penggantian) di antara indeks N pertama.,
adalah gabungant←T⊃⍨
... mengambil sesuatu yang acak dan menyebutnyat
untuk digunakan kembali di baris terakhir.∘,¨
menyatukan string di sebelah kiri untuk setiap string di sebelah kanan.,¨
menyatukan setiap string di sebelah kiri ke setiap string di sebelah kanan.↑
mengubah daftar string menjadi matriks karakter sehingga tercetak dengan benar.sumber
Pyth ,
887876 byteCobalah online!
Kode yang disajikan di atas memerlukan tajuk berikut:
Ada masalah kecil dengan menggunakan fitur 'Header' di TIO dengan Pyth, karena sepertinya TIO bergabung dengan blok kode pada baris baru, dan baris baru signifikan di Pyth. Berikut ini tautannya ke kode yang sama menggunakan blok 'Header', dengan garis sampah di output.
Sunting: Tulis ulang ke golf 10 byte, versi sebelumnya:
J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH
sumber
Perl 5.10, 127 byte
Jalankan dengan
perl -M5.010 -f filename.pl
.sumber
JavaScript ES6, 149 (+15?) Byte
sumber
File Batch,
434424 + 7 byteDieksekusi melalui
cmd/q/c
.Kode tidak dihitung
Kode dihitung
Saya akan melewati beberapa tantangan yang harus Anda hadapi dan menjelaskan / membenarkan apa yang saya lakukan agar orang lain dapat meningkat.
Pilih elemen acak dari array yang
saya lakukan ini dengan menghasilkan angka acak antara
1
dan din
manan
jumlah elemen dalam array itu. Saya kemudian menggunakan nomor acak ini sebagai token untuk meraih di setiapfor
loop (tokens=%r%
). Karena saya melakukannya dengan cara ini, saya tidak bisa membuat sarang inifor
lagi, karenatokens=!r!
tidak berfungsi untuk saya (dengan ekspansi yang tertunda). Ini akan menyimpan beberapa byte karena akan menghapus kebutuhan untuk menyimpan token sebagai variabel (set x=%%x
).Pembuatan angka acak
m
adalah makro pembuatan angka acak saya. Melakukannya dengan cara ini menghemat 32 byte daripada melakukannya sepertiset/ar=%random%%%n+1
setiap baris. Anda bisa semi-cheat dan memutuskan token ituy
danz
harus menjadi elemen yang sama:Ini akan, sementara masih mempertahankan beberapa keacakan, mengecualikan 6 elemen terakhir dari
c
. Ini akan menghemat minimal 20 byte, tetapi saya tidak berpikir ini benar untuk persyaratan op.Perbaikan Teoritis
Saya menghabiskan cukup banyak waktu untuk mencoba membuat "pseudo-code" ini bekerja, sambil tetap menghemat byte:
Sayangnya setup untuk ini terbukti mengambil terlalu banyak byte untuk dapat diuntungkan (harus diimplementasikan dalam <144 bytes) tetapi saya tidak dapat menghilangkan perasaan bahwa menambahkan 4 baris terakhir dari kode adalah berlebihan dan janky.
sumber
The lists of source words are not part of your answer (in TIO they can be added to the header).
set a=%~1
, dll.tinta , 119 byte
Dengan daftar yang didefinisikan sebagai
Cobalah online!
Meskipun tergantung pada apa yang dianggap sebagai daftar, ada pendekatan lain. Jika daftar bisa menjadi fungsi yang secara acak mengembalikan item daftar, pendekatan berikut ini hanya 91 byte:
(dengan "daftar" didefinisikan sebagai berikut)
Cobalah online!
Ada juga pendekatan berikut.
Cobalah online!
Solusi ini adalah 389 byte, tetapi jika shuffle literals (yang dalam skenario ini tidak dapat dipindahkan) dihitung sebagai definisi daftar dan dapat dikecualikan dari jumlah byte, ini turun menjadi 80 byte.
sumber
Bash + awk, 209 byte
Cobalah online!
Menerima input sebagai
things parts properties
setiap file dengan satu item per baris dari tipe yang diinginkan.Ini adalah pendekatan yang berpusat pada file. Dapat mencoba pendekatan yang berpusat pada array nanti untuk melihat apakah itu dapat ditingkatkan.
sumber
Python 3, 130 byte
Mengambil persyaratan Anda secara harfiah, dan mengambil carriage return menjadi masing-masing satu byte:
sumber