24-game: fixing invalid operator input handling in get-operator

locals-and-roots
Björn Lindqvist 2016-06-16 23:41:17 +02:00
parent eeaffb14b8
commit 1df34203e6
2 changed files with 15 additions and 8 deletions

View File

@ -1,6 +1,12 @@
USING: 24-game sequences tools.test ;
USING: 24-game io.streams.string kernel math sequences tools.test ;
IN: 24-game.tests
{ t } [ make-24 first4 makes-24? ] unit-test
{ f } [ (operators) "hello" find-operator ] unit-test
{ + } [ "+" [ (operators) get-operator ] with-string-reader ] unit-test
{ swap } [
"bad\ninput\nswap" [ (operators) get-operator ] with-string-reader
] unit-test

View File

@ -1,6 +1,6 @@
! Copyright © 2008 Reginald Keith Ford II
! 24, the Factor game!
USING: accessors backtrack combinators continuations formatting io
USING: accessors backtrack combinators continuations formatting fry io
kernel math prettyprint quotations random sequences shuffle ;
IN: 24-game
@ -38,13 +38,14 @@ CONSTANT: (operators) { + - * / rot swap q }
: operators ( array -- operators )
length 3 < [ \ rot (operators) remove ] [ (operators) ] if ;
: find-operator ( string operators -- word/f )
[ name>> = ] with find nip ;
: find-operator ( operators string -- word/f )
'[ name>> _ = ] find nip ;
: get-operator ( operators -- word )
dup "Operators: %u\n" printf flush
readln over find-operator dup
[ "Operator not found..." print get-operator ] unless nip ;
dup readln find-operator [ ] [
"Operator not found..." print get-operator
] ?if ;
: try-operator ( array -- array )
[ pprint nl ]