Как рефакторинг это в J?

Вот другой подход для решения Project Euler # 1:

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

Как это сделать?

12.10.2009 23:37:48
Вы проверили форум проекта Эйлера на проблему № 1? projecteuler.net/index.php?section=forum&id=1
Macarse 12.10.2009 23:57:17
Я получил этот код оттуда. Но форум заблокирован.
Jader Dias 13.10.2009 00:04:24
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'
2
24.10.2009 17:29:43
это разборчиво для тебя? Я все еще пытаюсь выяснить каждый шаг рефакторинга ...
Jader Dias 23.10.2009 22:07:39

Вот другой подход, использующий простой, общий глагол

multiplesbelow =: 4 : 'I. 0 = x | i.y'
+/ ~. ,3 5 multiplesbelow"0 [ 1000
1
14.11.2009 06:03:35
Ницца! Как насчет multiplesBelow =: 4 : '(#~ +./(0 = x | ])"0) i. y'? Тогда ты можешь сказать +/ 3 5 multiplesBelow 1000.
Gregory Higley 29.06.2010 18:52:54
+/(#~ ( (0= 3| ]) +. (0 = 5 |]) )) 1+i.999

0 = ( 3 | ])использует (дважды) трюк поезда глагола (fork) с nuv (обсуждается в конце http://www.jsoftware.com/help/learning/09.htm )

Другой способ написать это:

+/(#~ ( ((0&=) @ (3&|)) +. ((0&=) @ (5&|)))) 1+i.999
3
14.12.2012 20:59:05