Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^2: Find the shortest word in the English Language with: a b c d e f

by jwkrahn (Abbot)
on Jul 04, 2018 at 18:51 UTC ( [id://1217899]=note: print w/replies, xml ) Need Help??


in reply to Re: Find the shortest word in the English Language with: a b c d e f
in thread Find the shortest word in the English Language with: a b c d e f

push@{$_[length]},$_
push@{$_[y///c]},$_
map{$_?@$_:()}@_
map$_?@$_:(),@_

Replies are listed 'Best First'.
Re^3: Find the shortest word in the English Language with: a b c d e f
by Eily (Monsignor) on Jul 05, 2018 at 08:22 UTC

    Yes, and I can remove three additional chars by using bareword a and f rather than strings:

    @ARGV="/usr/share/dict/words";while(<>){$a='a';$a++while/$a/i;push@{$_ +[length]},$_ if$a gt'f'}@_=map{$_?@$_:()}@_ @ARGV="/usr/share/dict/words";while(<>){$a=a;$a++while/$a/i;push@{$_[y +///c]},$_ if$a gt f}@_=map$_?@$_:(),@_

    And who needs a path when perl can just guess? :P. @ARGV=</*/*/*/words>;while(<>){$a=a;$a++while/$a/i;push@{$_[y///c]},$_ if$a gt f}@_=map$_?@$_:(),@_ Which brings the count to 100 chars (including the \n)

      I'm not accustomed to needing to specify the argument within the code. It's not like it's a command-line flag. I count yours at 78.

      while(<>){$a=a;$a++while/$a/i;push@{$_[y///c]},$_ if$a gt f}@_=map$_?@ +$_:(),@_

      If you're to actually print out the shortest, make it 89. Still quite a bit shorter than mine.

      while(<>){$a=a;$a++while/$a/i;push@{$_[y///c]},$_ if$a gt f}@_=map$_?@ +$_:(),@_;print$_[0]

      Of course, looking closely only one of your loops needs to be of the 'while' variety. 87 (or 76 unconcerned about output).

      for(<>){$a=a;$a++while/$a/i;push@{$_[y///c]},$_ if$a gt f}@_=map$_?@$_ +:(),@_;print$_[0]
      for(<>){$a=a;$a++while/$a/i;push@{$_[y///c]},$_ if$a gt f}@_=map$_?@$_ +:(),@_
        I'm not accustomed to needing to specify the argument within the code

        Since the discussion started as a comparison against python, I wanted to play fair-ish and have code that actually does the same thing (technically, the same thing as the perl version in the OP). That's why I didn't include the glob version in the first place, or didn't print the result

        Of course, looking closely only one of your loops needs to be of the 'while' variety

        Nice catch! I'm far too used to using while for files to have seen this one :-).

        Two chars off if you put the constant first in the commaprison (good practice anyways :) and get rid of the 'if' statement modifier using '&&':

        for(<>){$a=a;$a++while/$a/i;f lt$a&&push@{$_[y///c]},$_}@_=map$_?@$_:( +),@_;print$_[0]

        Five chars of if you get rid of transforming @_ and grab directly what you want:

        for(<>){$a=a;$a++while/$a/i;f lt$a&&push@{$_[y///c]},$_}print+(map$_?@ +$_:(),@_)[0]

        82. I'm sure tybalt89 can do better, though.

        update: I wonder why biface isn't a verb proper, meaning treat someone with a biface. The shortest word would then be bifaced which seems fitting to me, huffman-coding anglo-saxonian history.

        perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (6)
As of 2024-04-18 18:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found