{def caesar {def caesar.alphabet {A.split ABCDEFGHIJKLMNOPQRSTUVWXYZ}} {def caesar.delta {lambda {:s :i :a} {A.get {% {+ {A.in? {A.get :i :a} {caesar.alphabet}} 26 :s} 26} {caesar.alphabet}}}} {def caesar.loop {lambda {:s :a :b :n :i} {if {> :i :n} then :b else {caesar.r :s :a {A.set! :i {caesar.delta :s :i :a} :b} :n {+ :i 1}} }}} {lambda {:shift :txt} {let { {:s :shift} {:t {S.replace [^A-Z] by in :txt}} } {A.join {caesar.loop :s {A.split :t} {A.new} {- {W.length :t} 1} 0 }}}}} -> caesar {def text VENI, VIDI, VICI} -> text {S.map {lambda {:i} {br}:i: {caesar :i {text}}} {S.serie 0 26}} -> 0: VENIVIDIVICI 1: WFOJWJEJWJDJ 2: XGPKXKFKXKEK 3: YHQLYLGLYLFL ... 23: SBKFSFAFSFZF 24: TCLGTGBGTGAG 25: UDMHUHCHUHBH 26: VENIVIDIVICI As a shorter alternative: {def CAESAR {def CAESAR.rot {lambda {:shift :txt :alpha :i} {A.get {% {+ {A.in? {A.get :i :txt} :alpha} 26 :shift} 26} :alpha}}} {def CAESAR.loop {lambda {:shift :txt :alpha} {S.map {CAESAR.rot :shift :txt :alpha} {S.serie 0 {- {A.length :txt} 1}}} }} {lambda {:shift :txt} {S.replace \s by in {CAESAR.loop :shift {A.split {S.replace \s by in :txt}} {A.split ABCDEFGHIJKLMNOPQRSTUVWXYZ}} }}} -> CAESAR {CAESAR 1 VENI VIDI VICI} -> WFOJWJEJWJDJ {CAESAR 25 WFOJWJEJWJDJ} -> VENIVIDIVICI