From 31092eddc423ea7e352c09aeb51d699291c913b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Tue, 18 Aug 2026 21:47:37 +0200 Subject: [PATCH] make solver interactive --- src/app/wordle_solver.rs | 53 ++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/src/app/wordle_solver.rs b/src/app/wordle_solver.rs index 51c9c77..fc1e139 100644 --- a/src/app/wordle_solver.rs +++ b/src/app/wordle_solver.rs @@ -1,21 +1,48 @@ +use std::collections::hash_map; +use std::io; +use std::io::Write; use std::path::Path; -use wordle_solver::{pattern::Pattern, solver::Solver, word_list::WordList}; +use wordle_solver::{ + pattern::{CharStatus, Pattern}, + solver::Solver, + word_list::WordList, +}; -pub fn main() { - let wl = WordList::from_file(Path::new("valid-words.csv")).unwrap(); +fn pat_from_str(pat_str: &str) -> Vec { + pat_str + .chars() + .map(|c| match c { + 'g' => CharStatus::GREEN, + 'y' => CharStatus::YELLOW, + _ => CharStatus::GREY, + }) + .collect() +} - let mut solver = Solver::from_single_word_list(wl); +pub fn main() -> io::Result<()> { + let valid_words = WordList::from_file(Path::new("valid-words.txt")).unwrap(); + let answers = WordList::from_file(Path::new("answers.txt")).unwrap(); - solver.apply_guess(Pattern::from_guess("CRANE", "CASTS").unwrap()); - println!("{}", solver.tabular_format()); - println!("{}", solver.best_word_format(5)); + let mut solver = Solver::new(valid_words, answers); - solver.apply_guess(Pattern::from_guess("CRANE", "WORKS").unwrap()); - println!("{}", solver.tabular_format()); - println!("{}", solver.best_word_format(5)); + let mut buf = String::new(); - solver.apply_guess(Pattern::from_guess("CRANE", "PAPER").unwrap()); - println!("{}", solver.tabular_format()); - println!("{}", solver.best_word_format(5)); + loop { + print!("Your guess: "); + io::stdout().flush()?; + buf.clear(); + io::stdin().read_line(&mut buf)?; + let guess = buf.trim_ascii().to_ascii_uppercase(); + print!("Result [-,y,g]: "); + io::stdout().flush()?; + buf.clear(); + io::stdin().read_line(&mut buf)?; + let pat_str = buf.trim_ascii().to_ascii_lowercase(); + + solver.apply_guess(Pattern::try_new(&guess, pat_from_str(&pat_str)).unwrap()); + solver.evaluate_all_words(); + println!("\n{}\n", solver.tabular_format()); + println!("{}", solver.best_word_format(10)); + } }