Jump to content

Vigenère cipher: Difference between revisions

(→‎{{header|TXR}}: Extensions in TXR's lazy facilities make shorter work of this.)
Line 1,341:
: (vigenereDecrypt @ "VIGENERECIPHER")
-> "BEWARETHEJABBERWOCKMYSONTHEJAWSTHATBITETHECLAWSTHATCATCH"</pre>
 
=={{header|PL/I}}==
<lang PL/I>
cypher: procedure options (main); /* 21 February 2012 */
declare t(26) character (26);
declare (i, j, k) fixed binary;
declare (original, encoded, coder) character (1000) varying;
declare cypher character (30) varying;
declare (co, ct, cc) character (1);
 
/* Set up cypher table. */
t(1) = uppercase('abcdefghijklmnopqrstuvwxyz');
do i = 2 to 26;
t(i) = substr(t(i-1), 2, 25) || substr(t(i-1), 1, 1);
end;
 
cypher = uppercase('vigilance');
original = 'Meet me on Tuesday evening at seven.';
put edit ('Message=', original) (a);
original = uppercase(original);
coder = '';
do i = 1 to length(original) by length(cypher);
coder = coder || cypher;
end;
 
/* Remove non-alphabetic characters. */
j = 0;
do i = 1 to length(original);
k = index(t(1), substr(original, i, 1));
if k > 0 then
do; j = j + 1; substr(original, j, 1) = substr(original, i, 1); end;
end;
original = substr(original, 1, j);
 
/* Encode the original message. */
encoded = '';
do i = 1 to length(original);
co = substr(original, i, 1);
j = index(t(1), co);
ct = substr(coder, i, 1);
k = index(t(1), ct);
encoded = encoded || substr(t(j), k, 1);
end;
put skip data (encoded);
 
/* DECODING. */
put skip list ('Decoded=');
do i = 1 to length(encoded);
cc = substr(coder, i, 1);
j = index(t(1), cc);
k = index(t(j), substr(encoded, i, 1));
put edit (substr(t(1), k, 1) ) (a(1));
end;
end cypher;
</lang>
Output:
<pre>
Message=Meet me on Tuesday evening at seven.
ENCODED='HMKBXEBPXPMYLLYRXIIQTOLTFGZZV';
Decoded= MEETMEONTUESDAYEVENINGATSEVEN
</pre>
 
=={{header|PureBasic}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.