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

halley,
Is there something I'm missing here?

N = 1000, X = 999
N = 1085, X = 1111

Cheers - L~R

  • Comment on Re^2: Challenge: Nearest Palindromic Number

Replies are listed 'Best First'.
Re^3: Challenge: Nearest Palindromic Number
by halley (Prior) on Feb 02, 2005 at 19:27 UTC
    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 ]

      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.

      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 ]

Re^3: Challenge: Nearest Palindromic Number
by herveus (Prior) on Feb 02, 2005 at 19:25 UTC
    Howdy!

    ...yeah, but 1001 is equally valid as an answer...

    yours,
    Michael
      herveus,
      I knew the solution was wrong, but my test data to prove it was flawed. Updated with correct data to show the solution as flawed.

      Cheers - L~R