RosettaCodeData/Task/Caesar-cipher/Forth/caesar-cipher.fth

20 lines
415 B
Forth

: caesar ( c n -- c )
over 32 or [char] a -
dup 0 26 within if
over + 25 > if 26 - then +
else 2drop then ;
: caesar-string ( n str len -- )
over + swap do i c@ over caesar i c! loop drop ;
: caesar-inverse ( n -- 'n ) 26 swap - 26 mod ;
2variable test
s" The five boxing wizards jump quickly!" test 2!
3 test 2@ caesar-string
test 2@ cr type
3 caesar-inverse test 2@ caesar-string
test 2@ cr type