note goibhniu <p> My first clue is to explain ACA in the post. It's probably not very helpful; just a nudge in a direction. Here's the link: <spoiler> <a href="http://www.cryptogram.org">ACA</a> </spoiler> </p> <p> My next clue is somethign most here could do themselves, but I just learned it this week (from reading PerlMonks!). Here's the <code>perl -MO=Deparse</code> output (this is without [id://633470|eyepopslikeamosquito's reduction]): <spoiler> <code> @ca = (sub { @kp = split(//, shift @_, 0); \$c = shift @_; \$p2{' '} = ' '; \$C2{' '} = ' '; foreach \$_ (@kp, ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')) { if (not exists \$p2{\$_}) { \$k = chr 65 + (\$a++ + \$c) % 26; \$p2{\$_} = \$k; \$C2{\$k} = \$_; } } } , sub { \$t = shift @_; \$h = shift @_; foreach \$_ (split(//, \$t, 0)) { \$r = \$r . \$\$h{\$_}; } return \$r; } ); \$ca->('thequickbrownfoxjumpsoverthelazydogs', 10); print \$ca->('ZOCK FWUKLMT BMTE LFQR', \%C2) . "\n"; </code> </spoiler> </p> <p> My next clue is to comment my variables. This is a big leap and probably a give away. I wish I had better intermediate clues for ya. <spoiler> <code> # @ca - code array # @kp - key phrase # \$c - caesar shift (big hint here) # %p2 - short for p2C - plaintext to CIPHERTEXT hash # %C2 - short for C2p - CIPHERTEXT to plaintext hash # \$k - key (one letter of the key alphabet) # \$t - text # \$h - hash reference # \$r - result </code> </spoiler> </p> <p> ok, here's what I'm doing: </p> <spoiler> <p> I create an array of annonymous subroutine references. </p> <p> <b>\$ca</b> is the subroutine that takes a keyphrase and a caesar shift to create a key alphabet. This is what the ACA calls a K1. The keyword is reduced to it's unique letters in the order of occurrence in the key phrase followed by the rest of the letters in alphabetical order. This procuces a scrambled alphabet. In a K1, this scrambled alphabet is written as the plaintext alphabet and is associated with a CIPHERTEXT alphabet in natural order (in the ACA the convention is that plaintext be in lower case and CIPHERTEXT in uppercase). The two alphabets are shifted with respect to each other by a factor that ensures no letter is enciphered to itself. </p> <p> In \$ca I use the keyphrase letters plus the 'rest of the alphabet' in order as the keys (overloaded word there) to the %p2C hash. Then I turn p2C inside out to get C2p. </p> <p> <b>\$ca&#91;1&#93;</b> does the decryption. Actually, it takes some text and a hashref to do either decryption or encryption. This simply replaces the letters in the text with the values dereferenced from the hash by that letter. If you pass it p2C, you'd be encrypting; C2p would be decrypting. </p> <p> The next line calls \$ca with the keyphrase 'thequickbrownfoxjumpsoverthelazydogs' and a caesar shift of 10 to set up the C2p hash. </p> <p> Finally, print the decrypted version of 'ZOCK FWUKLMT BMTE LFQR'. You know what that says! </p> </spoiler> <div class="pmsig"><div class="pmsig-632330"> <hr /> <font size='1'> I humbly seek wisdom. </font> </div></div> 633452 633452