From 64e32b1010f23c3e0ecb268d3a186412af2a9a5d Mon Sep 17 00:00:00 2001 From: Rhys Lloyd Date: Tue, 19 May 2026 11:21:51 -0700 Subject: [PATCH] better iter order --- klondike/src/lib.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/klondike/src/lib.rs b/klondike/src/lib.rs index 5d28854..a79d94e 100644 --- a/klondike/src/lib.rs +++ b/klondike/src/lib.rs @@ -629,18 +629,19 @@ impl Klondike { KlondikeInstruction::RotateStock => 4, } } + pub fn iter(&self) -> impl Iterator + use<> { + let state = self.state.clone(); + KlondikeIter::new().filter(move |&instruction| state.is_instruction_valid(instruction)) + } /// A single move that usually makes progress towards a winning game pub fn get_auto_move(&self) -> Option { - self.possible_instructions() + self.iter() .filter(|ins| !ins.is_useless()) .min_by_key(|ins| self.instruction_priority(ins)) } /// A list of possible moves with useless moves filtered out and sorted by a simple priority function pub fn get_sorted_moves(&self) -> Vec { - let mut useful_moves: Vec<_> = self - .possible_instructions() - .filter(|ins| !ins.is_useless()) - .collect(); + let mut useful_moves: Vec<_> = self.iter().filter(|ins| !ins.is_useless()).collect(); useful_moves.sort_by_key(|ins| self.instruction_priority(ins)); useful_moves } @@ -651,8 +652,7 @@ impl Game for Klondike { type Config = KlondikeConfig; type Instruction = KlondikeInstruction; fn possible_instructions(&self) -> impl Iterator + use<> { - let state = self.state.clone(); - KlondikeIter::new().filter(move |&instruction| state.is_instruction_valid(instruction)) + self.get_sorted_moves().into_iter() } fn is_instruction_valid(&self, _config: &Self::Config, instruction: Self::Instruction) -> bool { self.state.is_instruction_valid(instruction)