Chaocipher: Difference between revisions
Content added Content deleted
m (Updated description and link for Fōrmulæ solution) |
Alpha bravo (talk | contribs) (Added AutoHotkey) |
||
Line 231: | Line 231: | ||
"OAHQHCNYNXTSZJRRHJBYHQKSOUJY" |
"OAHQHCNYNXTSZJRRHJBYHQKSOUJY" |
||
</lang> |
</lang> |
||
=={{header|AutoHotkey}}== |
|||
<lang AutoHotkey>LeftW := "HXUCZVAMDSLKPEFJRIGTWOBNYQ" |
|||
RghtW := "PTLNBQDEOYSFAVZKGJRIHWXUMC" |
|||
PlainText := "WELLDONEISBETTERTHANWELLSAID" |
|||
CipherText := Chao_Cipher(PlainText, LeftW, RghtW) ; "OAHQHCNYNXTSZJRRHJBYHQKSOUJY" |
|||
DecipherText:= Chao_Decipher(CipherText, LeftW, RghtW) ; "WELLDONEISBETTERTHANWELLSAID" |
|||
MsgBox % Result := "Original text:`t" PlainText "`nCipher text:`t" CipherText "`nDecipher text:`t" DecipherText |
|||
return |
|||
;------------------------------------------- |
|||
Chao_Cipher(PT, LeftW, RghtW){ |
|||
oRght:=StrSplit(RghtW), oLeft:=StrSplit(LeftW) |
|||
for i, p in StrSplit(PT){ |
|||
result .= (c := Key2Val(oRght, oLeft, p)) |
|||
oLeft:=Permute(oLeft, c, 1) |
|||
oRght:=Permute(oRght, p) |
|||
} |
|||
return result |
|||
} |
|||
;------------------------------------------- |
|||
Chao_Decipher(CT, LeftW, RghtW){ |
|||
oRght:=StrSplit(RghtW), oLeft:=StrSplit(LeftW) |
|||
for i, c in StrSplit(CT){ |
|||
result .= (p := Key2Val(oLeft, oRght, c)) |
|||
oLeft:=Permute(oLeft, c, 1) |
|||
oRght:=Permute(oRght, p) |
|||
} |
|||
return result |
|||
} |
|||
;------------------------------------------- |
|||
Key2Val(Key, Val, char){ |
|||
for i, ch in Key |
|||
if (ch = char) |
|||
return Val[i] |
|||
} |
|||
;------------------------------------------- |
|||
Permute(Arr, ch, dt:=0){ |
|||
for i, c in Arr |
|||
if (c=ch) |
|||
break |
|||
loop % i-dt |
|||
Arr.Push(Arr.RemoveAt(1)) ; shift left |
|||
ch := Arr[3-dt] ; save 2nd/3rd chr |
|||
loop % 11+dt |
|||
Arr[A_Index+2-dt]:=Arr[A_Index+3-dt] ; shift pos 3/4-14 left |
|||
Arr[14] := ch ; place 2nd/3rd chr in pos 14 |
|||
return Arr |
|||
}</lang> |
|||
{{out}} |
|||
<pre>Original text: WELLDONEISBETTERTHANWELLSAID |
|||
Cipher text: OAHQHCNYNXTSZJRRHJBYHQKSOUJY |
|||
Decipher text: WELLDONEISBETTERTHANWELLSAID</pre> |
|||
=={{header|C}}== |
=={{header|C}}== |