Kata itu BANANA
muncul tepat sekali dalam pencarian kata ini :
B A N A A N B B
A B A N A B A N
A N A B N N A A
N N B A A A N N
N A A N N N B A
A N N N B A N A
N A A B A N A N
B A N A N B B A
Pencarian kata di atas hanya satu kejadian dari kata BANANA
melihat ke atas, bawah, kiri, kanan, atau diagonal, tetapi memiliki banyak kata-kata yang sama, seperti BANANB
, BANNANA
, BNANA
, dll
Tugas Anda adalah membangun sebuah program yang akan menghasilkan pencarian kata yang menyebalkan seperti ini.
Program Anda akan menerima masukan:
Satu kata, dalam semua huruf kapital, berisi dari tiga hingga tujuh huruf unik dengan total setidaknya empat huruf.
Satu angka, untuk mewakili dimensi kotak persegi untuk pencarian kata. Jumlahnya harus paling tidak jumlah huruf dalam kata.
Dan kemudian, hasilkan pencarian kata hanya menggunakan huruf-huruf dalam kata itu, yang persis mengandung satu kemunculan kata input, dan sebanyak mungkin kemarahan .
Infuriator didefinisikan sebagai string yang memiliki jarak Damerau-Levenshtein dari kata target dan dimulai dengan huruf yang sama dengan kata tersebut. Sebab BANANA
, ini termasuk kata-kata seperti:
BANBNA
, di mana salah satu surat itu diganti.BANNANA
atauBANAANA
, di mana surat tambahan ditambahkan.BANAN
,,BNANA
tempat surat dihapus, tetapi tidakANANA
, karena tidak ada lagiB
.BAANNA
atauBANAAN
, di mana dua huruf berturut-turut dialihkan.
Saat menghitung penyusup pada kotak pencarian kata, mereka mungkin tumpang tindih, tetapi Anda tidak dapat menghitung string besar jika benar-benar berisi string yang lebih kecil yang sudah Anda hitung, atau sebaliknya. (Jika sudah BANANB
, Anda tidak dapat menghitungnya lagi jika Anda sudah menghitung BANAN
atau mundur BNANA
di dalamnya.) Anda juga tidak dapat menghitung string apa pun yang benar-benar berisi atau sepenuhnya terkandung oleh kata target itu sendiri (Anda tidak dapat menghitung spesifik BANAN
itu adalah bagian dari BANANA
, atau BANANAA
atau BANANAN
.)
Program Anda akan diuji pada daftar kata tertentu yang terdiri dari kata-kata yang sesuai dengan persyaratan kata input (akan diberikan nanti setelah saya membuatnya), pada ukuran kotak sama dengan menggandakan panjang kata, dan akan diberi skor pada jumlah infuriator yang ada di setiap kotak. Silahkan posting hasil Anda untuk masukan BANANA 12
, ELEMENT 14
dan ABRACADABRA 22
untuk verifikasi.
sumber
MURMURS
tampaknya seperti ujian yang baik, karena saya membayangkan jawaban yang optimal akan melibatkan menjatuhkanS
Jawaban:
Java Script
Bonus: Anda dapat mengunggulkan pencarian Word. Seed default adalah: "codechallenge"
BANANA - 12:
UNSUR - 14:
Semoga sukses: ABRACADABRA - 22:
Ekstra: MISSISSIPPI - 32:
sumber
C ++
Saya menulis ini hari ini. Ini bukan cara yang paling efisien dan tidak selalu menghasilkan pencarian kata yang paling acak, tetapi menyelesaikan pekerjaan dan relatif cepat.
Bonus: Mendukung Palindrom juga !!!
Ini bekerja dengan mengambil input untuk kata dan ukuran pencarian kata. Ini kemudian menghasilkan infurator dengan menjatuhkan huruf, memasukkan huruf, atau membalikkan huruf. Itu kemudian menambahkan mereka ke grid serta kata yang benar. Itu kemudian memeriksa semua contoh dari huruf pertama di setiap arah untuk kata. Jika 1 instance tidak ditemukan (2 untuk palindrom), ia akan memaksa siklus untuk berakhir. Ini kemudian menampilkan pencarian kata ke konsol serta file.
Ini dia di 213 baris kode dengan spasi dan komentar.
Saya jauh dari pakar C ++ jadi saya yakin ada tempat-tempat di mana kode ini dapat ditingkatkan tetapi saya senang dengan bagaimana itu berakhir.
Inilah hasilnya.
Saya dapat memperbarui ini untuk menghasilkan sedikit lebih banyak pencarian kata yang tampak "acak".
sumber
Excel VBA
Ini bekerja dengan pertama-tama secara acak menempatkan kata dalam lembar spread, acak di posisi dan arah, kemudian mengisi ruang kosong di kotak sekitarnya dengan memilih secara acak dari semua kecuali huruf terakhir dari kata tersebut.
Output BANANA (2, 1):
Output UNSUR (6, 5):
Output ABRACADABRA (2, 3):
sumber