Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
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 imbibing at the Monastery: (9)
As of 2014-09-17 20:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (98 votes), past polls