1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| \ util
4545 constant input-size
: tibs ( -- a u ) tib >limit @ tib - ;
: s>n ( a u -- n ) 0 -rot 0 do dup r@ + c@ h# 30 - rot 10 * + swap loop drop ;
\ floor division
: // ( n1 n2 -- n ) /mod swap 0< if 1- then ;
\ solution
variable password
variable passwordB
: turn-val ( a u -- n ) over c@ [char] O - 3 / -rot 1 /string s>n * ;
\ floor mod
: fmod-100 ( n -- n ) dup 100 // 100 * - ;
: turn ( old -- new ) dup query tibs turn-val >r r@ +
( old new )
2dup r> 0< if 1- swap 1- then \ border fix
100 // 100 // - abs passwordB +!
nip ( new ) fmod-100 dup 0= if 1 password +! then ;
: solve ( -- ) 50 input-size 0 do turn loop drop
password @ . cr
passwordB @ . cr bye ;
solve
|