Вот другой подход для проекта Эйлера # 1 решение:Как реорганизовать это в J?
+/~.(3*i.>.1000%3),5*i.>.1000%5
Как реорганизовать его? Пример
Вот другой подход для проекта Эйлера # 1 решение:Как реорганизовать это в J?
+/~.(3*i.>.1000%3),5*i.>.1000%5
Как реорганизовать его? Пример
[:+/@[email protected],3 5([*[email protected]>[email protected]%~)]
использование:
f =: [:+/@[email protected],3 5([*[email protected]>[email protected]%~)]
f 1000
или
+/~.,3 5([*[email protected]>[email protected]%~)1000
%~ = 4 : 'y % x'
[email protected]>[email protected]%~ = 4 : 'i. >. y % x'
[*[email protected]>[email protected]%~ = 4 : 'x * i. >. y % x'
3 5([*[email protected]>[email protected]%~)] = 3 : '3 5 * i. >. y % 3 5'
[:+/@[email protected],3 5([*[email protected]>[email protected]%~)] = 3 : '+/ ~. , 3 5 * i. >. y % 3 5'
Это разборчиво для вас? Я все еще пытаюсь выяснить каждый шаг рефакторинга ... –
спасибо за последнее редактирование, которое уточнял –
Вот другой подход, с использованием простой, универсальный глагол
multiplesbelow =: 4 : 'I. 0 = x | i.y'
+/ ~. ,3 5 multiplesbelow"0 [ 1000
Nice! Как насчет 'multiplesBelow =: 4: '(# ~ +./(0 = x |])" 0) i. Y''? Тогда вы можете сказать '+/3 5 multiplesBelow 1000'. –
+/(#~ ((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
Вы проверяли форум проекта euler для проблемы № 1? http://projecteuler.net/index.php?section=forum&id=1 – Macarse
Я получил этот код оттуда. Но форум заблокирован. –