! Copyright (C) 2006 Daniel Ehrenberg
! See http://f...content-available-to-author-only...e.org/license.txt for BSD license.
USING: kernel math sequences strings io combinators ascii ;
IN: rot13
: rotate ( ch base -- ch ) [ - 13 + 26 mod ] [ + ] bi ;
: rot-letter ( ch -- ch )
{
{ [ dup letter? ] [ CHAR: a rotate ] }
{ [ dup LETTER? ] [ CHAR: A rotate ] }
[ ]
} cond ;
: rot13 ( string -- string ) [ rot-letter ] map ;
: rot13-demo ( -- )
"Please enter a string:" print flush
readln [
"Your string: " write dup print
"Rot13: " write rot13 print
] when* ;
MAIN: rot13-demo
rot13-demo
ISBDb3B5cmlnaHQgKEMpIDIwMDYgRGFuaWVsIEVocmVuYmVyZwohIFNlZSBodHRwOi8vZi4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5vcmcvbGljZW5zZS50eHQgZm9yIEJTRCBsaWNlbnNlLgpVU0lORzoga2VybmVsIG1hdGggc2VxdWVuY2VzIHN0cmluZ3MgaW8gY29tYmluYXRvcnMgYXNjaWkgOwpJTjogcm90MTMKCjogcm90YXRlICggY2ggYmFzZSAtLSBjaCApIFsgLSAxMyArIDI2IG1vZCBdIFsgKyBdIGJpIDsKCjogcm90LWxldHRlciAoIGNoIC0tIGNoICkKICAgIHsKICAgICAgICB7IFsgZHVwIGxldHRlcj8gXSBbIENIQVI6IGEgcm90YXRlIF0gfQogICAgICAgIHsgWyBkdXAgTEVUVEVSPyBdIFsgQ0hBUjogQSByb3RhdGUgXSB9CiAgICAgICAgWyBdCiAgICB9IGNvbmQgOwoKOiByb3QxMyAoIHN0cmluZyAtLSBzdHJpbmcgKSBbIHJvdC1sZXR0ZXIgXSBtYXAgOwoKOiByb3QxMy1kZW1vICggLS0gKQogICAgIlBsZWFzZSBlbnRlciBhIHN0cmluZzoiIHByaW50IGZsdXNoCiAgICByZWFkbG4gWwogICAgICAgICJZb3VyIHN0cmluZzogIiB3cml0ZSBkdXAgcHJpbnQKICAgICAgICAiUm90MTM6ICAgICAgICIgd3JpdGUgcm90MTMgcHJpbnQKICAgIF0gd2hlbiogOwoKTUFJTjogcm90MTMtZGVtbwoKcm90MTMtZGVtbwo=