月面基地が大変なことになって脱出ポッド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)]