Jump to content

Chaocipher: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 12:
 
=={{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>
with Ada.Text_IO; use Ada.Text_IO;
 
procedure Mainchao_slices is
type iMode is (Encrypt, Decrypt);
 
Line 24 ⟶ 25:
ciphertext : String (1 .. plaintext'length);
plaintext2 : String (1 .. plaintext'length);
offset : Natural;
 
function IndexOf (Source : String; Value : Character) return Positive is
Line 64 ⟶ 66:
 
-- permute left
-- The array value permutations are performed using array slices
-- rather than explicit loops
 
for j inif index ..> 261 loopthen
tempoffset (j - index + 1) := left26 (j)- index;
temp (1 .. offset + 1) := left (index .. index + offset);
end loop;
 
for j in 1 .. index loop
temp (26offset -+ index2 +.. j26) := left (j1 .. index - 1);
end loop store := temp (2);
 
store := temp (2);
for j in temp (2 .. 13) := temp (3 .. 14 loop);
temp (j14) - 1) := temp (j)store;
end loop left := temp;
tempend (14) := storeif;
left := temp;
 
-- 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;
 
Line 102 ⟶ 105:
 
end Exec;
 
begin
Put_Line ("The original text is : " & plaintext);
Line 115 ⟶ 117:
New_Line;
Put_Line ("The recovered plaintext is : " & plaintext2);
end Mainchao_slices;
</lang>
{{output}}
Line 124 ⟶ 126:
 
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 : OAHYHCOYPUMMJFJZPIAKGOBIKOMKOAHQHCNYNXTSZJRRUIDHIXWKPKLY
 
The recovered plaintext is : WELLDONEISBETTERTHANWELLSAID
82

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.