Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Re^3: Homework Golf (35)

by Grimy (Pilgrim)
on Dec 06, 2013 at 09:14 UTC ( #1065935=note: print w/replies, xml ) Need Help??

in reply to Re^2: Homework Golf (35)
in thread Homework Golf

There’s a third alternative using uc :
#23456789_123456789_123456789_123456789_12 perl -nlE'65^unpack"%c*","?"x30&uc or say'
Those spaces around or are annoying... Let's use something else to express conditionnal printing. With -p, x= does the job:
#23456789_123456789_123456789_123456789_1 perl -ple'$_ x=65==unpack"%c*","?"x30&uc'
While we're looking at those switches... Why the -l? Removing it and adding ord("\n") (10) to the target (65) shaves another stroke:
#23456789_123456789_123456789_123456789_ perl -pe'$_ x=75=~unpack"%c*","?"x30&uc'
There's a much shorter solution using a 6-bit checksum. The problem is that it comes up with a few false positives (words whose value is 1, 129, 193...):
#23456789_123456789_123456789_1234 perl -ple'$_ x=1==unpack"%6c*",uc' perl -pe'$_ x=11==unpack"%6c*",uc'
Using a 5-bit checksum removes the need for uc, but brings even more false positives:
#23456789_123456789_123456789_1 perl -ple'$_ x=1==unpack"%5c*"' perl -pe'$_ x=11==unpack"%5c*"' perl -nlE'1^unpack"%5c*"or say' perl -nE'11^unpack"%5c*"or say'

Replies are listed 'Best First'.
Re^4: Homework Golf (35)
by McD (Chaplain) on Dec 09, 2013 at 18:18 UTC

    I'm pretty sure we have a winner here, at least in the perl5 division. Congrats for making me go look up x= ("Get outta here, that's legal? So it is!") and for the brilliant insight that lets you shave off the -l. +10 internets to Grimy!

      Congrats for making me go look up x= ("Get outta here, that's legal? So it is!")
      For Perl historians, note that the "$_ x= boolean expression" idiom is attributed to Larry Wall in the early 1990s. IIRC, this attribution was made by japhy around the time of the first fwp golf games in 2001, for example it is mentioned in this post and elsewhere.

      Also of interest for Perl golf historians is that, as indicated in mtve's golf history book (page 36), Eugene van der Pijll won the second ever fwp golf game, "Get Even", in 2002, by employing Larry's concoction:

      -p $_ x=1&~$.&split$&while aeiouy=~/.?/g
      to solve a similar problem to this game, namely printing all words in a dictionary that satisfy the following constraints: i) are on an even line in the words file; ii) have an even word length; iii) contain an even number of each and every vowel.

      BTW, this game produced some very funny looking solutions, such as this one by Sean McAfee (which, if you squint, you will notice uses Abigail's length horror y///c):

      -ln 1&($.|y|||c|y|a|||y|e|||y|i|||y|o|||y|u|||y|y||)||print

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2021-07-30 12:10 GMT
Find Nodes?
    Voting Booth?

    No recent polls found