Forum terbesar di web, disebut postcount ++ memutuskan untuk membuat game forum baru. Dalam permainan ini, tujuannya adalah memposting kata, tetapi kata tersebut harus memiliki satu huruf yang ditambahkan, dihapus, atau diubah. Bos Anda ingin Anda menulis sebuah program yang mendapatkan kata, dan kamus UNIX, saat Anda bekerja untuk perusahaan yang memiliki forum yang lebih cerdas dengan lebih banyak permainan forum yang cerdas, dan ingin menghancurkan persaingan (hei, itu bos Anda, jangan diskusikan dengan dia, Anda mendapatkan banyak uang dari pekerjaan Anda).
Program Anda akan mendapatkan dua argumen, kata, dan kamus. Karena pengguna yang mengelola program (ya, pengguna, perusahaan Anda tidak memiliki sumber daya untuk menjalankan bot) tidak sempurna, Anda harus menormalkan kasus di keduanya. Kata-kata dalam kamus mungkin memiliki huruf ASCII (baik huruf besar dan kecil, tetapi harus diabaikan selama perbandingan), tanda hubung, apostrof, dan spasi non-berturut-turut di tengah. Tidak lebih dari 78 karakter. Anda harus menampilkan daftar kata-kata yang akan diterima dalam permainan, untuk menghentikan kesenangan orang-orang yang memikirkan kata-kata secara manual.
Ini adalah contoh dari program yang Anda harapkan, memeriksa kata-kata yang mirip dengan golf
.
> ./similar golf /usr/share/dict/words
Goff
Wolf
gold
golfs
goof
gulf
wolf
Ini /usr/share/dict/words
adalah daftar kata-kata, dengan jeda setelah masing-masing. Anda dapat dengan mudah membacanya dengan fgets (), misalnya.
Perusahaan tempat Anda bekerja tidak memiliki banyak kartu punch (ya, ini 2014, dan mereka masih menggunakan kartu punch), jadi jangan sia-siakan. Tulis program sesingkat mungkin. Oh, dan Anda diminta untuk tidak menggunakan implementasi internal atau jarak jauh Levenshtein atau algoritma serupa lainnya. Sesuatu tentang Tidak Diciptakan Di Sini atau di luar rumah yang tampaknya dimasukkan oleh vendor ke dalam bahasa (Anda tidak memiliki bukti tentang itu, tetapi jangan berdiskusi dengan bos Anda). Jadi, jika Anda ingin jarak, Anda harus menerapkannya sendiri.
Anda bebas menggunakan bahasa apa pun. Bahkan dengan kartu punch, perusahaan memiliki akses ke sebagian besar bahasa pemrograman modern, seperti Cobol Ruby atau Haskell atau apa pun yang Anda inginkan. Mereka bahkan memiliki GolfScript, jika Anda pikir itu bagus untuk manipulasi string (saya tidak tahu, mungkin ...).
Pemenang mendapat 15 poin reputasi dari saya, dan mungkin banyak poin lain dari komunitas. Jawaban bagus lainnya akan mendapat 10 poin, dan poin dari komunitas juga. Anda mendengar bahwa poin tidak ada nilainya, tetapi kemungkinan besar mereka akan mengganti dolar pada tahun 2050. Namun itu tidak dikonfirmasi, tapi tetap saja ide yang bagus untuk mendapatkan poin.
Jawaban:
GolfScript, 59 karakter
Tentu, GolfScript luar biasa untuk manipulasi string!
Apa GolfScript tidak begitu pandai menangani file I / O atau argumen baris perintah. Dengan demikian, program ini mengharapkan untuk menerima semua inputnya melalui stdin: baris pertama yang tidak kosong dianggap sebagai kata target, sedangkan baris yang tersisa harus berisi kamus. Pada sistem Unixish, Anda dapat menjalankan kode ini misalnya dengan:
Pada kotak Ubuntu Linux saya, output dari perintah di atas adalah:
Perhatikan bahwa semua kata dikonversi menjadi huruf kecil, dan duplikat apa pun dihilangkan; dengan demikian, tidak seperti output sampel Anda, milik saya tidak mencantumkan
Wolf
danwolf
secara terpisah. Berdasarkan deskripsi tantangan Anda, saya menganggap ini dapat diterima.Selain itu, kodenya sangat lambat, karena menggunakan pendekatan yang cukup kasar, dan bahkan tidak menggunakan optimasi yang jelas seperti memeriksa apakah panjang kata kandidat cocok dengan kata target ± 1. Namun, kode ini berhasil melalui daftar lengkap, tanpa filter
/usr/share/dict/words
di ... um ... Saya akan memberi tahu Anda ketika selesai, OK?Sunting: Oke, butuh sekitar 25 menit, tapi itu selesai.
sumber
Bash + coreutils, 99 byte
Entah saya benar-benar salah paham pertanyaannya ( jawaban @ lambruscoAcido memberikan hasil yang sangat berbeda ), atau ini adalah aplikasi regexp yang cukup mudah:
Keluaran:
sumber
${a:b:c}
harus dilakukan?b
kec
dalam variabela
c
mulai dari posisib
(berbasis-nol) dari variabela
. Ekspansi substring adalah salah satu ekspansi parameter bashPython 3, 291 karakter
Sangat mudah, dan karenanya tidak terlalu pintar. Tetapi dengan kusut generator yummy besar dan lambatnya dioptimalkan. Karena Anda tidak ingin membiarkan waktu perhitungan yang dialokasikan tidak digunakan, bukan?
sumber
l=len
danr=range
mengurangi fungsi-fungsi tersebut lebih lanjut.Scala -
403130[Diperbarui]: sepenuhnya diperbarui karena solusi sebelumnya juga memungkinkan untuk surat yang diijinkan. Tidak menggunakan regex atau alat bawaan.
Tidak Disatukan:
Pemakaian:
sumber
atechny
tidak mengubah satu huruf. Solusi ini melakukan sesuatu yang tidak terkait dengan pertanyaan.Python, 174 karakter:
Cepat dan to the point.
Contoh:
Keluaran:
Saya kira file kata OS X hanya memiliki lebih banyak entri.
sumber
golf'
.golf'
itu, itu akan dicetak.Haskell - 219
sumber
Rebol - 213
Tidak disatukan (dengan beberapa komentar):
Contoh penggunaan (diuji dalam Rebol 3 pada OS X Lion):
Di bawah ini adalah
parse
aturan yang dibuat untuk mencocokkan kata yang mirip dengan golf :sumber
Python (103):
Cukup efisien, saya pikir. Juga, saya suka seberapa bagus golf ini di Python.
sumber