max((filter(n -> string(n) == reverse(string(n)), [x*y for x = 1:N, y = 1:N])))
并使其表现类似于此 Python 生成器表达式:
max(x*y for x in range(N+1) for y in range(x, N+1) if str(x*y) == str(x*y)[::-1])
由于数组分配和N*N迭代,Julia版本比Python慢2.3倍。
编辑
在尝试了几个Julia实现之后,我得到的最快循环方式版本是:
function f(N) # 320ms for N=1000 Julia 0.2.0 i686-w64-mingw32
nMax = NaN
for x = 1:N, y = x:N
n = x*y
s = string(n)
s == reverse(s) || continue
nMax < n && (nMax = n)
end
nMax
end
但是一个功能更好的版本并不远了(只比原来慢14%,如果你考虑到2倍大的域名,它甚至会更快):
function e(N) # 366ms for N=1000 Julia 0.2.0 i686-w64-mingw32
isPalindrome(n) = string(n) == reverse(string(n))
max(filter(isPalindrome, [x*y for x = 1:N, y = 1:N]))
end
在定义isPalindrome
函数后,与本页面顶部原始版本相比,性能提升了2.6倍。
filter(isPalindrome, ...)
。 - StefanKarpinski