CLS

FOR i = 1 TO 8
a$(i) = CHR$(i + 96)
a(ASC(a$(i)) - 96) = i
b$(i) = RIGHT$(STR$(i), 1)
NEXT i

tabla:
LOCATE 2, 3: PRINT ""
FOR x1 = 4 TO 19
LOCATE 2, x1: PRINT "": LOCATE 1, x1: PRINT a$(INT((x1 - 2) / 2))
NEXT x1
LOCATE 2, 20: PRINT ""
FOR x2 = 3 TO 11
LOCATE x2, 20: PRINT "": LOCATE x2, 22: PRINT b$(11 - x2)
NEXT x2
LOCATE 11, 20: PRINT ""
FOR x3 = 19 TO 4 STEP -1
LOCATE 11, x3: PRINT "": LOCATE 12, x3: PRINT a$(INT((x3 - 2) / 2))
NEXT x3
LOCATE 11, 3: PRINT ""
FOR x4 = 10 TO 3 STEP -1
LOCATE x4, 3: PRINT "": LOCATE x4, 1: PRINT b$(11 - x4)
NEXT x4
FOR i = 1 TO 8: FOR j = 1 TO 8
IF (i + j) / 2 > INT((i + j) / 2) THEN LOCATE 11 - j, 2 * i + 2: PRINT ""
NEXT j: NEXT i
LOCATE 7, 10: PRINT "><"
FOR i = 4 TO 12 STEP 4
LOCATE 4, i: PRINT "()"
NEXT i
LOCATE 3, 18: PRINT "()"

jatszmalap:
 LOCATE 2, 25: PRINT "ͻ"
FOR x = 3 TO 12
 LOCATE x, 25: PRINT "  .               .               .            "
NEXT x
LOCATE 13, 25: PRINT "ͼ"
FOR i = 1 TO 60
j = 17 * INT((i - 1) / 20) + 26
k = INT((i - 1) / 2) + 1
l = k + 2 - 10 * INT((k - 1) / 10)
LOCATE l, j: PRINT RIGHT$(STR$(k), 2)
NEXT i

DIM lp$(57, 8): DIM l$(57): DIM c$(8, 8): DIM k(57): DIM kiv(57)
c$(1, 7) = "()": c$(3, 7) = "()": c$(5, 7) = "()": c$(8, 8) = "()"
c$(4, 4) = "><": d$(1) = "><": d$(3) = "()"
nx = 4: ny = 4: max = 8
u(1) = -1: u(2) = 1: u(3) = -1: u(4) = 1
v(1) = 1: v(2) = 1: v(3) = -1: v(4) = -1
t(0) = -1: t(1) = 1
n = 1: k(1) = 0

OPEN "allas.dat" FOR INPUT AS #1 LEN = 570
tolt:
i = 1
meg:
INPUT #1, k$
IF k$ = "      " THEN GOTO indul
p$ = LEFT$(k$, 1): q$ = RIGHT$(k$, 1)
k$ = MID$(k$, 2, 4)
lp$(n, i) = k$
FOR j = 1 TO 4
f$ = MID$(k$, j, 1)
IF VAL(f$) > 0 THEN d(j) = VAL(f$) ELSE d(j) = a(ASC(f$) - 96)
NEXT j
IF p$ = "*" THEN kiv(n) = i: l$(n) = k$ ELSE GOTO ugro
c$(d(1), d(2)) = ""
rol$ = "  ": ra$ = d$((-1) ^ n + 2)
brol = d(1): szrol = d(2): bre = d(3): szra = d(4)
GOSUB kiir
IF INT(n / 2) = n / 2 THEN c$(d(3), d(4)) = "()": GOTO ugro
c$(d(3), d(4)) = "><": nx = d(3): ny = d(4)
ugro: IF q$ = "*" THEN k(n) = i: n = n + 1: GOTO tolt
i = i + 1: GOTO meg

indul: BEEP
CLOSE #1

lepes:
van = 0
FOR j = 8 TO 1 STEP -1
FOR i = 1 TO 8
IF c$(i, j) = "()" THEN van = van + 1: vx(van) = i: vy(van) = j
IF van = 4 THEN GOTO kilep
NEXT: NEXT

kilep:
max = vy(1)
k(n) = 0
IF INT(n / 2) < n / 2 THEN r = 1: GOTO nyullep

vadaszlep:
FOR i = 1 TO 4
FOR j = 0 TO 1
x = vx(i) + t(j): y = vy(i) - 1
IF x = 0 OR x = 9 OR y = 0 THEN GOTO masik
IF c$(x, y) <> "" THEN GOTO masik
k(n) = k(n) + 1: lp$(n, k(n)) = a$(vx(i)) + b$(vy(i)) + a$(x) + b$(y)
masik: NEXT j
hova: NEXT i
kiv(n) = 1: GOTO ertekel

