diff options
| Commit | d9542389214c0082436617abcc936ddd3ad85fee (patch) | |
|---|---|---|
| Author | 2024-12-14 16:08:29 +0200 | |
| Committer | 2024-12-14 16:08:29 +0200 | |
| Files | 31144f3f95fdde46da575f0f5fd031a87f144ea1 | |
| uni-projects-d9542389214c0082436617abcc936ddd3ad85fee.tar uni-projects-d9542389214c0082436617abcc936ddd3ad85fee.tar.gz uni-projects-d9542389214c0082436617abcc936ddd3ad85fee.zip | ||
| Parent | 4f8f98b87448583f2ef82edd14350faa8b8e94a1 (diff) | |
hw(AI/2): Improve main loop constant, add alg test, fix warnings
2 files changed, 39 insertions, 5 deletions
| -rw-r--r-- | Year 4/Artificial Intelligence/hw02/src/alg.rs | 37 | ||||
| -rw-r--r-- | Year 4/Artificial Intelligence/hw02/src/cell.rs | 7 |
diff --git a/Year 4/Artificial Intelligence/hw02/src/alg.rs b/Year 4/Artificial Intelligence/hw02/src/alg.rs index 2ee321f..1398488 100644 --- a/Year 4/Artificial Intelligence/hw02/src/alg.rs +++ b/Year 4/Artificial Intelligence/hw02/src/alg.rs @@ -46,7 +46,16 @@ impl Puzzle { pub fn solve(&mut self) { self.init_horse(); loop { - for _ in 0..2 * self.N { + // Константа деление спрямо време за 100 опита при 9999: + // 2.0 - 0.15s + // 2.1 - 0.14s (рядко 0.13s) + // 2.2 - 0.13s + // 2.3 - 0.13s (рядко 0.12s) + // 2.35 - 0.12s; ~45% шанс за 0.13s, ~0.3% шанс за 0.14s + // 2.4 - 0.12s; ~20% шанс за 0.13s, ~2% шанс за 0.48s + // 2.45 - 0.12s; ~1% шанс за 0.13s, ~35% шанс за 0.48s + // 2.5 - 0.46s + for _ in 0..(self.N as f32 / 2.35) as usize { let col = self.max_queen_col(); if col == self.N { return; } @@ -60,3 +69,29 @@ impl Puzzle { } } } + +#[test] +fn test_has_conflicts() { + let e1 = Puzzle::example1(); + assert!(e1.has_conflicts(), "Bad has_conflicts, example1 does have!"); + let e2 = Puzzle::example2(); + assert!(e2.has_conflicts(), "Bad has_conflicts, example2 does have!"); + + let mut e3 = Puzzle::new(4); + e3.in_col[0] = 1; + e3.in_col[1] = 3; + e3.in_col[2] = 0; + e3.in_col[3] = 2; + e3.per_row[0] = 1; e3.per_row[1] = 1; e3.per_row[2] = 1; e3.per_row[3] = 1; + + e3.per_d1[1] = 1; + e3.per_d1[2] = 1; + e3.per_d1[4] = 1; + e3.per_d1[5] = 1; + + e3.per_d2[1] = 1; + e3.per_d2[2] = 1; + e3.per_d2[4] = 1; + e3.per_d2[5] = 1; + assert!(!e3.has_conflicts(), "Bad has_conflicts, solution doesn't have any!"); +} diff --git a/Year 4/Artificial Intelligence/hw02/src/cell.rs b/Year 4/Artificial Intelligence/hw02/src/cell.rs index 8df0589..4c5cc62 100644 --- a/Year 4/Artificial Intelligence/hw02/src/cell.rs +++ b/Year 4/Artificial Intelligence/hw02/src/cell.rs @@ -109,27 +109,26 @@ fn test_update() { e1.update(0, 1); e1.in_col[2] = 1; e1.update(2, 1); - let mut e1s = Puzzle::example1(); + let e1s = Puzzle::example1(); assert_eq!(e1, e1s, "Bad update!"); } #[test] fn test_move_queen() { + let e1s = Puzzle::example1(); let mut e1 = Puzzle::example1(); e1.move_queen(0, 0); e1.move_queen(0, 3); - let mut e1s = Puzzle::example1(); assert_eq!(e1, e1s, "Bad move_queen identity!"); let mut e1 = Puzzle::example1(); e1.move_queen(2, 0); e1.move_queen(2, 1); - let mut e1s = Puzzle::example1(); assert_eq!(e1, e1s, "Bad move_queen identity on moved max!"); let mut e1 = Puzzle::example1(); e1.move_queen(0, 0); e1.move_queen(2, 2); - let mut e2 = Puzzle::example2(); + let e2 = Puzzle::example2(); assert_eq!(e1, e2, "Bad move_queen on changed maxes!"); } |
