60 lines
1.4 KiB
Text
60 lines
1.4 KiB
Text
[ [] over times
|
|
[ over [] swap times
|
|
[ 2 random join ]
|
|
nested join ]
|
|
nip ] is makeboard ( n --> [ )
|
|
|
|
[ [] swap witheach [ not join ] ] is invert ( [ --> [ )
|
|
|
|
[ 2dup peek invert unrot poke ] is fliprow ( [ n --> [ )
|
|
|
|
[ dip transpose fliprow transpose ] is flipcolumn ( [ n --> [ )
|
|
|
|
[ dup
|
|
[ dup size dup * times
|
|
[ dup size random
|
|
2 random iff
|
|
fliprow
|
|
else flipcolumn ]
|
|
2dup != until ]
|
|
nip ] is mix ( [ --> [ )
|
|
|
|
[ say " "
|
|
dup size times
|
|
[ sp i^ char a + emit ]
|
|
witheach
|
|
[ cr sp i^ echo say ":"
|
|
witheach
|
|
[ sp echo ] ] ] is display ( [ --> )
|
|
|
|
[ cr $ "a..., or 0...: "
|
|
input $ "." join
|
|
trim 0 peek lower
|
|
2dup char a rot over +
|
|
within iff
|
|
[ nip char a -
|
|
' flipcolumn ]
|
|
done
|
|
2dup char 0 rot over +
|
|
within iff
|
|
[ nip char 0 -
|
|
' fliprow ]
|
|
done
|
|
drop again ] is getmove ( n --> n x )
|
|
|
|
[ 0 temp put
|
|
makeboard
|
|
dup mix
|
|
[ say "Moves: "
|
|
temp share echo cr
|
|
1 temp tally
|
|
2dup swap
|
|
say "Target" cr
|
|
display cr cr
|
|
say "Current" cr
|
|
display cr
|
|
dup size getmove do cr
|
|
2dup = until ]
|
|
2drop
|
|
temp take
|
|
say "Moves taken: " echo ] is flipbits ( n --> )
|