The following are the valid paths:
aknboivtjhuw
akntw
aknvfhusigw
aknvfhuw
acpfiorhukntw
acpfiorhuw
acpjgorhukntw
acpjgorhuw
acprbdqgtvfhuw
The shortest is akntw (4 moves), and the longest is acprbdqgtvfhuw (13 moves).
DECLARE SUB move ()
DIM SHARED x, y, h$, b$(5, 5), hx(25), hy(25), hdx(25), hdy(25), mSize
DATA a,b,c,d,e, f,g,h,i,j, k,l,m,n,"-","-",o,p,q,r,s,t,u,v,w
FOR r = 1 TO 5: FOR c = 1 TO 5
READ b$(r, c)
PRINT b$(r, c);
NEXT: PRINT : NEXT
PRINT
x = 1: y = 1: h$ = "a": hx(1) = 1: hy(1) = 1
hdx(1) = 0: hdy(1) = 0
mSize = 2: move
END
SUB move
mNo = LEN(h$)
FOR dx = -1 TO 1
FOR dy = -1 TO 1
IF dx <> 0 OR dy <> 0 THEN
IF dx <> -hdx(mNo) OR dy <> -hdy(mNo) THEN
newX = hx(mNo) + dx * mSize: newY = hy(mNo) + dy * mSize
IF newX > 0 AND newX <= 5 AND newY > 0 AND newY <= 5 THEN
IF INSTR(h$, b$(newY, newX)) = 0 THEN
x1 = hx(mNo) + dx: y1 = hy(mNo) + dy
x2 = hx(mNo) + 2 * dx: y2 = hy(mNo) + 2 * dy
IF b$(y1, x1) <> "-" AND b$(y2, x2) <> "-" AND b$(newY, newX) <> "-" THEN
mNo = mNo + 1
mSize = 5 - mSize
h$ = h$ + b$(newY, newX)
hx(mNo) = newX: hy(mNo) = newY
hdx(mNo) = dx: hdy(mNo) = dy
IF b$(newY, newX) = "w" THEN
PRINT h$
ELSE
move
END IF
h$ = LEFT$(h$, LEN(h$) - 1)
mSize = 5 - mSize
mNo = mNo - 1
END IF
END IF
END IF
END IF
END IF
NEXT
NEXT
END SUB
From the Page-A-Day 2009 Mensa 365 Brain Puzzlers Calendar, for Thursday Jan. 1. Workman Publishing Co., by Dr. Abbie F. Salny, Mark Danna and Fraser Simpson.
|