94 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::io;
 | |
| 
 | |
| use clap::{Parser, ValueEnum};
 | |
| use factorio_blueprint::{
 | |
|     belt_finding::brute_force::{problems, Bruteforce},
 | |
|     common::visualize::Visualize,
 | |
| };
 | |
| 
 | |
| #[derive(ValueEnum, Clone)]
 | |
| enum Mode {
 | |
|     Solutions,
 | |
|     Step,
 | |
|     Statistics,
 | |
| }
 | |
| 
 | |
| #[derive(ValueEnum, Clone)]
 | |
| enum Problem {
 | |
|     Simple,
 | |
|     Mid,
 | |
|     Snake,
 | |
|     Weaving,
 | |
|     Debug,
 | |
| }
 | |
| 
 | |
| impl Problem {
 | |
|     fn get_problem(&self) -> Bruteforce {
 | |
|         match self {
 | |
|             Problem::Simple => problems::simple(),
 | |
|             Problem::Mid => problems::mid(),
 | |
|             Problem::Snake => problems::snake(),
 | |
|             Problem::Weaving => problems::weaving(),
 | |
|             Problem::Debug => problems::debug(),
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| #[derive(Parser)]
 | |
| struct Args {
 | |
|     #[arg(value_enum, default_value = "simple")]
 | |
|     problem: Problem,
 | |
|     #[arg(value_enum, default_value = "solutions")]
 | |
|     mode: Mode,
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     let args = Args::parse();
 | |
| 
 | |
|     let mut b = args.problem.get_problem();
 | |
| 
 | |
|     b.print_visualization();
 | |
| 
 | |
|     match args.mode {
 | |
|         Mode::Solutions => {
 | |
|             while b.next_finish_state(None) {
 | |
|                 println!("{}\n{}\n{}", b.count(), b.solution_count(), b.cost());
 | |
|                 b.print_visualization();
 | |
|             }
 | |
| 
 | |
|             println!("Solutions: {}\nStates: {}", b.solution_count(), b.count());
 | |
|         }
 | |
|         Mode::Step => {
 | |
|             while b.next_state() {
 | |
|                 b.print_visualization();
 | |
|                 let mut s = String::new();
 | |
|                 let _ = io::stdin().read_line(&mut s);
 | |
|             }
 | |
|             println!("Solutions: {}\nStates: {}", b.solution_count(), b.count());
 | |
|         }
 | |
|         Mode::Statistics => {
 | |
|             while b.next_finish_state(None) {}
 | |
| 
 | |
|             println!("Solutions: {}\nStates: {}", b.solution_count(), b.count());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // println!(
 | |
|     //     "{}\n{}\n{}\n{}",
 | |
|     //     b.count(),
 | |
|     //     b.solution_count(),
 | |
|     //     b.modify_pointer(),
 | |
|     //     b
 | |
|     // );
 | |
| 
 | |
|     // for i in 0..20 {
 | |
|     //     b.next_state();
 | |
|     //     println!(
 | |
|     //         "{}\n{}\n{}\n{}",
 | |
|     //         b.count(),
 | |
|     //         b.solution_count(),
 | |
|     //         b.modify_pointer(),
 | |
|     //         b
 | |
|     //     );
 | |
|     // }
 | |
| }
 |