git - alex wennerberg
    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