A programmable robotic mouse is placed at an intersection on a square grid, the borders of which are extendable as needed.
From its initial location the mouse moves one cell forward.
It turns right with its next move incrementing by 1.
This incremental process continues up to a certain constraint whereby the mouse resumes the process with a move of one space until that constraint is met again; continue this process until you either return to your starting position or you evidently will never return.
What generalisations can be made about how variations of the value of the constraint affect the path forced upon the mouse? |
|
Note:It will be necessary to test a range of constraining values.
(In reply to
re(4): No Subject - Constraint by nikki)
The following program follows nikki's 2nd program (the Fibonacci one):
CLS
c = 0
fprev = 0
fcurr = 1
temp = 0
x = 0: y = 0
dx = 0: dy = 1
PRINT x; y
' x is positive to the right
' y contrary to convention is positive to the bottom
' but this doesn't matter as left turns would work just as good
' as right turns.
DO
s = 0
c = fcurr
DO
s = s + 1
PRINT TAB(8); s; c
x = x + dx * s: y = y + dy * s
PRINT x; y
IF x = 0 AND y = 0 THEN END
dyNew = dx: dxNew = -dy
dy = dyNew: dx = dxNew
LOOP UNTIL s = c
temp = fcurr
fcurr = fprev + fcurr
fprev = temp
LOOP UNTIL x = 0 AND y = 0
Note however the bolded line above, which checks for a return to the origin within the inner loop, rather than the outer. It finds that indeed the mouse does land exactly on the starting point at step 9. The following was the output:
x y s c
0 0
1 1
0 1
1 1
-1 1
1 2
-1 0
2 2
1 0
1 3
1 1
2 3
-1 1
3 3
-1 -2
1 5
0 -2
2 5
0 0
Indeed, it's confirmed that on step 4 the mouse passes through the origin, from (-1,0) to (1,0).
A picture (till the mouse leaves the viewing area):
J K
F G
v wB C
r s x y
P Q
n o t u
L M
p j k q
m lH sIr
l f g m
q pD wE v
h b c i
u d tz AA z
d 78 e
i h Ex D
9 a 394 a
615 I B H
5 6
M F L
1 2
K J
X Y
O N
T U
S R
W V
0 Z
4 3
8 7
c b
g f
k j
o n
from
CLS
x = 20: y = 36
dirx = 0: diry = 1
amt = 1
lim = 1
s$ = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
mNo = 1
fprev = 0
fcurr = 1
lim = fcurr
DO
moveNo = moveNo + 1
LOCATE y - 16, x + 25: PRINT MID$(s$, mNo, 1);
DO: a$ = INKEY$: LOOP UNTIL a$ > "": IF a$ = CHR$(27) THEN EXIT DO
x = x + dirx * amt: y = y + diry * amt
IF x = 20 AND y = 36 THEN
ct = ct + 1: LOCATE 47, ct * 6: PRINT moveNo;
END IF
amt = amt + 1
IF amt > lim THEN
amt = 1
h = fcurr
fcurr = fcurr + fprev
fprev = h
lim = fcurr
REM
END IF
diryNew = dirx: dirxNew = -diry
diry = diryNew: dirx = dirxNew
mNo = mNo + 1
IF mNo > LEN(s$) THEN mNo = 1
LOOP
and the mouse visits start only on step 9 before leaving.
|
Posted by Charlie
on 2008-01-23 11:28:25 |