Pangrams
Rubah cokelat cepat melompati anjing malas.
Ini adalah contoh pangram - kalimat yang berisi setiap huruf alfabet setidaknya sekali.
Sebuah pangram pencacahan sendiri adalah kalimat yang memenuhi kriteria untuk menjadi pangram dengan menghasilkan analisis jumlah suratnya sendiri.
Contoh untuk mencapai ini adalah kalimat
Pangram ini berisi empat As, satu B, dua Cs, satu D, tiga puluh Es, enam Fs, lima Gs, tujuh Hs, sebelas Is, satu J, satu K, dua Ls, dua Ms, delapan belas Ns, lima belas Os, dua Ps , satu Q, lima Rs, dua puluh tujuh Ss, delapan belas Ts, dua Us, tujuh Vs, delapan Ws, dua Xs, tiga Ys, & satu Z.
Tantangan
Menghasilkan fungsi dengan input berupa string yang mengarah ke inventaris surat. Dalam contoh tersebut, inputnya adalah "pangram ini berisi". Jumlah setiap huruf harus dalam bentuk tertulis dan berkontribusi pada jumlah surat yang ditampilkan.
Aturan
- Koma Oxford adalah opsional
- Gunakan ampersand sebelum Z (atau, untuk mode keras, termasuk kemampuan untuk beralih antara "&" dan "dan" dalam fungsi)
- Setiap huruf diperhitungkan terhadap jumlah total surat
- Tidak ada nomor yang tidak tertulis
- Ini adalah kode-golf sehingga kode terpendek dalam byte menang
- Dalam hono u r dari pasangan yang menikah akhir pekan ini, jumlahnya akan ditulis dalam Ratu Inggris. misalnya
nine hundred and ninety-nine Gs
untuk 999 kemunculan huruf G dannine hundred and nine Gs
untuk 909. - Urutan besarnya harus ditulis dalam konvensi penamaan skala pendek standar
Kasus tepi
- Ada beberapa kasus di mana kode akan macet dalam satu lingkaran - misalnya, jika ada dua O kode akan meningkatkan hitungan menjadi tiga O, yang menyebabkan kode untuk menghitung dua O lagi. Jika menghitung setiap huruf lain sebelum kembali ke masalah ini tidak dapat menyelesaikan masalah, pertimbangkan input sebagai starter dan output yang salah
false
,null
atau string kosong. - Jika sebuah surat memiliki lebih dari 999 kemunculan, input harus dianggap sebagai starter yang salah.
Uji Kasus
- "Pangram ini berisi" harus menampilkan contoh kalimat
sumber
o
-s tanpa kata untuk hitungan, maka ketika Anda mengeja dengantwo
, seluruh string sekarang memiliki tigao
-s, yang berarti kata itu sekarang salah, beralih membuatnya menjadi salah lagi , dll.Rob enjoys any sentence with two As, two Bs, two Cs, one D, thirty five Es, four Fs, three Gs, nine Hs, eight Is, two Js, one K, two Ls, one M, twenty two Ns, eighteen Os, one P, one Q, nine Rs, twenty three Ss, twenty three Ts, three Us, four Vs, eleven Ws, one X, seven Ys, & one Z.
Jawaban:
Python 2 , 615 byte
Cobalah online!
Fungsi ini
f
diambilp
sebagai awalan string; dan mengembalikan tupel bilangan bulat yang mewakili jumlah langkah yang diambil, dan autogram.Fungsi
g
menyandikan angka1<=n<=999
ke string bahasa Inggrisnya; membutuhkan 291 byte, kira-kira setengah dari total byte. Kodemengkodekan string
s
menjadi pangram (berpotensi autogram-matic)t
.Kami mengulang proses, berharap untuk situasi di mana kami menemukan
t
sedemikian rupa sehinggat
merupakan autogram (yaitu, di manat==s
).JikaKetika kita masuk ke loop, kita secara acak mendorong jumlah huruf dengan cara yang sepenuhnya ad hoc.Untuk sebagian besar nilai
p
, proses ini akan habis pada TIO. Biasanya, jutaan kemungkinan diperiksa sebelum menemukan kombinasi 'menang'.Saya tidak punya bukti sama sekali, tetapi dugaan saya adalah: (a) selain dari pencarian brute force yang lengkap mirip dengan apa yang digambarkan oleh pencetusnya Lee Sallows di sini dan diimplementasikan dalam perangkat keras (!), Heuristik acak ini kira-kira sama sebagus yang Anda bisa; dan (b) tidak akan ada solusi untuk banyak (sebagian?) frasa awal
p
.sumber
map(chr,range(65,91))
menghemat beberapa byte.