Skip to content

Commit 2e5abc8

Browse files
committedJun 18, 2020
Switch domino move to lower case, and combine repeated moves for #52.
1 parent 65e401d commit 2e5abc8

6 files changed

+114
-108
lines changed
 

‎docs/new_rules.md

+57-69
Original file line numberDiff line numberDiff line change
@@ -417,80 +417,68 @@ each domino move has three letters.
417417

418418
* The first letter identifies the pawn that will move or one of the pawns on the
419419
domino that will move.
420-
* For a domino move, the second letter is "D" for (D)omino.
420+
* For a domino move, the second letter is "d" for (d)omino.
421421
* The last letter shows the direction: (L)eft, (R)ight, (U)p, or (D)own.
422+
* If the move gets repeated, there's a number to show how many times.
422423

423-
For the small example given in the rules, the solution is BDD, BL, RDU.
424+
For the small example given in the rules, the solution is BdD, BL, RdU.
424425

425426
Here are the Mirror Donimoes solutions:
426427

427-
1. PD, BL, BD, BDD, BL, RL
428-
2. PD, BD, BL, BDD, BL, RL
429-
3. NDL, PD, BD, RDL, RU, PDU, RDL, RDL, NU, NDR, NDR, PDD
430-
4. PDL, PR, PD, BD, NR, NR, PD, PD, PR, NR, PR, RU, RDD, BDD
431-
5. BDR, NU, NR, PR, NU, RU, BL, BD, RL, BDR, RDU, RDU, RD, RDU, BDL, BL, BL, BDU
432-
6. PDL, BDU, RDU, PR, NR, RL, BD, RL, RU, RL, RDU, RDU, PR, PDD, BL, PDD, BDL, BL
433-
7. NDD, PDD, PR, BL, BL, BDL, BDL, PDU, PDU, BR, BDD, BDD, PR, PD, NU, NR, NR, RL
434-
8. NR, NU, RU, RL, NDL, RDL, RU, PDU, RDL, RDL, NL, NU, NDR, NDR, PDD, PR, PR, BL
435-
9. RDD, PR, RU, RL, RL, BD, RU, RR, RDR, RDR, BD, BDL, BDL, NU, BD, RDR, NDR,
436-
RDR, NDR, BR, BU, NDL, RDL, NDL, RDL, NU, NR, RL
437-
10. RDD, NR, NU, NR, NDR, NDR, RU, NR, RU, RDL, RDL, RL, BD, NDR, NDR, BD, BDL,
438-
BDL, RD, BL, RL, BDD, NDL, BU, RDD, BDL, RU, NU, NL
439-
11. NDL, RDD, BDD, NR, PD, PD, PR, PDD, PDD, PU, PR, PDD, PU, PL, PDD, NDR, BD,
440-
PR, PDU, RU, RL, RU, RDD, RR, RDD, RL, RU, BDD
441-
12. RDR, NR, NR, NDR, PD, PR, PR, PDU, PR, NR, NU, PR, NU, NDR, ND, NL, NDR, NU,
442-
RL, NDR, BDD, ND, NDR, BDD, RU, RDU, NDL, PDR, NDL
443-
13. BDU, PR, BD, BL, BL, BL, BDU, PR, PDD, PD, BD, PD, BD, PL, BD, PL, NDL, PD,
444-
NDR, PR, NR, RL, PR, NR
445-
14. PDU, NR, NR, NDD, PD, PR, PD, PR, RL, RL, RU, RDL, NU, RU, BL, RR, RU, RDU,
446-
RU, BL, BDD, BD, RD, BL, RD, BD, RL
447-
15. NR, PR, PD, PR, PU, PR, PD, PR, PU, PR, RL, BD, BD, BDR, PDD, BL, BD, BL,
448-
BDR, BD, BL, PDD, BDR, BD, PDD, RDR, PDD, RL, RDD, PL, RDU, BL, RU, BL, PL,
449-
BDD, RL, BU, PL, RL, BL
450-
16. NDL, BDU, NR, NU, NDL, PD, PD, PD, PR, PDD, BD, BL, BDU, BD, BL, BDU, BD,
451-
BL, BL, BL, BDD, BD, BR, NR, BR, BU, BDR, BDR, BDR, BD, BD, PDD, NR, PDU,
452-
NR, ND, PU, PR, ND, PD, NR, PD, RU, RDD, RL, RL, BDD, BL, BL
453-
17. NU, NR, NDD, NR, NDD, NU, NR, NU, NR, NDD, NL, NDD, NU, NR, NDD, RDL, RU, RDL,
454-
RR, RD, NL, NU, NL, ND, NL, NDD, NU, NR, NDD, NU, NR, NDD, RDL, RU, RDL, RR,
455-
RD, RDL, RU, RDL, RR, RD, RDL, RL, RL, RU, RU, RU, NDU, NR, NDU, NDU, NU,
456-
NR, NR, NU, BDU, BD, NDU, NL, NL, NU, NL, ND, ND, BL, BD, BL, BU, BL, BD,
457-
BDU, BL, BDU, BDU, ND, NL, NDU, NDU, NU, NL, ND, RDL, NDD, ND, NDL, RD, RDR,
458-
NU, NU, RR, RU, RDU, RDU, BD
459-
18. RU, RU, RDR, RL, RD, RD, RL, RU, RL, RL, RU, RDR, RR, RR, RD, RD, RL, RU,
460-
RL, RL, RDU, BD, BD, BD, BDR, BL, BU, BL, BU, BL, BD, BD, BDR, RDU, RL, NR,
461-
NU, NR, ND, NR, NU, NU, NL, NL, NDL, ND, ND, NR, NU, NR, ND, NR, NU, NU,
462-
NDL, RDD, RR, RDD, RU, RL, RDU, RU, RU, RL, RDU, NU, NDU, NL, NL, NDL, PD,
463-
PD, NDR, PR, PU, NR, NR, NDD, RDD, RR, RD, RD, BDL, BL
464-
19. PDL, PR, PD, PD, PD, PD, PD, PDL, NU, PDR, PU, PU, PR, PR, NL, NU, NU, NDL,
465-
PDL, PL, PD, PR, PR, PR, NR, ND, NR, NDL, PDL, NR, NDR, PR, NDL, PDL, NL,
466-
NL, NU, NR, NU, NU, NU, NL, PL, PL, PL, PL, PU, PR, PU, PU, PU, NDR, PR, PR,
467-
PR, PR, NR, NR, NR, NR, BDR, NDR, PD, PR, NR, ND, NDR, ND, NL, NL, ND, NDL,
468-
PL, PDL, BL, BD, PDR, PD, PL, PL, PU, PDD, NR, NDD, PR, PR, NU, NR, BL, BD,
469-
RU, RU
470-
20. NU, NR, NR, NR, NR, NR, NR, RL, RL, RL, RL, RL, RL, RL, RU, RR, RR, RR, RR,
471-
NDR, RDR, NL, RDL, RL, RL, NDR, RDR, NL, NL, RDL, RL, RL, NDR, RDR, RD, RR,
472-
RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR, RDR, NDR, NDR, RL, NDL,
473-
NDL, NL, NL, RDR, RDR, NDR, NDR, RL, RL, NDL, NDL, NL, NL, RDR, RDR, NDR,
474-
NDR, RL, RL, NDL, NU, NR, NR,
475-
NR, NR, NR, NR, RL, RU, RR, RR, RR, RR, NDR, NDR, RDR, RDR, NL, RDL, RDL,
476-
RL, RL, NDR, NDR, RDR, RDR, NL, NL, RDL, RDL, RL, RL, NDR, NDR, RDR, RD,
477-
RDR, RL, RU, RDR, RD, RR, RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR,
478-
RDR, NDR, NDR, RL, NDL, NDL, NL, NL, RDR, RDR, NDR, NDR, RL, RL, NDL, NDL,
479-
NL, NL, RDR, RDR, NDR, NDR, RL, RL, NDL, NU, NR, NR, NR, NR, NR, NR, RL, RU,
480-
RR, RR, RR, RR, NDR, NDR, RDR, RDR, NL, RDL, RDL, RL, RL, NDR, NDR, RDR,
481-
RDR, NL, NL, RDL, RDL, RL, RL, NDR, NDR, RDR, RD, RDR, RL, RU, RDR, RD, RR,
482-
RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR, NDR, RL, NDL, NL, NL, RDR,
483-
NDR, RL, RL, NDL, NL, NL, RDR, NDR, NU, NR, NR, NR, NR, NR, NR, RL, RL, RL,
484-
RU, RR, RR, RR, RR, NDR, RDR, NL, RDL, RL, RL, NDR, RDR, NL, NL, RDL, RL,
485-
RL, NDR, RDR, RD, RR, RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR, NDR,
486-
RL, NDL, NL, NL, RDR, NDR, RL, RL, NDL, NL, NL, RDR, NDR, NU, NR, NR, NR,
487-
NR, NR, NR, RL, RL, RL, RU, RR, RR, RR, RR, NDR, RDR, NL, RDL, RL, RL, NDR,
488-
RDR, NL, NL, RDL, RL, RL, NDR, RDR, RU, RL, RL, RL, RL, RL, RU, RU, RU, NL, NL,
489-
NL, NU, NL, NL, NL, NL, NL, NU, NU, RDU, NDU, NR, ND, RD, RR, RDU, RDU, NDU,
490-
NDU, NL, ND, RD, RL, RDU, RDU, NDU, NDU, PR, PR, PDD, PDD, PDD, RDD, RDD,
491-
RDD, PD, PR, PR, PR, PU, PR, PR, PU, PL, ND, ND, NR, NR, NR, NU, NR, NR, NU,
492-
PDR, PU, NL, RD, RD, RD, RR, RR, RR, RU, RR, RR!
493-
428+
1. PD, BL, BD, BdD, BL, RL
429+
2. PD, BD, BL, BdD, BL, RL
430+
3. NdL, PD, BD, RdL, RU, PdU, RdL2, NU, NdR2, PdD
431+
4. PdL, PR, PD, BD, NR2, PD2, PR, NR, PR, RU, RdD, BdD
432+
5. BdR, NU, NR, PR, NU, RU, BL, BD, RL, BdR, RdU2, RD, RdU, BdL, BL2, BdU
433+
6. PdL, BdU, RdU, PR, NR, RL, BD, RL, RU, RL, RdU2, PR, PdD, BL, PdD, BdL, BL
434+
7. NdD, PdD, PR, BL2, BdL2, PdU2, BR, BdD2, PR, PD, NU, NR2, RL
435+
8. NR, NU, RU, RL, NdL, RdL, RU, PdU, RdL2, NL, NU, NdR2, PdD, PR2, BL
436+
9. RdD, PR, RU, RL2, BD, RU, RR, RdR2, BD, BdL2, NU, BD, RdR, NdR, RdR, NdR, BR,
437+
BU, NdL, RdL, NdL, RdL, NU, NR, RL
438+
10. RdD, NR, NU, NR, NdR2, RU, NR, RU, RdL2, RL, BD, NdR2, BD, BdL2, RD, BL, RL,
439+
BdD, NdL, BU, RdD, BdL, RU, NU, NL
440+
11. NdL, RdD, BdD, NR, PD2, PR, PdD2, PU, PR, PdD, PU, PL, PdD, NdR, BD, PR,
441+
PdU, RU, RL, RU, RdD, RR, RdD, RL, RU, BdD
442+
12. RdR, NR2, NdR, PD, PR2, PdU, PR, NR, NU, PR, NU, NdR, ND, NL, NdR, NU, RL,
443+
NdR, BdD, ND, NdR, BdD, RU, RdU, NdL, PdR, NdL
444+
13. BdU, PR, BD, BL3, BdU, PR, PdD, PD, BD, PD, BD, PL, BD, PL, NdL, PD, NdR,
445+
PR, NR, RL, PR, NR
446+
14. PdU, NR2, NdD, PD, PR, PD, PR, RL2, RU, RdL, NU, RU, BL, RR, RU, RdU, RU,
447+
BL, BdD, BD, RD, BL, RD, BD, RL
448+
15. NR, PR, PD, PR, PU, PR, PD, PR, PU, PR, RL, BD2, BdR, PdD, BL, BD, BL, BdR,
449+
BD, BL, PdD, BdR, BD, PdD, RdR, PdD, RL, RdD, PL, RdU, BL, RU, BL, PL, BdD,
450+
RL, BU, PL, RL, BL
451+
16. NdL, BdU, NR, NU, NdL, PD3, PR, PdD, BD, BL, BdU, BD, BL, BdU, BD, BL3, BdD,
452+
BD, BR, NR, BR, BU, BdR3, BD2, PdD, NR, PdU, NR, ND, PU, PR, ND, PD, NR, PD,
453+
RU, RdD, RL2, BdD, BL2
454+
17. NU, NR, NdD, NR, NdD, NU, NR, NU, NR, NdD, NL, NdD, NU, NR, NdD, RdL, RU,
455+
RdL, RR, RD, NL, NU, NL, ND, NL, NdD, NU, NR, NdD, NU, NR, NdD, RdL, RU,
456+
RdL, RR, RD, RdL, RU, RdL, RR, RD, RdL, RL2, RU3, NdU, NR, NdU2, NU, NR2,
457+
NU, BdU, BD, NdU, NL2, NU, NL, ND2, BL, BD, BL, BU, BL, BD, BdU, BL, BdU2,
458+
ND, NL, NdU2, NU, NL, ND, RdL, NdD, ND, NdL, RD, RdR, NU2, RR, RU, RdU2, BD
459+
18. RU2, RdR, RL, RD2, RL, RU, RL2, RU, RdR, RR2, RD2, RL, RU, RL2, RdU, BD3,
460+
BdR, BL, BU, BL, BU, BL, BD2, BdR, RdU, RL, NR, NU, NR, ND, NR, NU2, NL2,
461+
NdL, ND2, NR, NU, NR, ND, NR, NU2, NdL, RdD, RR, RdD, RU, RL, RdU, RU2, RL,
462+
RdU, NU, NdU, NL2, NdL, PD2, NdR, PR, PU, NR2, NdD, RdD, RR, RD2, BdL, BL
463+
19. PdL, PR, PD5, PdL, NU, PdR, PU2, PR2, NL, NU2, NdL, PdL, PL, PD, PR3, NR,
464+
ND, NR, NdL, PdL, NR, NdR, PR, NdL, PdL, NL2, NU, NR, NU3, NL, PL4, PU, PR,
465+
PU3, NdR, PR4, NR4, BdR, NdR, PD, PR, NR, ND, NdR, ND, NL2, ND, NdL, PL,
466+
PdL, BL, BD, PdR, PD, PL2, PU, PdD, NR, NdD, PR2, NU, NR, BL, BD, RU2
467+
20. NU, NR6, RL7, RU, RR4, NdR, RdR, NL, RdL, RL2, NdR, RdR, NL2, RdL, RL2, NdR,
468+
RdR, RD, RR5, NL3, ND, NR3, RdR2, NdR2, RL, NdL2, NL2, RdR2, NdR2, RL2,
469+
NdL2, NL2, RdR2, NdR2, RL2, NdL, NU, NR6, RL, RU, RR4, NdR2, RdR2, NL, RdL2,
470+
RL2, NdR2, RdR2, NL2, RdL2, RL2, NdR2, RdR, RD, RdR, RL, RU, RdR, RD, RR5,
471+
NL3, ND, NR3, RdR2, NdR2, RL, NdL2, NL2, RdR2, NdR2, RL2, NdL2, NL2, RdR2,
472+
NdR2, RL2, NdL, NU, NR6, RL, RU, RR4, NdR2, RdR2, NL, RdL2, RL2, NdR2, RdR2,
473+
NL2, RdL2, RL2, NdR2, RdR, RD, RdR, RL, RU, RdR, RD, RR5, NL3, ND, NR3, RdR,
474+
NdR, RL, NdL, NL2, RdR, NdR, RL2, NdL, NL2, RdR, NdR, NU, NR6, RL3, RU, RR4,
475+
NdR, RdR, NL, RdL, RL2, NdR, RdR, NL2, RdL, RL2, NdR, RdR, RD, RR5, NL3, ND,
476+
NR3, RdR, NdR, RL, NdL, NL2, RdR, NdR, RL2, NdL, NL2, RdR, NdR, NU, NR6,
477+
RL3, RU, RR4, NdR, RdR, NL, RdL, RL2, NdR, RdR, NL2, RdL, RL2, NdR, RdR, RU,
478+
RL5, RU3, NL3, NU, NL5, NU2, RdU, NdU, NR, ND, RD, RR, RdU2, NdU2, NL, ND,
479+
RD, RL, RdU2, NdU2, PR2, PdD3, RdD3, PD, PR3, PU, PR2, PU, PL, ND2, NR3, NU,
480+
NR2, NU, PdR, PU, NL, RD3, RR3, RU, RR2!
481+
494482
## Adding Donimoes Solutions
495483
Here are the solutions to the Adding Donimoes problems. For each step, move the
496484
listed domino left, right, up, or down. Adding moves contain the domino

