::xxxx$= "
@call yabasic %~s0 %*
@goto :eof
:mode=yab:"
'драконова ламана
input "" l
'генерацiя послiдовностi згинiв (rl):
a$=""
while (len(a$)<l)
a$=a$+"l"
for i=len(a$)-1 to 1 step -1
if mid$(a$,i,1)="r" then
a$=a$+"l"
else
a$=a$+"r"
endif
next i
wend
a$=left$(a$, l)
'?a$
'побудова ламаної в текстовому рядку з символiв псевдографiки:
' _
' (_/ \_)
' замiнити вiдносний поворот (rl) абсолютним напрямком (UDRL):
a$="R"+a$
directions$="RrD DrL LrU UrR RlU UlL LlD DlR"
for i=2 to len(a$)
mid$(a$,i,1)=mid$(directions$, instr(directions$, mid$(a$,i-1,2))+2, 1)
next
'?a$
vert$=" RU RD LU LD /RUR /LDL \RDR \LUL (LUR (LDR )RDL )RUL"
b$=" "+chr$(10)
h=1
w=1
row=0
col=0
for j=1 to len(a$)-1 step 2
m$=mid$(a$, j, 3)
v$=mid$(vert$, instr(vert$, m$)-1, 1)
mid$(b$, row*(w+1)+col+1, 1)="_"
on instr("RL", mid$(m$,1,1)) gosub gort, golt
if (mid$(m$,2,1)="D") gosub godn
mid$(b$, row*(w+1)+col+1, 1)=v$
if (mid$(m$,2,1)="U") gosub goup
on instr("RL", mid$(m$,3,1)) gosub gort, golt
rem ?b$
rem ?"***"
next
print b$
end
label goup:
if row>0 then
row=row-1: return
endif
h=h+1
b$=string$(w," ")+chr$(10)+b$
return
label godn:
row=row+1
if (row<h) return
h=h+1
b$=b$+string$(w," ")+chr$(10)
return
label gort:
col=col+1
if (col<w) return
lx$="": rx$=" "+chr$(10)
goto groww
label golt:
if col>0 then
col=col-1: return
endif
lx$=" ": rx$=chr$(10)
label groww:
res$=""
for i=1 to len(b$)-1 step w+1
res$=res$+lx$+mid$(b$, i, w)+rx$
next
b$=res$
w=w+1
return
sub string$(n,c$)
local k,s$
s$=""
for k=1 to n
s$=s$+c$
next
return s$
end sub