Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docs/source/src.ch07.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@ src.ch07.c1\_breed\_rats module
:undoc-members:
:show-inheritance:

src.ch07.c2\_safe\_cracker module
---------------------------------

.. automodule:: src.ch07.c2_safe_cracker
:members:
:undoc-members:
:show-inheritance:


Module contents
---------------
Expand Down
99 changes: 99 additions & 0 deletions src/ch07/c2_safe_cracker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
"""Use hill-climbing algorithm to solve a lock combination.

Solve a lock combination by randomly changing a tumbler's values one
by one and noting whether the safe had a response. If so, lock the
tumbler at that value and continue randomly changing tumbler values.

Previously, a locked tumbler can still be changed, but the safe wouldn't
respond, so the change would be discarded. This improves upon the algorithm by
removing the locked tumbler from the pool of tumblers to randomly change.

"""
import time
import random


def compare(combo: list, attempt: list) -> int:
"""Compare items in two lists and count number of matches.

Compare each tumbler in **combo** with **attempt** and return
the number of matches.

Args:
combo (list): Integers of safe combination.
attempt (list): Integers of guessed safe combination.

Returns:
Number of tumbler matches between **combo** and **attempt**.

"""
return sum(1 for i, j in zip(combo, attempt) if i == j)


def crack_safe(combo: str) -> tuple:
"""Crack a safe combination with a hill-climbing algorithm.

Solve a lock combination by randomly changing a tumbler's values one
by one and noting whether the safe had a response. If so, lock the
tumbler at that value, remove it from the pool of tumblers, and
continue randomly changing tumbler values.

Args:
combo (str): String of numbers representing combination of safe.

Returns:
Tuple with string of solved combination and number of attempts.

"""
# Convert combo to list.
combo = [int(i) for i in combo]

# Make initial guess and compare.
best_guess = [0] * len(combo)
best_guess_match = compare(combo, best_guess)

count = 0
tumblers = list(range(len(combo)))

# Evolve guess.
while best_guess != combo:
# Crossover.
guess = best_guess.copy()

# Mutate.
lock_tumbler = random.choice(tumblers)
guess[lock_tumbler] = random.randint(0, len(combo) - 1)

# Compare and select.
guess_match = compare(combo, guess)
if guess_match > best_guess_match:
best_guess = guess.copy()
best_guess_match = guess_match
tumblers.remove(lock_tumbler)
print(guess, best_guess)
count += 1
return ''.join([str(i) for i in best_guess]), count


def main():
"""Demonstrate safe cracker.

Use default combination to demonstrate :func:`crack_safe` and display time
(in seconds) it took to run.

"""
start_time = time.time()

combination = '6822858902'
print(f'Combination: {combination}')
guess, count = crack_safe(combination)
print(f'\nCracked! {guess} ')
print(f'in {count} tries!')

end_time = time.time()
duration = end_time - start_time
print(f'\nRuntime for this program was {duration:.5f} seconds.')


