25 lines
		
	
	
		
			608 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			608 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2006 Daniel Ehrenberg
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel math sequences strings io combinators ascii ;
 | 
						|
IN: rot13
 | 
						|
 | 
						|
: rotate ( ch base -- ch ) tuck - 13 + 26 mod + ;
 | 
						|
 | 
						|
: 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
 |