J에서 이것을 리팩터링하는 방법?
-
21-09-2019 - |
문제
다음은 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
제휴하지 않습니다 StackOverflow