![]() |
|||||
Peters Family Perl activity
|
|||||
|
|
||||
|
I realize that this entry is not very complicated, or even very obfuscated, but it is what it is: two lines of code that
parses two lines of embedded comments in the code to read the Mayan numbers representing the individual ASCII characters that
make up the magazine title, rendered in 90-degree rotated ASCII art. After the awards were announced, I looked at the other
entries, and I saw that the second-place entry in this category was, in my opinion, more obfuscated in its execution than
mine. I do not know exactly what the judges were looking for, and what they saw in my entry that they didn't in the other
entry. Alas, I have not yet had a chance to defend this title, as the magazine stopped its print version shortly after the
conclusion of the 2000 contest, and has decided for whatever reason not to revive this arcane sport of kings.
Open itself as input, and while reading each line...
If the current line is a comment line,
Split the line, sans the sharp character, on dashes, and iterate on the results,
using the default argument as the iterated value.
Set $q to 0, then split each value from the previous split on whitespace,
again using the default argument as the iterated value.
Substitute pipe characters for a colon, a dot, and another colon. The
Mayan number 5 is represented by a horizontal bar, so in this implementation,
I used a vertical bar ASCIIglyph.
Substitute colors for two dots, to transform the two-dot ASCIIglyph into
two one-dot ASCIIglyphs.
If the value of the default argument evaluates true, $Q is assigned
the value of the length of the default argument; otherwise, it is
assigned the value of the default argument. There is only one instance
where the false leg of this ?: is taken, when the character '0' in the
first comment line is reached. The Mayans used a shell-like glyph to
represent a zero-filled unit, but for the purposes of this exercise,
I used the ASCIIglyph '0'.
If the value of $q evaluates true, $q is incremented by the value
of $Q; otherwise, it is incremented by the value of 20 times $Q.
In the first iteration of the inner for loop, $q is always zero,
so the false leg of the ?: is always taken; this will properly
left shift the value by the Mayan number base of 20. On the second
and final iteration of the inner loop, $q always has value, so the
true leg is always taken, and the "one's digit" of the number is added
into the calculation.
End of inner for loop, where we print the ASCII character of $q.
Close the outer for loop, the if statement, and the while statement.
Print a newline, completing the output.
|
||||
|
Enter supporting content here |
||||