パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

月面脱出計画 14手詰めを解く

2022-07-20 | 2日でPython3

月面基地が大変なことになって脱出ポッドXを発射位置に動かさないとならない

その惑星の月は慣性が低いようでちょっと押すと障害物がない限り基地の外に飛び出してしまう

そこで障害物をうまく活用して、最小手数の動かし方と脱出寸前の月面基地の状態を表示する問題

 

最大14手までの問題があって

将棋の詰将棋5手ぐらい(1999年頃)しか作ったことのない私では無理と最初にコメント

で10手と逃げの一手を書き込んでから作成しているのが少し情けない

 

18行目最初の:をつけ忘れただけであやうく宇宙の塵になる所でした

5,11,17,19,32が探査の跡です

14手解けたのはうれしいかも

 

 

ペラっと干した版

import sys
#目標10手詰め
def ep(*t):print(t,file=sys.stderr)
def move(bd,pod,d):
#ep("move",pod,d,bd)
p0=bd.find(pod)
p=p0
x,y=p%5,p//5
dx,dy,dp=[(0,1,5),(-1,0,-1),(1,0,1),(0,-1,-5)]["DLRU".find(d)]
for i inrange(5):
#ep(x,y,p,p+dp,bd)
x+=dx
y+=dy
if x<0or x>4or y<0or y>4:return""
if bd[p+dp]!=".":
bd=bd[:p0]+"."+bd[p0+1:]
#ep("bd1",bd)
bd=bd[:p]+pod+bd[p+1:]
#ep("bd2",bd)
return bd
p+=dp
return""
bd="".join(input() for i in range(5))
pods="".join(c for c in "ABCDEX" if bd.find(c)>=0)
sp=[(bd,"")]
use=[bd]
while True:
bd,te = sp.pop(0)
for pod in pods:
for d in"DLRU":
nbd=move(bd,pod,d)
#ep(nbd)
if nbd!=""and nbd notin use:
nte=te+" "+pod+d
if nbd.find("X")==12:
print(nte[1:])
print()
for y inrange(5):
print(nbd[y*5:y*5+5])
sys.exit()
use+=[nbd]
sp+=[(nbd,nte)]

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。