24 lines
730 B
Plaintext
24 lines
730 B
Plaintext
#lang rhombus/static
|
|
|
|
import lib("racket/base.rkt") expose:
|
|
#{string->list} as string_to_list
|
|
#{list->string} as list_to_string
|
|
modulo
|
|
|
|
fun rot13_char(char :: Char):
|
|
let char_int = char.to_int()
|
|
fun rot13_by_case(char_int, a_char :: Char) :: Int :
|
|
modulo(char_int - a_char.to_int() + 13, 26) + a_char.to_int()
|
|
if char.is_alphabetic():
|
|
| if char.is_lowercase():
|
|
| Char.from_int(rot13_by_case(char_int, Char"a"))
|
|
| Char.from_int(rot13_by_case(char_int, Char"A"))
|
|
| char
|
|
|
|
fun rot13_string(str :: String) :: String :
|
|
let chars :: PairList = string_to_list(str)
|
|
let str :: MutableString = list_to_string(chars.map(rot13_char))
|
|
str.snapshot()
|
|
|
|
rot13_string("Hello, World!") // Output: "Uryyb, Jbeyq!""
|