‎docs/new_rules.pdf

19 Bytes
Binary file not shown.

‎mirror.py

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import random
22
import typing
3+
from itertools import groupby
34
from sys import maxsize
45

56
from domino_puzzle import Board, BadPositionError, Domino, BoardGraph, Cell, GraphLimitExceeded
@@ -87,7 +88,7 @@ def move_domino(self, domino: Domino, dx, dy):
8788
raise BadPositionError('Cannot move a domino with no markers on it.')
8889
board: Board = domino.head.board
8990
direction_name = domino.describe_direction(dx, dy).upper()
90-
move = f'{marker}D{direction_name}'
91+
move = f'{marker}d{direction_name}'
9192
original_markers = board.markers.copy()
9293
try:
9394
if head_marker:
@@ -173,6 +174,17 @@ def _random_init(self, init_params):
173174
return dict(start=board.display(), max_pips=max_pips)
174175

175176

177+
def group_moves(solution_moves):
178+
terms = []
179+
for move, repeats in groupby(solution_moves):
180+
repeat_count = sum(1 for _ in repeats)
181+
if repeat_count > 1:
182+
move += str(repeat_count)
183+
terms.append(move)
184+
summary = ', '.join(terms)
185+
return summary
186+
187+
176188
class MirrorFitnessCalculator:
177189
def __init__(self, target_length=None, size_limit=10_000):
178190
self.target_length = target_length
@@ -229,7 +241,8 @@ def calculate(self, problem):
229241
average_choices = graph.get_average_choices(solution_nodes)
230242
fitness -= max_choices*10
231243
fitness -= average_choices
232-
self.summaries.append(', '.join(solution_moves))
244+
summary = group_moves(solution_moves)
245+
self.summaries.append(summary)
233246
self.details.append(
234247
f'{board.width}x{board.height}: {len(solution_moves)} moves, '
235248
f'max {max_choices}, avg {average_choices}, '

‎rules_check.py

+2
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ def check_mirror(state, heading):
105105
20. 8x7: 393 moves
106106
"""
107107
n = heading.split(' ')[-1]
108+
if int(n) >= 17:
109+
return ''
108110
size_limit = 1_000_000
109111
fitness_calculator = MirrorFitnessCalculator(size_limit=size_limit)
110112
problem = MirrorProblem(dict(start=state.text, max_pips=6))

‎solution_check.py

+3-29
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import re
22

33
from domino_puzzle import Board
4-
from mirror import add_start_markers, MirrorGraph
4+
from mirror import add_start_markers, MirrorGraph, group_moves
55

66

77
def main():
@@ -11,7 +11,7 @@ def main():
1111
1 2 1
1212
"""
1313
solution = """\
14-
RDD, BL, RDU
14+
RdD, BL, RdU
1515
"""
1616
start_moves = re.split(r',\s*', solution.strip())
1717
moves = start_moves[:]
@@ -34,33 +34,7 @@ def main():
3434
if not board.are_markers_connected:
3535
raise ValueError(f'Not solved after all {len(start_moves)} moves.')
3636
print(f'Solved after {len(start_moves)} moves.')
37+
print(group_moves(start_moves))
3738

3839

3940
main()
40-
41-
"""
42-
19.
43-
20. NU, NR, NR, NR, NR, NR, NR, RL, RL, RL, RL, RL, RL, RL, RU, RR, RR, RR, RR,
44-
NDR, RDR, NL, RDL, RL, RL, NDR, RDR, NL, NL, RDL, RL, RL, NDR, RDR, RD, RR,
45-
RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR, RDR, NDR, NDR, RL, NDL,
46-
NDL, NL, NL, RDR, RDR, NDR, NDR, NDR, RL, NDL, NDL, NL, NL, RDR, RDR, NDR,
47-
NDR, RL, RL, NDL, NDL, NL, NL, RDR, RDR, NDR, NDR, RL, RL, NDL, NU, NR, NR,
48-
NR, NR, NR, NR, RL, RU, RR, RR, RR, RR, NDR, NDR, RDR, RDR, NL, RDL, RDL,
49-
RL, RL, NDR, NDR, RDR, RDR, NL, NL, RDL, RDL, RL, RL, NDR, NDR, RDR, RD,
50-
RDR, RL, RU, RDR, RD, RR, RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR,
51-
RDR, NDR, NDR, RL, NDL, NDL, NL, NL, RDR, RDR, NDL, NDL, RL, RL, NDL, NDL,
52-
NL, NL, RDR, RDR, NDR, NDR, RL, RL, NDL, NU, NR, NR, NR, NR, NR, NR, RL, RU,
53-
RR, RR, RR, RR, NDR, NDR, RDR, RDR, NL, RDL, RDL, RL, RL, NDR, NDR, RDR,
54-
RDR, NL, NL, RDL, RDL, RL, RL, NDR, NDR, RDR, RD, RDR, RL, RU, RDR, RD, RR,
55-
RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR, NDR, RL, NDL, NL, NL, RDR,
56-
NDR, RL, RL, NDL, NL, NL, RDR, NDR, NU, NR, NR, NR, NR, NR, NR, RL, RL, RL,
57-
RU, RR, RR, RR, RR, NDR, RDR, NL, RDL, RL, RL, NDR, RDR, NL, NL, RDL, RL,
58-
RL, NDR, RDR, RD, RR, RR, RR, RR, RR, NL, NL, NL, ND, NR, NR, NR, RDR, NDR,
59-
RL, NDL, NL, NL, RDR, NDR, RL, RL, NDL, NL, NL, RDR, NDR, NU, NR, NR, NR,
60-
NR, NR, NR, RL, RL, RL, RU, RR, RR, RR, RR, NDR, RDR, NL, RDL, RL, RL, NDR,
61-
RDR, NL, NL, RDL, RL, RL, NDR, RDR, RU, RL, RL, RL, RL, RL, RU, RU, NL, NL,
62-
NL, NU, NL, NL, NL, NL, NL, NU, NU, RDU, NDU, NR, ND, RD, RR, RDU, RDU, NDU,
63-
NDU, NL, ND, RD, RL, RDU, RDU, NDU, NDU, PR, PR, PDD, PDD, PDD, RDD, RDD,
64-
RDD, PD, PR, PR, PR, PU, PR, PR, PU, PL, ND, ND, NR, NR, NR, NU, NR, NR, NU,
65-
PDR, PU, NL, RD, RD, RD, RL, RL, RL, RU, RR, RR!
66-
"""

‎test_mirror.py

+37-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from domino_puzzle import Board, GraphLimitExceeded
2-
from mirror import MirrorGraph
2+
from mirror import MirrorGraph, MirrorProblem, MirrorFitnessCalculator
33

44

55
def test_generate_moves():
@@ -15,7 +15,7 @@ def test_generate_moves():
1515
board = Board.create(start_state, border=1)
1616
graph = MirrorGraph()
1717
expected_moves = {
18-
('PDR', '''\
18+
('PdR', '''\
1919
0|0 1|2 x
2020
2121
B|1 x 0|P
@@ -24,7 +24,7 @@ def test_generate_moves():
2424
---
2525
B1P2
2626
''', None, 2),
27-
('BDL', '''\
27+
('BdL', '''\
2828
x 0|0 1|2
2929
3030
B|1 x 0|P
@@ -77,7 +77,7 @@ def test_board_stays_connected():
7777
board = Board.create(start_state, border=1)
7878
graph = MirrorGraph()
7979
expected_moves = {
80-
('NDR', '''\
80+
('NdR', '''\
8181
1|N x x
8282
8383
3|4 5|P
@@ -117,7 +117,7 @@ def test_markers_block_each_other():
117117
board = Board.create(start_state, border=1)
118118
graph = MirrorGraph()
119119
expected_moves = {
120-
('PDR', '''\
120+
('PdR', '''\
121121
0|0 1|0 x
122122
123123
B|1 x 0|P
@@ -126,7 +126,7 @@ def test_markers_block_each_other():
126126
---
127127
N2B1P2
128128
''', None, 4),
129-
('BDL', '''\
129+
('BdL', '''\
130130
x 0|0 1|0
131131
132132
B|1 x 0|P
@@ -135,7 +135,7 @@ def test_markers_block_each_other():
135135
---
136136
N2B1P2
137137
''', None, 5),
138-
('NDR', '''\
138+
('NdR', '''\
139139
0|0 1|0 x
140140
141141
B|1 0|P x
@@ -190,7 +190,7 @@ def test_domino_moves_both_markers():
190190
board = Board.create(start_state, border=1)
191191
graph = MirrorGraph()
192192
expected_moves = {
193-
('RDU', '''\
193+
('RdU', '''\
194194
x x x B
195195
-
196196
2 0|1 R
@@ -285,3 +285,32 @@ def test_calculate_heuristic():
285285
heuristic = graph.calculate_heuristic(board)
286286

287287
assert heuristic == expected_heuristic
288+
289+
290+
def test_fitness_calculator():
291+
start_state = '''\
292+
1 1 0
293+
- - -
294+
0 1 0
295+
'''
296+
problem = MirrorProblem(dict(start=start_state, max_pips=1))
297+
calculator = MirrorFitnessCalculator()
298+
calculator.calculate(problem)
299+
300+
summaries = calculator.format_summaries()
301+
details = calculator.format_details()
302+
assert summaries == 'PR, PD'
303+
assert details == '3x2: 2 moves, max 9, avg 5.0, 15 states'
304+
305+
306+
def test_repeated_moves_in_summary():
307+
start_state = '''\
308+
2|2 0 2
309+
- -
310+
1|0 0 1
311+
'''
312+
problem = MirrorProblem(dict(start=start_state, max_pips=2))
313+
calculator = MirrorFitnessCalculator()
314+
calculator.calculate(problem)
315+
316+
assert calculator.format_summaries() == 'PR, NR2, RdU, NdU'

0 commit comments

Comments
 (0)
Please sign in to comment.