Skip to content

Instantly share code, notes, and snippets.

@yosshy
Last active August 14, 2021 04:32
Show Gist options
  • Save yosshy/e4caa177658f9e1e22765c22a4847961 to your computer and use it in GitHub Desktop.
Save yosshy/e4caa177658f9e1e22765c22a4847961 to your computer and use it in GitHub Desktop.
海外君の娘さんの朝のドリル solver
#!/usr/bin/env python
import sys
MAZE = [
"--------",
"-○○◎■□□ア",
"-□□×□△◎-",
"-■□□××△-",
"-○△◎□◎×-",
"-×◎×○○△-",
"イ◎◎△◎■○-",
"--ウ---エ-"
]
# マス目を進む
def walk(x, y, route):
if x < 0 or x > 7 or y < 0 or y > 7:
# 迷路の外にはみ出してはいけない
print(f"{route} → {(x, y)}")
print ("迷路からはみ出した")
return
mark = MAZE[y][x]
print(f"{route} → {(x, y, mark)}")
if mark == "-":
# --の部分を通ることはできない。
print ("迷路からはみ出した")
return
if (x, y, mark) in route:
# 同じますに2回進んでもムダ。
print("一度通った")
return
if mark == "○":
# ○の次は、下に1ます進む。
walk(x, y + 1, route + [(x, y, mark)])
elif mark == "△":
# △の次は、上に1ます進む。
walk(x, y - 1, route + [(x, y, mark)])
elif mark == "□":
# □の次は、右か左に2ます進む。
walk(x + 2, y, route + [(x, y, mark)])
walk(x - 2, y, route + [(x, y, mark)])
elif mark == "×":
# ×の次は、上か下に2ます進む。
walk(x, y - 2, route + [(x, y, mark)])
walk(x, y + 2, route + [(x, y, mark)])
elif mark == "◎":
# ◎の次は、左に1ます進む。
walk(x - 1, y, route + [(x, y, mark)])
elif mark == "■":
# 黒いますに進むことはできない。
print("進めない")
else:
# やじるしについた。
print(f"[{mark}]のやじるしから出る。")
sys.exit(0)
return
walk(1, 1, [])
python maze.py
[] → (1, 1, '○')
[(1, 1, '○')] → (1, 2, '□')
[(1, 1, '○'), (1, 2, '□')] → (3, 2, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×')] → (3, 0, '-')
迷路からはみ出した
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×')] → (3, 4, '◎')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎')] → (2, 4, '△')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△')] → (2, 3, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□')] → (4, 3, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×')] → (4, 1, '■')
進めない
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×')] → (4, 5, '○')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○')] → (4, 6, '◎')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎')] → (3, 6, '△')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△')] → (3, 5, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×')] → (3, 3, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□')] → (5, 3, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×')] → (5, 1, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□')] → (7, 1, 'ア')
[ア]のやじるしから出る。
[] → (1, 1, '○')
[(1, 1, '○')] → (1, 2, '□')
[(1, 1, '○'), (1, 2, '□')] → (-1, 2)
迷路からはみ出した
[(1, 1, '○'), (1, 2, '□')] → (3, 2, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×')] → (3, 4, '◎')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎')] → (2, 4, '△')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△')] → (2, 3, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□')] → (0, 3, '-')
迷路からはみ出した
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□')] → (4, 3, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×')] → (4, 5, '○')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○')] → (4, 6, '◎')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎')] → (3, 6, '△')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△')] → (3, 5, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×')] → (3, 7, '-')
迷路からはみ出した
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×')] → (3, 3, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□')] → (1, 3, '■')
進めない
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□')] → (5, 3, '×')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×')] → (5, 5, '○')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 5, '○')] → (5, 6, '■')
進めない
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×')] → (5, 1, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□')] → (3, 1, '◎')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎')] → (2, 1, '○')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○')] → (2, 2, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○'), (2, 2, '□')] → (0, 2, '-')
迷路からはみ出した
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○'), (2, 2, '□')] → (4, 2, '□')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○'), (2, 2, '□'), (4, 2, '□')] → (2, 2, '□')
一度通った
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○'), (2, 2, '□'), (4, 2, '□')] → (6, 2, '◎')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○'), (2, 2, '□'), (4, 2, '□'), (6, 2, '◎')] → (5, 2, '△')
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□'), (3, 1, '◎'), (2, 1, '○'), (2, 2, '□'), (4, 2, '□'), (6, 2, '◎'), (5, 2, '△')] → (5, 1, '□')
一度通った
[(1, 1, '○'), (1, 2, '□'), (3, 2, '×'), (3, 4, '◎'), (2, 4, '△'), (2, 3, '□'), (4, 3, '×'), (4,
5, '○'), (4, 6, '◎'), (3, 6, '△'), (3, 5, '×'), (3, 3, '□'), (5, 3, '×'), (5, 1, '□')] → (7, 1, 'ア')
[ア]のやじるしから出る。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment