Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Laziness, Impatience, and Hubris

by grep (Monsignor)
on Mar 07, 2002 at 07:34 UTC ( #149961=obfuscated: print w/ replies, xml ) Need Help??

#!/usr/bin/perl use strict;map{$a++} ('g','r','e','p') ;$a=$a-$a--+$a++;$a++;$b=int (rand($a));$b++;map{chomp;@INC =split(/\D/);push(@_,(int($INC [$b]/$b),int($INC[$b+$a]/$b))) ;}(<DATA>);map{printf("%c",$_)}@_; __DATA__ L076I146H216a097m218u351 z122p224b294i105a194r342 n110t232i315e101i210s345 s115e202(096s115n220#096 &032c198$096^032e202)096 ^032#064?096<010>020\030

UPDATE: some small changes to muck it up a bit more

grep
grep> cd /pub
grep> more beer

Comment on Laziness, Impatience, and Hubris
Download Code
Solution: Laziness, Impatience, and Hubris
by domm (Chaplain) on Mar 08, 2002 at 21:20 UTC
    use strict;
    Enable strict mode. There are no errors because of undefined vars because you used $a and $b, which are always defined, as they are used by sorting.
    For the same reason, you choose @INC;

    map{$a++}('g','r','e','p');
    You set $a to 4.

    $a=$a-$a--+$a++;
    or written a little bit cleaner
    $a=$a - $a-- + $a++;

    But still rather hard to understand, because of the way auto-in/decrement worksin suffix mode:
    What happens is (if I got it right):
    $a=$a - $a-- + $a++;
    $a is now 3, but 4 is substracted
    $a=3 - 4 + $a++;
    $a=-1 + $a++;

    $a is incremented to 4, but 3 (the old value) is used in the addition
    $a= -1 + 3
    $a is now 2

    $a++;
    And now its 3

    $b=int(rand($a));
    sets $b to a value between 0 and 2.

    $b++
    increments it by one, so it is now 1, 2, or 3. Used to decide which virtue to print.

    map {chomp;@INC=split(/\D/);push(@_,(int($INC$b/$b),
    int($INC$b+$a/$b)));}(<DATA>);
    Here you map over all elements of the DATA array, doing the following things:
    chomp;
    remove the line brake at the end of the line
    @INC=split(/\D/);
    Set @INC, by splitting the current line on non-numeric values, thereby removing all charaters from the stuff in DATA. This made me wonder, because first I thought you where using the characters hidden between the numbers as your data. But, as I then found out, you just tossed me a red herring that I gullibly swalloed.
    push(@_,(int($INC$b/$b),int($INC$b+$a/$b)))
    Now you modify your data structure. In the DATA-section, you stored the ascii values of each character (multiplied by either 1,2 or 3), like so (using the real characters): LIHamu (and these are NOT the 'L', the 'I', the 'H' etc you can see in the DATA section).
    With this code segment, you first get item number $b (and divide by $b, so it is now the real ascii value), then you get $b+$a. As $a is 3, this gets the next value of the selected virtue. The shorter virtues are space-padded at the end.

    map{printf("%c",$_)}@_;
    Here you finally map over all values of @_, printing the character with the ascii value of $_. A nice way to prevent the much-overused chr. Voila.

    Nice work! Especially as it's not just one more japh.

    I espcially liked the auto-in/decrement stuff and the wrong track you laid in DATA.

    --
    #!/usr/bin/perl -w just another perl hacker
    print+seek(DATA,$=*.3,@-)?~~<DATA>:$:__DATA__
    

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: obfuscated [id://149961]
Approved by root
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (12)
As of 2014-10-24 16:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (133 votes), past polls