Di artikel sebelumnya kita sudah mendapatkan hasil untuk kata pertama dan kedua. Namun, seperti yang saya sebutkan juga di artikel sebelumnya, bahwa ada beberapa huruf yang tidak termasuk ke dalam 10 huruf yang sering muncul, sehingga bisa dibilang bahwa hasil yang kita dapat mungkin belum optimal.
Di artikel kali ini, kita akan membahas agar kita bisa mendapatkan dua kata yang semua hurufnya merupakan huruf yang paling sering muncul.
Dari yang sudah dijelaskan di artikel sebelumnya, kita sudah mendapatkan code sebagai berikut.
import pandas as pd
import numpy as np
import mathdef best_words(words):
distinct_words = []
for word in words:
distinct_words.append(list(set(word)))
letter_counter = {}
for word in distinct_words:
for letter in word:
if letter in letter_counter:
letter_counter[letter] += 1
else:
letter_counter[letter] = 0
word_values = []
for word in distinct_words:
temp_value = 0
for letter in word:
temp_value += letter_counter[letter]
word_values.append(temp_value)
return word_valuesdef get_best_word(words, word_values):
return words[np.argmax(word_values)]def remove_word_contain_letters(words, first_word):
result_word = []
first_word_list = list(set(first_word))
for word in words:
in_word = False
i = 0
while i < len(first_word_list) and not in_word:
if first_word_list[i] in word:
in_word = True
i += 1
if not in_word:
result_word.append(word)
return result_wordwords = []
with open('sgb-words.txt') as f:
words = [line.rstrip() for line in f]word_values = best_words(words)
first_word = get_best_word(words, word_values)second_words = remove_word_contain_letters(words, first_word)
second_values = best_words(second_words)
second_word = get_best_word(second_words, second_values)print(first_word) # first word
print(second_word) # second word
Untuk proses ini, kita hanya perlu mengulang proses yang sudah kita lakukan sebelumnya. Jika pada proses sebelumnya kita hanya menggunakan kata pertama yang mempunyai nilai terbaik, sekarang kita menggunakan juga kata terbaik kedua untuk dijadikan kata pertama sehingga kita mendapatkan lebih banyak variasi hasil.
Langkah-langkahnya adalah sebagai berikut.
Pertama-tama adalah dengan menghitung nilai untuk semua kata, kemudian mengurutkan kata tersebut berdasarkan nilainya.
values = best_words(words)
values_index = np.argsort(values)[::-1]
Setelah itu, kita akan mencari kata pertama dan kedua seperti sebelumnya. Perbedaannya, disini kita akan terus melakukan looping untuk mencari kombinasi kata pertama dan kedua agar menghasilkan kata-kata yang mempunyai nilai terbaik.
best_val = 0
best_word_list = []
top_words = sorted(values, reverse=True)for i, idx in enumerate(values_index):
best_word = words[idx]
second_words = remove_word_contain_letters(words, best_word)
second_values = best_words(second_words)
second_best_word = get_best_word(second_words, second_values)
temp_value = 0
for letter in second_best_word:
temp_value += letter_counter[letter]
if temp_value + top_words[i] >= best_val:
best_val = temp_value + top_words[i]
print(best_word, second_best_word, top_words[i] + temp_value)
Dan hasilnya adalah seperti ini.
arose unity 17141
tears doily 17388
stare doily 17388
tares doily 17388
rates doily 17388
aster doily 17388
tales irony 17507
taels irony 17507
stale irony 17507
least irony 17507
tesla irony 17507
steal irony 17507
slate irony 17507
teals irony 17507
stela irony 17507
store inlay 17507
lores antic 17559
...
laird stone 17739
adorn tiles 17739
radon tiles 17739
tonal rides 17739
talon rides 17739
lined roast 17739
intro leads 17739
nitro leads 17739
nodal tries 17739
Dari hasil tersebut, kolom pertama adalah kata pertama, kolom kedua adalah kata kedua, dan kolom ketika adalah penjumlahan dari nilai kata pertama dan kata kedua. Jika dilihat dari hasil diatas, kata arose dan unity ternyata bukanlah kombinasi kata dengan nilai terbesar. Selain itu, banyak kombinasi kata yang mendapatkan nilai 17739, jika diperhatikan semua huruf di kombinasi kata yang mendapatkan nilai tersebut adalah sepuluh huruf yang paling banyak muncul dalam dataset. Sehingga disimpulkan bahwa kombinasi kata yang mendapatkan nilai 17739 merupakan kombinasi kata tertinggi yang bisa kita dapatkan.
Tapi manakah kombinasi kata yang paling optimal? Untuk mendapatkan jawaban dari pertanyaan tersebut, kita perlu untuk mengetahui bobot huruf berdasarkan peletakannya. Untuk mencari tahu hal tersebut, saya akan membahasnya di artikel selanjutnya.