nyullep:
x = nx + u(r): y = ny + v(r)
IF x = 0 OR x = 9 OR y = 0 THEN GOTO merre
IF c$(x, y) <> "" THEN GOTO merre
k(n) = k(n) + 1: lp$(n, k(n)) = a$(nx) + b$(ny) + a$(x) + b$(y)
merre: IF r = 4 THEN kiv(n) = 1: GOTO ertekel
r = r + 1: GOTO nyullep

ertekel:
IF INT(n / 2) < n / 2 THEN baj = 0: GOTO mibaj
FOR i = 2 TO ny: FOR j = 1 TO 8
IF c$(j, i) = "()" AND i < ny THEN o = o + 1
IF o = 2 THEN o = 0: GOTO visszavesz
NEXT j: NEXT i
baj = 2
FOR h = 0 TO 1
x = nx + t(h): y = ny + 1
IF x <= 0 OR x >= 9 THEN baj = baj - 1: GOTO mas
IF c$(x, y) = "()" THEN baj = baj - 1: GOTO mas
FOR j = 1 TO 8 - y
FOR i = x - j TO x + j
IF i <= 0 OR i >= 9 THEN GOTO vizs
IF c$(i, y + j) <> "" THEN baj = baj - 1: GOTO mas
vizs: NEXT i
NEXT j
mas: NEXT h
IF baj > 0 THEN GOTO visszavesz
mibaj:
IF kiv(n) = k(n) + 1 THEN GOTO visszavesz

beiktat:
l$(n) = lp$(n, kiv(n))
brol = a(ASC(MID$(l$(n), 1, 1)) - 96): szrol = VAL(MID$(l$(n), 2, 1))
bre = a(ASC(MID$(l$(n), 3, 1)) - 96): szra = VAL(MID$(l$(n), 4, 1))
c$(bre, szra) = d$((-1) ^ n + 2): c$(brol, szrol) = ""
rol$ = "  ": ra$ = c$(bre, szra)
IF INT(n / 2) < n / 2 THEN nx = bre: ny = szra
GOSUB kiir
s$ = INKEY$: IF s$ <> "" THEN GOTO tarol
n = n + 1: k(n) = 0: GOTO lepes

visszavesz:
IF n = 1 THEN PRINT "vge!": SOUND 1000, 2: END
IF k(n) = 0 THEN GOTO visszalep
FOR i = 1 TO k(n)
lp$(n, i) = ""
NEXT i
visszalep: n = n - 1
brol = a(ASC(MID$(l$(n), 3, 1)) - 96): szrol = VAL(MID$(l$(n), 4, 1))
bre = a(ASC(MID$(l$(n), 1, 1)) - 96): szra = VAL(MID$(l$(n), 2, 1))
c$(bre, szra) = d$((-1) ^ (n) + 2)
c$(brol, szrol) = ""
ra$ = c$(bre, szra): rol$ = "  "
IF INT(n / 2) < n / 2 THEN nx = bre: ny = szra
IF INT(n / 2) = n / 2 AND szra > max THEN max = szra
l$(n) = "     "
GOSUB kiir
IF g = 1 THEN g = 0: GOTO bocs
g = 1: GOTO visszavesz

bocs:
kiv(n) = kiv(n) + 1
GOTO ertekel

kiir:
LOCATE 11 - szrol, 2 * brol + 2: PRINT rol$
LOCATE 11 - szra, 2 * bre + 2: PRINT ra$
p = 17 * INT((n - 1) / 20) + 26
q = p + 3 + 3.5 * ((-1) ^ n + 1)
r = INT((n - 1) / 2) + 1
s = r + 2 - 10 * INT((r - 1) / 10)
IF l$(n) <> "     " THEN x$ = LEFT$(l$(n), 2) + "-" + RIGHT$(l$(n), 2) ELSE x$ = l$(n)
LOCATE s, q: PRINT x$
RETURN
 
tarol:
OPEN "allas.dat" FOR OUTPUT AS #2 LEN = 570
FOR m = 1 TO n
FOR i = 1 TO k(m)
v$ = " " + lp$(m, i) + " "
IF i = kiv(m) THEN MID$(v$, 1, 1) = "*"
IF i = k(m) THEN MID$(v$, LEN(v$), 1) = "*"
IF v$ = "  " THEN GOTO vege
WRITE #2, v$
NEXT i
NEXT m

vege:
WRITE #2, "      "
CLOSE #2
END

