문제

다음은 Project Euler #1 솔루션에 대한 다른 접근법입니다.

+/~.(3*i.>.1000%3),5*i.>.1000%5

그것을 리팩터링하는 방법?

도움이 되었습니까?

해결책

[:+/@~.@,3 5([*i.@>.@%~)]

사용 예 :

f =: [:+/@~.@,3 5([*i.@>.@%~)]
f 1000

또는

+/~.,3 5([*i.@>.@%~)1000

%~                        = 4 : 'y % x'
i.@>.@%~                  = 4 : 'i. >. y % x'
[*i.@>.@%~                = 4 : 'x * i. >. y % x'
3 5([*i.@>.@%~)]          = 3 : '3 5 * i. >. y % 3 5'
[:+/@~.@,3 5([*i.@>.@%~)] = 3 : '+/ ~. , 3 5 * i. >. y % 3 5'

다른 팁

+/(#~ ( (0= 3| ]) +. (0 = 5 |]) )) 1+i.999

0 = ( 3 | ]) (두 번) NUV (끝에 논의 된 동사 열차)의 트릭을 사용합니다. http://www.jsoftware.com/help/learning/09.htm)

다른 글을 쓰는 방법 :

+/(#~ ( ((0&=) @ (3&|)) +. ((0&=) @ (5&|)))) 1+i.999

간단하고 일반적인 동사를 사용하는 또 다른 접근법이 있습니다.

multiplesbelow =: 4 : 'I. 0 = x | i.y'
+/ ~. ,3 5 multiplesbelow"0 [ 1000
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top