RosettaCodeData/Task/24-game/TUSCRIPT/24-game.tu
2013-04-11 11:14:19 -07:00

73 lines
1.3 KiB
Turing

$$ MODE TUSCRIPT
BUILD X_TABLE blanks = ":': :"
SECTION game
operators="*'/'+'-'(')",numbers=""
LOOP n=1,4
number=RANDOM_NUMBERS (1,9,1)
numbers=APPEND(numbers,number)
ENDLOOP
SET allowed=APPEND (numbers,operators)
SET allowed=MIXED_SORT (allowed)
SET allowed=REDUCE (allowed)
BUILD S_TABLE ALLOWED =*
DATA '{allowed}'
SET checksum=DIGIT_SORT (numbers)
printnumbers=EXCHANGE (numbers,blanks)
printoperat=EXCHANGE (operators,blanks)
PRINT "Your numbers ", printnumbers
PRINT "Use only these operators ", printoperat
PRINT "Enter an expression that equates to 24"
PRINT "Enter 'l' for new numbers"
PRINT "Your 4 digits: ",printnumbers
DO play
ENDSECTION
SECTION check_expr
SET pos = VERIFY (expr,allowed)
IF (pos!=0) THEN
PRINT "wrong entry on position ",pos
DO play
STOP
ELSE
SET yourdigits = STRINGS (expr,":>/:")
SET yourchecksum = DIGIT_SORT (yourdigits)
IF (checksum!=yourchecksum) THEN
PRINT/ERROR "wrong digits"
DO play
STOP
ELSE
CONTINUE
ENDIF
ENDIF
ENDSECTION
SECTION play
LOOP n=1,3
ASK "Expression {n}": expr=""
IF (expr=="l") THEN
RELEASE S_TABLE allowed
PRINT "Your new numbers"
DO game
ELSEIF (expr!="") THEN
DO check_expr
sum={expr}
IF (sum!=24) THEN
PRINT/ERROR expr," not equates 24 but ",sum
CYCLE
ELSE
PRINT "BINGO ", expr," equates ", sum
STOP
ENDIF
ELSE
CYCLE
ENDIF
ENDLOOP
ENDSECTION
DO game