Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^3: Challenge: Nearest Palindromic Number

by halley (Prior)
on Feb 02, 2005 at 19:27 UTC ( [id://427385]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Challenge: Nearest Palindromic Number
in thread Challenge: Nearest Palindromic Number

Hrm. That's just an edge case, and will only happen when you find that the palindrate($N) is greater than $N. In those cases, '9'x(length($N)-1) would exceed the decrimented '0990' value.

I'm still thinking out loud at this stage, but it doesn't seem like you'd have to iterate at all, to find provably close palindromic numbers.

--
[ e d @ h a l l e y . c c ]

Replies are listed 'Best First'.
Re^4: Challenge: Nearest Palindromic Number
by herveus (Prior) on Feb 02, 2005 at 19:51 UTC
    Howdy!

    sub palindrate { my $X = shift; my $front = substr($X, 0, (length($X)+1)/2); my $back = reverse $front; substr($back, 0, 1) = '' if length($X) % 2; my $front2 = $front+1; my $back2 = reverse $front2; substr($back2, 0, 1) = '' if length($X) % 2; my $N1 = $front.$back; my $N2 = $front2.$back2; return (abs($X-$N1) < abs($X-$N2)) ? $N1 : $N2; }

    Update: fixed typo in code so it really does work as coded now. The algorithm was correct; the implementation was flawed...and use warnings would have pointed it right out to me...

    Further update: *busted*...It's still not quite right... 91 breaks... ...but I'm gonna leave the code as it stands

    yours,
    Michael
      Try 199. The answer should be 202, but you give 191.

      Update: After the fix, try 91. This gives 99 when 88 should be the answer.

Re^4: Challenge: Nearest Palindromic Number
by Limbic~Region (Chancellor) on Feb 02, 2005 at 19:34 UTC
    halley,
    Forgive my hasty initial response. I knew your method was flawed but gave a bad test case. 999 and 1001 are both valid when the input is 1000. Your method fails on the updated test case though 1085. The correct answer should be 1111.

    Cheers - L~R

      Which is why I initially mentioned that incrementing would be easy, to find the alternative. If the input isn't already palindromic, you have to find two palindromic alternatives. Roy Johnson wrote the code I foresaw: '10##'++ would be '1111'.

      --
      [ e d @ h a l l e y . c c ]

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2024-04-25 16:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found