RosettaCodeData/Task/24-game/Yabasic/24-game-2.basic
2023-07-01 13:44:08 -04:00

81 lines
1.7 KiB
Text

do
clear screen
n$=""
for i=1 to 4
n$=n$+str$(int(ran(9)+1))
next i
print at(35,0) "24 GAME\n"
print "Combine numbers and operators for obtain 24."
print "Allowed characters: ";
i$=n$+"+-*/()"
for i=1 to 10
print mid$(i$,i,1)," ";
next i
print "[nothing to end program]\n"
label accept
p$=""
i$=n$+"+-*/()"
print at(0,4);:input "Enter the formula: " f$
if f$="" end
for i=1 to len(f$)
c$=mid$(f$,i,1)
switch c$
case " ": f$=left$(f$,i-1)+right$(f$,len(f$)-i): break
case "+":case "-":case "*":case "/": p$=p$+"o": break
case "(":case ")": p$=p$+c$: break
case mid$(i$,1,1): p$=p$+"n": mid$(i$,1,1)=" ": break
case mid$(i$,2,1): p$=p$+"n": mid$(i$,2,1)=" ": break
case mid$(i$,3,1): p$=p$+"n": mid$(i$,3,1)=" ": break
case mid$(i$,4,1): p$=p$+"n": mid$(i$,4,1)=" ": break
default: message(" = Invalid argument! "): break
end switch
if f$="" goto accept
next i
restore
for i=1 to 11
read t$
if t$=p$ break
next i
if t$<>p$ then
message(" = Bad construction! ")
goto accept
end if
let r=eval(f$)
print "\n",f$," = ",r," ";
if r<>24 then
message(" = Wrong! ")
goto accept
else
message(" = Correct! ")
pause 5
end if
loop
DATA "nononon"
DATA "(non)onon"
DATA "nono(non)"
DATA "no(no(non))"
DATA "((non)on)on"
DATA "no(non)on"
DATA "(non)o(non)"
DATA "no((non)on)"
DATA "(nonon)on"
DATA "(no(non))on"
DATA "no(nonon)"
sub message(m$)
print at(0,7) f$,m$
beep: beep: beep
pause 1
print at(19,4) " "
f$=""
end sub
sub eval(c$)
static linea
linea=linea+1
c$="sub s"+str$(linea+1000000,"#######")+"():return "+c$+":end sub"
compile c$
return execute(mid$(c$,5,8))
end sub