Chaocipher: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 12: | Line 12: | ||
=={{header|Ada}}== |
=={{header|Ada}}== |
||
This solution uses array slices to permute the left and right strings. Use of slices clarifies the looping logic. |
|||
Ada strings are indexed starting at 1. This fact resulted in some adjustments in loop control values compared with the C# reference solution. |
|||
Ada strings are indexed with the predefined subtype Positive which begins at 1. |
|||
<lang Ada> |
<lang Ada> |
||
with Ada.Text_IO; use Ada.Text_IO; |
with Ada.Text_IO; use Ada.Text_IO; |
||
procedure |
procedure chao_slices is |
||
type iMode is (Encrypt, Decrypt); |
type iMode is (Encrypt, Decrypt); |
||
Line 24: | Line 25: | ||
ciphertext : String (1 .. plaintext'length); |
ciphertext : String (1 .. plaintext'length); |
||
plaintext2 : String (1 .. plaintext'length); |
plaintext2 : String (1 .. plaintext'length); |
||
offset : Natural; |
|||
function IndexOf (Source : String; Value : Character) return Positive is |
function IndexOf (Source : String; Value : Character) return Positive is |
||
Line 64: | Line 66: | ||
-- permute left |
-- permute left |
||
-- The array value permutations are performed using array slices |
|||
-- rather than explicit loops |
|||
if index > 1 then |
|||
offset := 26 - index; |
|||
temp (1 .. offset + 1) := left (index .. index + offset); |
|||
end loop; |
|||
for j in 1 .. index loop |
|||
temp ( |
temp (offset + 2 .. 26) := left (1 .. index - 1); |
||
store := temp (2); |
|||
store := temp (2); |
|||
temp (2 .. 13) := temp (3 .. 14); |
|||
temp ( |
temp (14) := store; |
||
left := temp; |
|||
end if; |
|||
left := temp; |
|||
-- permute right |
-- permute right |
||
-- The array value permutations are performed using array slices |
|||
-- rather than explicit loops |
|||
if index > 1 then |
|||
temp (1 .. offset + 1) := right (index .. index + offset); |
|||
temp (offset + 2 .. 26) := right (1 .. index - 1); |
|||
store := temp (1); |
|||
temp (1 .. 25) := temp (2 .. 26); |
|||
temp (26) := store; |
|||
store := temp (3); |
|||
temp (3 .. 13) := temp (4 .. 14); |
|||
temp (14) := store; |
|||
right := temp; |
|||
end if; |
|||
for j in index .. 26 loop |
|||
temp (j - index + 1) := right (j); |
|||
end loop; |
|||
for j in 1 .. index loop |
|||
temp (26 - index + j) := right (j); |
|||
end loop; |
|||
store := temp (1); |
|||
for j in 2 .. 26 loop |
|||
temp (j - 1) := temp (j); |
|||
end loop; |
|||
temp (26) := store; |
|||
store := temp (3); |
|||
for j in 4 .. 14 loop |
|||
temp (j - 1) := temp (j); |
|||
end loop; |
|||
temp (14) := store; |
|||
right := temp; |
|||
end loop; |
end loop; |
||
Line 102: | Line 105: | ||
end Exec; |
end Exec; |
||
begin |
begin |
||
Put_Line ("The original text is : " & plaintext); |
Put_Line ("The original text is : " & plaintext); |
||
Line 115: | Line 117: | ||
New_Line; |
New_Line; |
||
Put_Line ("The recovered plaintext is : " & plaintext2); |
Put_Line ("The recovered plaintext is : " & plaintext2); |
||
end |
end chao_slices; |
||
</lang> |
</lang> |
||
{{output}} |
{{output}} |
||
Line 124: | Line 126: | ||
HXUCZVAMDSLKPEFJRIGTWOBNYQ PTLNBQDEOYSFAVZKGJRIHWXUMC |
HXUCZVAMDSLKPEFJRIGTWOBNYQ PTLNBQDEOYSFAVZKGJRIHWXUMC |
||
ONYQHXUCZVAMDBSLKPEFJRIGTW XUCPTLNBQDEOYMSFAVZKGJRIHW |
|||
ONYHXUCZVAMDSBLKPEFJRIGTWO XUPTLNBQDEOYSMFAVZKGJRIHWW |
|||
ADBSLKPEFJRIGMTWONYQHXUCZV OYSFAVZKGJRIHMWXUCPTLNBQDE |
|||
ADSBLKPEFJRIGMTWONYHXUCZVA OYMFAVZKGJRIHSWXUPTLNBQDEE |
|||
HUCZVADBSLKPEXFJRIGMTWONYQ NBDEOYSFAVZKGQJRIHMWXUCPTL |
|||
HUCZVADSBLKPEXFJRIGMTWONYH NBDEOYMFAVZKGQJRIHSWXUPTLL |
|||
QUCZVADBSLKPEHXFJRIGMTWONY NBEOYSFAVZKGQDJRIHMWXUCPTL |
|||
YUCZVADSBLKPEHXFJRIGMTWONY NBEOYMFAVZKGQDJRIHSWXUPTLL |
|||
HFJRIGMTWONYQXUCZVADBSLKPE JRHMWXUCPTLNBIEOYSFAVZKGQD |
|||
HFJRIGMTWONYUXCZVADSBLKPEH JRHSWXUPTLNBEIOYMFAVZKGQDD |
|||
CVADBSLKPEHFJZRIGMTWONYQXU YSAVZKGQDJRHMFWXUCPTLNBIEO |
|||
CVADSBLKPEHFJZRIGMTWONYUXC YMAVZKGQDJRHSFWXUPTLNBEIOO |
|||
NQXUCVADBSLKPYEHFJZRIGMTWO BIOYSAVZKGQDJERHMFWXUCPTLN |
|||
OYUXCVADSBLKPNEHFJZRIGMTWO BEOYMAVZKGQDJIRHSFWXUPTLNN |
|||
YHFJZRIGMTWONEQXUCVADBSLKP RHFWXUCPTLNBIMOYSAVZKGQDJE |
|||
YXCVADSBLKPNEUHFJZRIGMTWOY OYAVZKGQDJIRHMSFWXUPTLNBEE |
|||
NQXUCVADBSLKPEYHFJZRIGMTWO MOSAVZKGQDJERYHFWXUCPTLNBI |
|||
PEUHFJZRIGMTWNOYXCVADSBLKP RHSFWXUPTLNBEMOYAVZKGQDJII |
|||
XCVADBSLKPEYHUFJZRIGMTWONQ AVKGQDJERYHFWZXUCPTLNBIMOS |
|||
UFJZRIGMTWNOYHXCVADSBLKPEU FWUPTLNBEMOYAXVZKGQDJIRHSS |
|||
TONQXCVADBSLKWPEYHUFJZRIGM IMSAVKGQDJERYOHFWZXUCPTLNB |
|||
MWNOYHXCVADSBTLKPEUFJZRIGM EMYAXVZKGQDJIORHSFWUPTLNBB |
|||
SKWPEYHUFJZRILGMTONQXCVADB RYHFWZXUCPTLNOBIMSAVKGQDJE |
|||
MNOYHXCVADSBTWLKPEUFJZRIGM MYXVZKGQDJIORAHSFWUPTLNBEE |
|||
ZILGMTONQXCVARDBSKWPEYHUFJ LNBIMSAVKGQDJOERYHFWZXUCPT |
|||
JRIGMNOYHXCVAZDSBTWLKPEUFJ LNEMYXVZKGQDJBIORAHSFWUPTT |
|||
JILGMTONQXCVAZRDBSKWPEYHUF LNIMSAVKGQDJOBERYHFWZXUCPT |
|||
FRIGMNOYHXCVAJZDSBTWLKPEUF LNMYXVZKGQDJBEIORAHSFWUPTT |
|||
RBSKWPEYHUFJIDLGMTONQXCVAZ RYFWZXUCPTLNIHMSAVKGQDJOBE |
|||
JDSBTWLKPEUFRZIGMNOYHXCVAJ IOAHSFWUPTLNMRYXVZKGQDJBEE |
|||
RBSKWPEYHUFJIDLGMTONQXCVAZ RYFWZXUCPTLNIHMSAVKGQDJOBE |
|||
ZGMNOYHXCVAJDISBTWLKPEUFRZ YXZKGQDJBEIOAVHSFWUPTLNMRR |
|||
UJIDLGMTONQXCFVAZRBSKWPEYH LNHMSAVKGQDJOIBERYFWZXUCPT |
|||
PUFRZGMNOYHXCEVAJDISBTWLKP LNRYXZKGQDJBEMIOAVHSFWUPTT |
|||
ILGMTONQXCFVADZRBSKWPEYHUJ MSVKGQDJOIBERAYFWZXUCPTLNH |
|||
IBTWLKPUFRZGMSNOYHXCEVAJDI SFUPTLNRYXZKGWQDJBEMIOAVHH |
|||
DRBSKWPEYHUJIZLGMTONQXCFVA YFZXUCPTLNHMSWVKGQDJOIBERA |
|||
ADIBTWLKPUFRZJGMSNOYHXCEVA VHFUPTLNRYXZKSGWQDJBEMIOAA |
|||
HJIZLGMTONQXCUFVADRBSKWPEY HMWVKGQDJOIBESRAYFZXUCPTLN |
|||
KUFRZJGMSNOYHPXCEVADIBTWLK RYZKSGWQDJBEMXIOAVHFUPTLNN |
|||
ILGMTONQXCUFVZADRBSKWPEYHJ VKQDJOIBESRAYGFZXUCPTLNHMW |
|||
GSNOYHPXCEVADMIBTWLKUFRZJG QDBEMXIOAVHFUJPTLNRYZKSGWW |
|||
XUFVZADRBSKWPCEYHJILGMTONQ SRYGFZXUCPTLNAHMWVKQDJOIBE |
|||
OHPXCEVADMIBTYWLKUFRZJGSNO MXOAVHFUJPTLNIRYZKSGWQDBEE |
|||
WCEYHJILGMTONPQXUFVZADRBSK NAMWVKQDJOIBEHSRYGFZXUCPTL |
|||
BYWLKUFRZJGSNTOHPXCEVADMIB NIYZKSGWQDBEMRXOAVHFUJPTLL |
|||
KCEYHJILGMTONWPQXUFVZADRBS NAWVKQDJOIBEHMSRYGFZXUCPTL |
|||
IYWLKUFRZJGSNBTOHPXCEVADMI NIZKSGWQDBEMRYXOAVHFUJPTLL |
|||
PXUFVZADRBSKCQEYHJILGMTONW RYFZXUCPTLNAWGVKQDJOIBEHMS |
|||
KFRZJGSNBTOHPUXCEVADMIYWLK GWDBEMRYXOAVHQFUJPTLNIZKSS |
|||
KQEYHJILGMTONCWPXUFVZADRBS WGKQDJOIBEHMSVRYFZXUCPTLNA |
|||
OPUXCEVADMIYWHLKFRZJGSNBTO VHFUJPTLNIZKSQGWDBEMRYXOAA |
|||
LMTONCWPXUFVZGADRBSKQEYHJI BEMSVRYFZXUCPHTLNAWGKQDJOI |
|||
MYWHLKFRZJGSNIBTOPUXCEVADM ZKQGWDBEMRYXOSAVHFUJPTLNII |
|||
The ciphertext is : |
The ciphertext is : OAHQHCNYNXTSZJRRUIDHIXWKPKLY |
||
The recovered plaintext is : WELLDONEISBETTERTHANWELLSAID |
The recovered plaintext is : WELLDONEISBETTERTHANWELLSAID |