Use visualization for all printing.

This commit is contained in:
hal8174 2024-09-19 16:03:52 +02:00
parent 7d412ce610
commit 1c44d7aec1
10 changed files with 216 additions and 299 deletions

View file

@ -1,7 +1,10 @@
use std::io;
use clap::{Parser, ValueEnum};
use factorio_blueprint::belt_finding::brute_force::{problems, Bruteforce};
use factorio_blueprint::{
belt_finding::brute_force::{problems, Bruteforce},
common::visualize::Visualize,
};
#[derive(ValueEnum, Clone)]
enum Mode {
@ -44,20 +47,20 @@ fn main() {
let mut b = args.problem.get_problem();
b.print();
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();
b.print_visualization();
}
println!("Solutions: {}\nStates: {}", b.solution_count(), b.count());
}
Mode::Step => {
while b.next_state() {
b.print();
b.print_visualization();
let mut s = String::new();
let _ = io::stdin().read_line(&mut s);
}

View file

@ -1,87 +0,0 @@
use clap::{Parser, ValueEnum};
use factorio_blueprint::belt_finding::{conflict_avoidance::ConflictAvoidance, problems, Problem};
use std::io;
#[derive(ValueEnum, Clone)]
enum Mode {
Solve,
ConflictAvoidance,
ConflictStep,
}
#[derive(ValueEnum, Clone)]
enum ProblemCase {
Simple,
Level1,
Level2,
Level3,
Level5,
}
impl ProblemCase {
fn get_problem(&self) -> Problem {
match self {
ProblemCase::Simple => problems::simple(),
ProblemCase::Level1 => problems::belt_madness_level_1(),
ProblemCase::Level2 => problems::belt_madness_level_2(),
ProblemCase::Level3 => problems::belt_madness_level_3(),
ProblemCase::Level5 => problems::belt_madness_level_5(),
}
}
}
#[derive(Parser)]
struct Args {
#[arg(value_enum, default_value = "level1")]
problem: ProblemCase,
#[arg(value_enum, default_value = "conflict-avoidance")]
mode: Mode,
}
fn main() {
let args = Args::parse();
let mut p = args.problem.get_problem();
match args.mode {
Mode::Solve => {
p.print();
p.find_path();
p.print();
}
Mode::ConflictAvoidance => {
p.print();
p.find_path();
p.print();
p.find_path();
p.print();
p.find_path();
p.print();
p.find_path();
p.print();
let mut c = ConflictAvoidance::new(&p);
c.print();
while c.remove_conflict(None) {
c.print();
}
}
Mode::ConflictStep => {
p.print();
p.find_path();
p.print();
p.find_path();
p.print();
p.find_path();
p.print();
p.find_path();
p.print();
let mut c = ConflictAvoidance::new(&p);
c.print();
while c.remove_conflict(None) {
c.print();
let mut s = String::new();
let _ = io::stdin().read_line(&mut s);
}
}
}
}