Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
54
Task/24-game/PicoLisp/24-game.l
Normal file
54
Task/24-game/PicoLisp/24-game.l
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
(load "@lib/frac.l")
|
||||
|
||||
(de random4digits ()
|
||||
(setq Numbers (make (do 4 (link (rand 1 9)))))
|
||||
Numbers )
|
||||
|
||||
(de prompt ()
|
||||
(prinl
|
||||
"^JPlease enter a 'Lisp' expression (integer or fractional math) that equals 24,^J"
|
||||
"using (, ), frac, + or f+, - or f-, * or f*, / or f/, and " Numbers "^J"
|
||||
"(use each number only once). Enter . to quit." ) )
|
||||
|
||||
(de getinput ()
|
||||
(setq Expression (catch ’NIL (in NIL (read))))
|
||||
Expression )
|
||||
|
||||
(de checkexpression (Numbers Expression)
|
||||
(make
|
||||
(when (diff Numbers (fish num? Expression))
|
||||
(link "Not all numbers used.") )
|
||||
(when (diff (fish num? Expression) Numbers)
|
||||
(link "Using wrong number(s)."))
|
||||
(if (sub? "f" (pack Expression))
|
||||
(when (diff (fish sym? Expression) '(frac f+ f- f* f/))
|
||||
(link "Illegal operator(s). If fractional expression, must use frac, f+, f-, f*, f/ only.") )
|
||||
(when (diff (fish sym? Expression) '(+ - * /))
|
||||
(link "Using illegal operator(s).") ) ) ) )
|
||||
|
||||
(de instructions ()
|
||||
(prinl "Example 'Lisp' expression: (- (* 3 9) (+ 1 2))")
|
||||
(prinl
|
||||
"Example 'Lisp' fractional expression:^J"
|
||||
"(f- (f* (frac 3 1)(frac 9 1)) (f+ (frac 1 1)(frac 2 1)))" )
|
||||
(prinl
|
||||
"Use a fractional expression 'just for fun (as above)' OR if your solution^J"
|
||||
"would lose remainder value(s) otherwise (through integer division)." ) )
|
||||
|
||||
(de loopuntilquit ()
|
||||
(instructions)
|
||||
(loop
|
||||
(set 'Numbers (random4digits))
|
||||
(prompt)
|
||||
(set 'Expression (getinput))
|
||||
(if (= Expression ".") (prog (prinl "bye!") (bye)))
|
||||
(set 'Check (checkexpression Numbers Expression))
|
||||
(if (car Check)
|
||||
(mapcar prinl Check)
|
||||
(prog
|
||||
(set 'Evaluated (eval Expression))
|
||||
(if (or (= Evaluated 24) (= Evaluated (24 . 1)))
|
||||
(prinl "Congratulations!")
|
||||
(prinl "That evaluated to " Evaluated " Try again!") ) ) ) ) )
|
||||
|
||||
(loopuntilquit)
|
||||
Loading…
Add table
Add a link
Reference in a new issue