2x2x2_three_phase/
2x2x2_three_phase.rs1use cubing::{alg::parse_move, kpuzzle::kpattern_from_json_file, puzzles::cube2x2x2_kpuzzle};
4use twsearch::{
5 _internal::{cli::args::VerbosityLevel, search::search_logger::SearchLogger},
6 experimental_lib_api::{KPuzzleSimpleMaskPhase, MultiPhaseSearch, MultiPhaseSearchOptions},
7 scramble::{random_scramble_for_event, Event},
8};
9
10kpattern_from_json_file!(
11 pub(crate),
12 phase1,
13 "./2x2x2_three_phase/phase1-D-orientation.kpattern.json",
14 cube2x2x2_kpuzzle()
15);
16
17kpattern_from_json_file!(
18 pub(crate),
19 phase2,
20 "./2x2x2_three_phase/phase2-U-orientation.kpattern.json",
21 cube2x2x2_kpuzzle()
22);
23
24pub fn main() {
25 let kpuzzle = cube2x2x2_kpuzzle();
26
27 let mut search = MultiPhaseSearch::try_new(
30 kpuzzle.clone(),
31 vec![
32 Box::new(
33 KPuzzleSimpleMaskPhase::try_new(
34 "D orientation".to_owned(),
35 phase1_kpattern().clone(),
36 vec![
37 parse_move!("U").to_owned(),
38 parse_move!("L").to_owned(),
39 parse_move!("F").to_owned(),
40 parse_move!("R").to_owned(),
41 parse_move!("B").to_owned(),
42 parse_move!("D").to_owned(),
43 ],
44 Default::default(),
45 )
46 .unwrap(),
47 ),
48 Box::new(
49 KPuzzleSimpleMaskPhase::try_new(
50 "U orientation".to_owned(),
51 phase2_kpattern().clone(),
52 vec![
53 parse_move!("U").to_owned(),
54 parse_move!("F").to_owned(),
55 parse_move!("R").to_owned(),
56 ],
57 Default::default(),
58 )
59 .unwrap(),
60 ),
61 Box::new(
62 KPuzzleSimpleMaskPhase::try_new(
63 "PBL".to_owned(),
64 kpuzzle.default_pattern().clone(),
65 vec![
66 parse_move!("U").to_owned(),
67 parse_move!("R2").to_owned(),
68 parse_move!("F2").to_owned(),
69 parse_move!("L2").to_owned(),
70 parse_move!("D").to_owned(),
71 ],
72 Default::default(),
73 )
74 .unwrap(),
75 ),
76 ],
77 MultiPhaseSearchOptions {
78 search_logger: SearchLogger {
79 verbosity: VerbosityLevel::Info,
80 },
81 ..Default::default()
82 },
83 )
84 .unwrap();
85
86 let scramble_alg = random_scramble_for_event(Event::Cube2x2x2Speedsolving).unwrap();
87 let scramble = kpuzzle.default_pattern().apply_alg(&scramble_alg).unwrap();
88 println!(
89 "{} // scramble alg
90{} // solution",
91 scramble_alg,
92 search
93 .chain_first_solution_for_each_phase(&scramble)
94 .unwrap()
95 );
96}