Greasy Fork is available in English.

WordSleuth

A script that helps you guess words in skribblio

< Feedback on WordSleuth

Question/comment

§
Posted: 25.06.2023

If your guess is not a "close word," then other words that are 1 letter different can't be the answer and can therefore be removed.

§
Posted: 29.06.2023

Here is the concept in Python, because I'm still learning JavaScript.

def levenshtein_distance(a, b):
# Initialize a matrix of size (len(s1)+1) x (len(s2)+1) with all values set to 0
matrix = [[0] * (len(b) + 1) for _ in range(len(a) + 1)]

# Initialize the first row and column of the matrix
for i in range(len(a) + 1):
matrix[i][0] = i
for j in range(len(b) + 1):
matrix[0][j] = j

# Compute the Levenshtein distance
for i in range(1, len(a) + 1):
for j in range(1, len(b) + 1):
if a[i - 1] == b[j - 1]:
matrix[i][j] = matrix[i - 1][j - 1]
else:
matrix[i][j] = min(
matrix[i - 1][j] + 1, # deletion
matrix[i][j - 1] + 1, # insertion
matrix[i - 1][j - 1] + 1 # substitution
)

# Return the Levenshtein distance (last element in the matrix)
return matrix[-1][-1]


def play_game():
global words
print(words)
while True:
guess = input("User Guess: ")

if guess == target:
print(f"{guess} is correct!\n{[target]}")
return

if levenshtein_distance(guess, target) == 1:
print(f"{guess} is close!")

# Filter words that have a Levenshtein distance of 1 from the guess
close_words = []
for word in words:
if levenshtein_distance(guess, word) == 1:
close_words.append(word)
words = close_words
else:
# Filter words that have a Levenshtein distance greater than 1 from the guess
distant_words = []
for word in words:
if levenshtein_distance(guess, word) > 1:
distant_words.append(word)
words = distant_words
print(words)

target = 'dune'
words = ['crumb', 'dime', 'dome', 'done', 'drum', 'dune', 'dunes', 'ring', 'rung', 'sing', 'song', 'sung']
play_game()

§
Posted: 29.06.2023
Edited: 29.06.2023

def levenshtein_distance(a, b): # Initialize a matrix of size (len(s1)+1) x (len(s2)+1) with all values set to 0.

matrix = [[0] * (len(b) + 1) for _ in range(len(a) + 1)]

# Initialize the first row and column of the matrix.

for i in range(len(a) + 1):
    matrix[i][0] = i
for j in range(len(b) + 1):
    matrix[0][j] = j

# Compute the Levenshtein distance.

for i in range(1, len(a) + 1):
    for j in range(1, len(b) + 1):
        if a[i - 1] == b[j - 1]:
            matrix[i][j] = matrix[i - 1][j - 1]
        else:
            matrix[i][j] = min(
                matrix[i - 1][j] + 1,       # deletion.
                matrix[i][j - 1] + 1,       # insertion.
                matrix[i - 1][j - 1] + 1    # substitution.
            )

# Return the Levenshtein distance (last element in the matrix).

return matrix[-1][-1]

def play_game(): global words print(words) while True: guess = input("User Guess: ")

    if guess == target:
        print(f"{guess} is correct!\n{[target]}")
        return

    if levenshtein_distance(guess, target) == 1:
        print(f"{guess} is close!")

        # Filter words that have a Levenshtein distance of 1 from the guess

        close_words = []
        for word in words:
            if levenshtein_distance(guess, word) == 1:
                close_words.append(word)
        words = close_words
    else:
        # Filter words that have a Levenshtein distance greater than 1 from the guess

        distant_words = []
        for word in words:
            if levenshtein_distance(guess, word) > 1:
                distant_words.append(word)
        words = distant_words
    print(words)

target = 'dune' words = ['crumb', 'dime', 'dome', 'done', 'drum', 'dune', 'dunes', 'ring', 'rung', 'sing', 'song', 'sung'] play_game()

Post reply

Sign in to post a reply.