Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

small sig line

by dbw (Beadle)
on Aug 15, 2007 at 18:40 UTC ( [id://632827]=obfuscated: print w/replies, xml ) Need Help??

I've been looking for something short and sweet to put in my signature and I came up with this. It's not exactly an obfuscation, just a fairly dense bit of code. It prints something (IMO) more interesting than JAPH.
/usr/bin/perl -le'X:for(my$x=1;;){$x%$_||next(X)for(2..$x++);print$x}'
It can use strict and warnings without further modification and it's only 70 columns wide, so it fits most places. What do you think?

Replies are listed 'Best First'.
Re: small sig line
by liverpole (Monsignor) on Aug 15, 2007 at 20:06 UTC
    Very nice signature!  It's a prime number generator.

    It doesn't run on Windows the way it is, though ... how about just adding the newline character $/, and doing:

    X:for(my$x=1;;){$x%$_||next(X)for(2..$x++);print$x.$/}

    If you want to make it even shorter, change print to warn:

    X:for(my$x=1;;){$x%$_||next(X)for(2..$x++);warn$x.$/}

    Of course, since it's not "production code", you can lose the my:

    X:for($x=1;;){$x%$_||next(X)for(2..$x++);warn$x.$/}

    And converting from for to map saves another character, so you're down to just 50 characters:

    X:for($x=1;;){map{$x%$_||next X}2..$x++;warn$x.$/}

    Update:  Come to think of it, you don't need the label for next, and you can switch to the "map EXPR,LIST" form of map, to bring it down to 45 characters:

    for($x=1;;){map$x%$_||next,2..$x++;warn$x.$/}

    Update 2:  From my response below, a better golf score (44 chars) can be achieved with:

    $x++;{map$x%$_||redo,2..$x++;warn$x.$/;redo}

    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
      These are good suggestions. I'm not going to take them all: I like that it's UNIX-specific, and I like that it can use strict, and I don't like the warn output. (Though I'll point out that if you use warn you can dispense with the ".$/".) I think I'll use this version:
      /usr/bin/perl '-lefor(my$x=1;;){map$x%$_||next,2..$x++;print$x}'
      And the golfiest version is
      for($x=1;;){map$x%$_||next,2..$x++;warn$x}
      at 42 characters.
        Thanks!

        The reason I used warn with the newline "$/" is that without it, you get a lot of extra clutter:

        1 at x.pl line 2. 2 at x.pl line 2. 3 at x.pl line 2. 5 at x.pl line 2. 7 at x.pl line 2. 11 at x.pl line 2. 13 at x.pl line 2. 17 at x.pl line 2. 19 at x.pl line 2. 23 at x.pl line 2. 29 at x.pl line 2. 31 at x.pl line 2. ...

        but, come to think of it, that's a moot point your case, because of the switches you're using to Perl.

        As far as the golfiest version ... well, you never know. :-)  Here's another example I just thought of which uses the non-newline "warn", but is only 41 characters:

        ++$x;{map$x%$_||redo,2..$x++;warn$x;redo}

        So if you wanted to, you could do something like:

        /usr/bin/perl '-le$x=1;{map$x%$_||redo,2..$x++;print$x;redo}'

        But in the end, the important thing is that whatever you decide to use, you've chosen a signature which fits your unique style and taste.  Thanks for giving us a chance to be a part of the process!


        s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/

      Here's a Windows version for ya' (sans golfing)

      C:\chas_sandbox>perl -le "X:for(my$x=1;;){$x%$_||next(X)for(2..$x++);p +rint$x}"


      I humbly seek wisdom.
Re: small sig line
by toolic (Bishop) on Aug 15, 2007 at 20:01 UTC
    I think it behaves like an infinite loop.

    When I run it on my linux machine, it spews endless lines of numeric values until I kill it with Ctrl-C.

    What does it do for you?

      That's exactly what it does. Look closely, though, there's something special about the numbers.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-19 22:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found