Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^4: Pascal-Sierpinski for golfers

by eyepopslikeamosquito (Canon)
on Dec 01, 2011 at 03:16 UTC ( #940996=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Pascal-Sierpinski for golfers
in thread Pascal-Sierpinski for golfers

for($/)x16
A slick way of getting the newline (vis--vis -l print until...)! Changing the loop to for($_)x16 is informative. And, since a bare print prints both $_ and $/, I found it rather unobvious which variable holds the strings.
Actually, $/ is the input record separator, so a bare print does not print it. What's being printed is just the (localized) $_ inside the for loop. Of course, a bare print will print $\, aka the output record separator, often seen in golf, as in, for example, The golf course looks great, my swing feels good, I like my chances (Part I).

The for($/)x16 loop aliases $/ and, despite the x16, only the single $/ value is (repeatedly) changed, as you will discover by printing it after the loop has terminated. Replacing "print" with "warn" like so:

s/^|\d+/$&+$'||1/eg,warn("du='$_' ds='$/'\n"),s// /for($/)x16; warn("at end du='$_' ds='$/'\n");
should clarify. BTW, this eccentric "for loop aliasing" trick is often seen in golf; see, for example, Drunk on golf: 99 Bottles of Beer in the "Bottle Golf Tip No 2" section (search for Cantor). Finally, the "for loop aliasing" trick is a specific example of Eugene van der Pijll's general golfing mantra, "Can't possibly work, let's try it anyway". :)


Comment on Re^4: Pascal-Sierpinski for golfers
Select or Download Code
Re^5: Pascal-Sierpinski for golfers
by hbm (Hermit) on Dec 02, 2011 at 17:15 UTC

    Doh, I flubbed that ($/ vs. $\). I so often print$/,/expr/?this:that, I confused myself.

    And darn you - I had already read your lengthy linked topics, and perhaps all of their references, but I find them irresistable! This time through, I most enjoyed this gem:

    s///ge>>9?print:do$0

    The :do$0 is one *sick* loop. And the return value from s/// idea gave me the following "for 1 to 15" method:

    perl -le'$_=1;{print,s/(\d+) ?/+$1 $1/g,s/\S+/$&/eeg>16||redo}'

    A couple more tricks for me!

      Yes, I too find the "do$0" loop hilarious. A great write-up of its use in the 2002 Kolakoski game by good ol' Rick Klement can be found here and also in Mtv's book of golf (page 105). I believe Ton Hospel was the first person to use the eccentric "do$0" loop in a golf competition. And thanks for the "redo" tip; I'd forgotten about redo after all these years. :)

      Update: Just noticed another Rick Klement gem where he concludes with: Lesson to be learned: try something before you say "that can't work" ... which looks like an independent invention of Eugene van der Pijll's famous golfing aphorism: Can't possibly work, let's try it anyway. :)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (13)
As of 2015-07-02 10:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (34 votes), past polls