if __name__ == '__main__':
main()
127 changes: 127 additions & 0 deletions tests/data/ch07/main/safe_cracker.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
Combination: 6822858902
[0, 0, 0, 5, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 3, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 6, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 6, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 0, 3, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 7, 0, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 6, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 6, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 5, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 3, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 6, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 6, 0, 0, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 0, 1, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 1, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 7, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 5, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 8, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 0, 0, 7, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 8, 0, 7, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 9, 0, 0, 0, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 7, 0, 0, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 8, 0, 8, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[5, 0, 0, 0, 0, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 0, 7, 0, 0, 8, 0, 0, 2] [0, 0, 0, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 0, 0, 2] [0, 0, 2, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 2, 0, 0, 8, 8, 0, 0, 2] [0, 0, 2, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 2, 0, 9, 0, 8, 0, 0, 2] [0, 0, 2, 0, 0, 0, 8, 0, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 9, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 3, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 2, 2, 0, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 9, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 4, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 1, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 1, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 5, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 3, 2, 0, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 9, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 1, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 6, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 3, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 0, 0, 0, 8, 9, 1, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[0, 0, 2, 4, 0, 0, 8, 9, 0, 2] [0, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 0, 0, 0, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 3, 0, 0, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 7, 2, 0, 0, 0, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 0, 0, 4, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 0, 0, 0, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 3, 0, 0, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 0, 0, 9, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 0, 2, 0, 0, 0, 8, 9, 0, 2] [6, 0, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 0, 8, 9, 0, 2] [6, 8, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 4, 8, 9, 0, 2] [6, 8, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 3, 8, 9, 0, 2] [6, 8, 2, 0, 0, 0, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 6, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 4, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 8, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 6, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 9, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 5, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 6, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 6, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 8, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 9, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 4, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 3, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 7, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 1, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 9, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 4, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 9, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 3, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 5, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 2, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 4, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 8, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 1, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 9, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 5, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 4, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 4, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 1, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 0, 5, 8, 9, 0, 2] [6, 8, 2, 0, 0, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 3, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 8, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 9, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 4, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 8, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 6, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 3, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 4, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 6, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 6, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 8, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 7, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 8, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 7, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 7, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 3, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 7, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 7, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 7, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 4, 8, 5, 8, 9, 0, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 4, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 6, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 0, 8, 5, 8, 9, 6, 2] [6, 8, 2, 0, 8, 5, 8, 9, 0, 2]
[6, 8, 2, 2, 8, 5, 8, 9, 0, 2] [6, 8, 2, 2, 8, 5, 8, 9, 0, 2]

Cracked! 6822858902
in 121 tries!

Runtime for this program was 55545.00000 seconds.
110 changes: 110 additions & 0 deletions tests/data/ch07/safe_cracker.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
[0, 0, 0, 0, 0, 0, 0, 0, 0, 5] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 8, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 5] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 9] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 6, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 9, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 2] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 2, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 8, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 7, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 9, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 2, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 8, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 5, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 6, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 6, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 4, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 8, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 9, 0, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 4, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 8, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 5, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 0, 3, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 4, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 5, 4, 0, 0, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 0, 6, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 7, 0, 4, 0, 0, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 9, 0, 0, 0, 0, 0] [0, 0, 0, 4, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 4, 0, 0, 0, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 0, 1, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 0, 0, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 0, 6, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 0, 8, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 3, 0, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 0, 9, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 1, 0, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[0, 0, 0, 4, 0, 0, 0, 0, 0, 3] [0, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 0, 0, 0, 0, 3] [8, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 0, 0, 3, 0, 3] [8, 0, 0, 4, 0, 0, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 4, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 4, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 2, 0, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 3, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 8, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 2, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 8, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 8, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 5, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 9, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 8, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 0, 0, 8, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 2, 0, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 6, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 4, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 4, 0, 4, 0, 9, 0, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 0, 4, 0, 9, 9, 0, 0, 3] [8, 0, 0, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 0, 0, 0, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 0, 0, 7, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 2, 9, 0, 0, 0, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 0, 0, 7, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 0, 9, 0, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 2, 0, 0, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 0, 0, 0, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 4, 0, 0, 3] [8, 0, 7, 4, 0, 9, 0, 0, 0, 3]
[8, 0, 7, 4, 0, 9, 0, 2, 0, 3] [8, 0, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 2, 7, 4, 0, 9, 0, 2, 0, 3] [8, 0, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 4, 7, 4, 0, 9, 0, 2, 0, 3] [8, 0, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 0, 7, 4, 0, 9, 8, 2, 0, 3] [8, 0, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 2, 7, 4, 0, 9, 0, 2, 0, 3] [8, 0, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 7, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 7, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 2, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 7, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 3, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 4, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 3, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 7, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 6, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 7, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 9, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 3, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 3, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 8, 9, 0, 2, 0, 3] [8, 9, 7, 4, 0, 9, 0, 2, 0, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 9, 9, 0, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 0, 9, 9, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 0, 9, 5, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 3, 9, 0, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 7, 9, 0, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 4, 9, 0, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 0, 9, 6, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 0, 9, 0, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 0, 9, 4, 2, 1, 3] [8, 9, 7, 4, 0, 9, 0, 2, 1, 3]
[8, 9, 7, 4, 5, 9, 0, 2, 1, 3] [8, 9, 7, 4, 5, 9, 0, 2, 1, 3]
Loading