Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: Re: Re: (Golf) Kaprekar's Process

by MeowChow (Vicar)
on Jun 17, 2001 at 01:47 UTC ( #89106=note: print w/replies, xml ) Need Help??


in reply to Re: Re: (Golf) Kaprekar's Process
in thread (Golf) Kaprekar's Process

Verrrry cool idea... this can actually come down to 56:
sub k { $_="000"|"@_";/495/?0:1+k(-($_=join'',sort/./g)+reverse) }
The interesting thing about this is that it's not the same as right-formatting the number via sprintf, since the 0 goes to the back, but it doesn't matter because the digits are reordered anyway.
   MeowChow                                   
               s aamecha.s a..a\u$&owag.print

Replies are listed 'Best First'.
Re: Re: Re: Re: (Golf) Kaprekar's Process
by Anonymous Monk on Jun 17, 2001 at 02:49 UTC
    Yeah, i realized the whole @{[pop]} bit wasn't needed about 20 miles from home, figured someone would've already noticed it by the time i got back.. Here's one more:
    sub k { $_=0 x3|"@_";/495/?0:1+k(-($_=join'',sort/./g)+reverse) }
    55

    --sean
      Nice ... It took me a sec to notice it was | and not ||. You can shave off a char by replacing "@_" with pop. I tried to save more, but each time I came up with the same # of chars, just a different way to do it. It almost looks obfuscated now : ), but here's a solution at 54:
      sub k { $_=$-x3|pop;!/495/&&1+k(-($_=join$k,sort/./g)+reverse) }

      Update:Nice catch Sean. I tested it, just not against numbers like 100 233. It looks like the am wins then, unless that can be beaten.

      The 15 year old, freshman programmer,
      Stephen Rawls

      Nope..
      by sean (Beadle) on Jun 18, 2001 at 09:01 UTC
        Nope, you can't use pop, unless you use it like this: "@{[pop]}" .. The quotes turn it into a string instead of an integer, so the | does a bitstring or instead of a numeric or. If either of the operands are numeric, you'll get the numeric or:
        perl -we 'print "000"|1' 1
        that doesn't work for us, we need this:
        perl -we 'print "000"|"1"' 100
        --sean

        and yeah, i came up with a handful of slightly different attempts that all came in at 55 too.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://89106]
help
Chatterbox?
[Corion]: Meh. I have a very simple mechanism to scrape+track prices, and even to send me mail if something changes (via cron), but SQLite doesn't support window functions, so my simple SQL to determine a price change won't work :-( Maybe I should store the DB ...
[Corion]: ... in Pg, but that would mean that I'd have to deal with credentials and stuff :)
[Corion]: In fact, the whole thing is just four simple programs, one App::scrape, another being DBIx::RunSQL, and one some glue to convert a JSON object into an SQL INSERT statement (+DBI connect/execute), so it would be an incredibly simple solution...
[Corion]: ... but that simplicity falls down due to SQLite letting me down and me being too lazy to move to a real DB. Maybe DBD::CSV can handle window functions...
[hippo]: Pg has the "trust" mechanism if you don't fancy using credentials for a trivial db.
[Corion]: hippo: Oooh, that sounds quite nice - let me read the documentation on that :)

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (7)
As of 2018-02-23 15:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    When it is dark outside I am happiest to see ...














    Results (302 votes). Check out past polls.

    Notices?