Dasar:
Anda harus memberikan permainan tebak kata sembilan tingkat dengan karakter sesedikit mungkin (dalam bahasa pilihan Anda).
Metrik:
- Berikan daftar kata (satu kata per baris, dipisahkan oleh baris baru) (mis.
/usr/share/dict/words
Bisa dilakukan) Tidak masalah untuk mem-pipe nama file atau daftar kata itu sendiri ke dalam solusi Anda. - Berikan 9 level dengan penambahan panjang kata (kata dengan 4 karakter
->
12 karakter):
Level 1: kata acak dari daftar kata yang berisi 4 karakter Level 2: kata acak dari daftar kata yang berisi 5 karakter ... ... Level 8: kata acak dari daftar kata yang berisi 11 karakter Level 9: kata acak dari daftar kata yang berisi 12 karakter
- Di setiap level, hapus kata yang dipilih secara acak dari daftar (dengan panjang kata tertentu saja) dan ganti sejumlah karakter dengan asterisk (
*
). The jumlah karakter untuk menggantikan:current_word_length / 3
(putaran bawah). Acak karakter mana yang akan diganti. - Biarkan pemain 'menebak' kata (hanya satu
try
per level), memberikan umpan balik (correct
atauwrong
) dan memberikan poin yang sesuai. Ketika benar, pemain mendapatkannumber_of_obfuscated_characters * 10 points
. - Cetak skor saat ini di akhir setiap level.
Format (& sampel I / O):
Pastikan Anda mengikuti skema pemformatan berikut:
Level 1 # level header ======= # g * ek # kata dikaburkan masukan pengguna geek # validasi # tebakan yang benar skor: skor cetak 10 # # Level 2 ======= l * nux linux benar skor: 20 Tingkat 3 ======= berlari ** m acak benar skor: 40 ... Level 9 ======= sem *** bertindak * ve semiinaktif salah skor: 90
Pemenang:
Solusi terpendek (berdasarkan jumlah karakter kode). Bersenang-senang bermain golf!
sem***act*ve
==>semelfactive
Jawaban:
Perl, 180 karakter
Ruby mengalahkan Perl? Itu tidak bisa! :-)
Seperti solusi Ruby jsvnm, tetapi tidak seperti kode Perl Joel Berger, skrip ini menggunakan nama file dari daftar kata sebagai parameter baris perintah. Artinya, Anda harus menjalankannya seperti ini:
Ini versi de-golf:
Pernyataan itu
vec($_, rand $n, 8) = 42 while ($= = $n/3) > y/*//
berisi beberapa trik menarik. Pertama, 42 adalah kode ASCII dari tanda bintang; ternyata menggunakanvec
untuk memodifikasi karakter tunggal dalam string lebih pendek daripada melakukannya dengansubstr
. Kedua, variabel$=
hanya mengambil nilai integer, jadi menggunakannya untuk menyimpan jumlah huruf tersembunyi menghemat sayaint
. Akhirnya,y/*//
adalah cara singkat untuk menghitung jumlah tanda bintang dalam string menggunakan operator transliterasi.Sunting: Disimpan 7 karakter dengan menggunakan
$@
untuk menyimpan skor dibagi 10 dan menambahkan nol untuk itu selama output (yang, kalau dipikir-pikir, akan lebih pendek dari versi sebelumnya bahkan jika saya menggunakan variabel normal) .Sunting 2: Menghidupkan baris baru literal dalam string keluaran menghemat lebih dari kekacauan
$,
.sumber
Ruby (188)
mengambil nama file untuk membaca kata dari sebagai argumen.
sumber
Bash, 350 karakter
sumber
Perl: 266
atau dengan sedikit lebih banyak ruang putih
dan saya pikir dengan sedikit kerja itu bisa menjadi lebih baik!
sumber
R, 363 karakter
sumber
Python 335
Saya tahu saya agak terlambat ke pesta, tetapi python tidak diwakili, jadi saya pikir apa-apaan:
Dan semi-tak berkhasiat:
sumber
K, 198
Mengasumsikan kamus d di direktori kerja saat ini.
Tidak Disatukan:
sumber