이 줄리아 식 배열을 만들지 않도록 할 수있는 방법이 있나요 :줄리아 식으로 배열을 만들지 않도록 할 방법이 있습니까?
max((filter(n -> string(n) == reverse(string(n)), [x*y for x = 1:N, y = 1:N])))
을하고이 파이썬 발전기 표현과 유사한 동작합니다
max(x*y for x in range(N+1) for y in range(x, N+1) if str(x*y) == str(x*y)[::-1])
줄리아 버전은 파이썬으로 인해 다음 2.3 배 느립니다 배열 할당과 N * N 반복 대 파이썬의 N * N/2.
편집
줄리아 몇 구현으로 비트를 연주 후, 내가있어 가장 빠른 루프 스타일의 버전은 다음과 같습니다
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
하지만 개선 된 기능 버전은 멀리 뒤에되지 않습니다 (2 배 더 큰 도메인을 고려하면 14 % 만 느리거나 상당히 빠름) :
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
예기치 않은 perf 이 페이지의 상단에 오리지널 버전과 비교하여 isPalindrome
기능을 정의하여 분위기를 개선하십시오.
멋진 작품. 여기에'filter (isPalindrome, ...)'을 쓸 수 있습니다. – StefanKarpinski
@StefanKarpinski 감사합니다. 지금은 훨씬 좋네요. –