From 854a99118fdecc7f172250c9095ae9ad199a71c9 Mon Sep 17 00:00:00 2001 From: daviddoji Date: Wed, 5 Oct 2022 20:15:51 +0200 Subject: [PATCH] Reduce allocations and FfOrmatting --- src/Julia/Problems001-050/Problem004.jl | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Julia/Problems001-050/Problem004.jl b/src/Julia/Problems001-050/Problem004.jl index 4feb1bf..b21ca3d 100644 --- a/src/Julia/Problems001-050/Problem004.jl +++ b/src/Julia/Problems001-050/Problem004.jl @@ -10,9 +10,13 @@ https://projecteuler.net/problem=4 =# using BenchmarkTools -function ispalindrome(n) - s = string(n) - s == reverse(s) +ispalindrome(x::Integer, numdigits = ndigits(x)) = _ispalindrome(x, 10^(numdigits - 2)) +function _ispalindrome(x::Integer, divider) + x < 10 && return iszero(x) || iszero(divider) + (x, digit1) = divrem(x, 10) + (digit2, x) = divrem(x, divider) + + return digit1 == digit2 && _ispalindrome(x, div(divider, 100)) end @@ -25,8 +29,9 @@ function Problem4() ans = 10_001 for i = 100:999, j = i:999 - if ((i * j > ans) && ispalindrome(i * j)) - ans = i * j + num = i * j + if ((num > ans) && ispalindrome(num, ndigits(num))) + ans = num end end