0

Project Euler #1 ソリューションの別のアプローチを次に示します。

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

それをリファクタリングする方法は?

4

3 に答える 3

3
[:+/@~.@,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'
于 2009-10-23T16:27:31.407 に答える
3
+/(#~ ( (0= 3| ]) +. (0 = 5 |]) )) 1+i.999

0 = ( 3 | ])nuv で動詞の訓練 (フォーク) のトリックを (2 回) 使用します ( http://www.jsoftware.com/help/learning/09.htmの最後で説明)

別の書き方:

+/(#~ ( ((0&=) @ (3&|)) +. ((0&=) @ (5&|)))) 1+i.999
于 2012-12-14T20:59:05.250 に答える
1

単純な汎用動詞を使用した別のアプローチを次に示します。

multiplesbelow =: 4 : 'I. 0 = x | i.y'
+/ ~. ,3 5 multiplesbelow"0 [ 1000
于 2009-11-14T06:03:35.817 に答える