Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitd9542389214c0082436617abcc936ddd3ad85fee (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-12-14 16:08:29 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-12-14 16:08:29 +0200
Files31144f3f95fdde46da575f0f5fd031a87f144ea1
uni-projects-d9542389214c0082436617abcc936ddd3ad85fee.tar
uni-projects-d9542389214c0082436617abcc936ddd3ad85fee.tar.gz
uni-projects-d9542389214c0082436617abcc936ddd3ad85fee.zip
Parent4f8f98b87448583f2ef82edd14350faa8b8e94a1 (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.rs37
-rw-r--r--Year 4/Artificial Intelligence/hw02/src/cell.rs7
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!");
}