First, can you guess what the following code does before running it? ...
1x~@;

This node by shmem gave me the idea, and may give you a hint as well.

Now for the challenge ... what's the shortest program which does the same thing?  My guess is the obvious:

1x~0

with any digit in place of '0' working equally well, as does any digit except '0' exchanged for the '1'.

How about the smallest program that does the same thing slowly?  The following takes about 11 seconds on my laptop:

sub _{_()}_

I have no idea if a shorter such program exists.


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

Replies are listed 'Best First'.
Re: Guess what it does ... and a challenge
by blokhead (Monsignor) on May 24, 2008 at 19:36 UTC
    I parsed that code correctly in my head, but didn't realize what the result would be.

    Here is a program of the same length (as your second snippet) that does the same thing slowly:

    blokhead

        No, it won't. Now, if you do $_='a' first, then it will, and extremely slowly too.

        - tye        

Re: Guess what it does ... and a challenge
by kyle (Abbot) on May 24, 2008 at 20:04 UTC
Re: Guess what it does ... and a challenge
by ambrus (Abbot) on May 25, 2008 at 11:40 UTC

    Without running it, I think it will

    die immediately but give some kind of intelligable error about too large a string repetition. This is because ~ in perl5 always gives an unsigned number, so ~@; is not -1 but 2**32-1 or 2**64-1. If that's wrong, my second guess is crashing without any message with a fatal signal, like SIGABRT or SIGSEGV.

    I've ran it. It

Re: Guess what it does ... and a challenge
by shmem (Chancellor) on May 24, 2008 at 22:53 UTC
    First, can you guess what the following code does before running it?

    Oh yes...

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
golf! (now this title is more than one word)
by locked_user mtve (Deacon) on May 31, 2008 at 18:59 UTC
Re: Guess what it does ... and a challenge
by ambrus (Abbot) on May 25, 2008 at 11:54 UTC