Почему я не получаю правильный ответ на Euler 56 в J? - PullRequest
3 голосов
/ 15 июня 2010

Я решил 84 проблемы Project Euler, в основном в Haskell.Сейчас я возвращаюсь и пытаюсь решить в J некоторые из тех, которые я уже решил в Хаскеле, как упражнение в изучении J.

В настоящее время я пытаюсь решить проблему 56 .Позвольте мне подчеркнуть, что Я уже знаю, какой правильный ответ , так как я уже решил его в Хаскеле.Это очень простая, тривиальная проблема. Я не буду здесь давать ответ.

Вот мое решение в J:

digits =: ("."0)@":"0
eachDigit =: adverb : 'u@:digits"0' NB. I use this so often I made it an adverb.
cartesian =: adverb : '((#~ #) u ($~ *:@#))'
>./ +/ eachDigit x: ^ cartesian >: i. 99

Это дает число меньше желаемого результата.Другими словами, это как-то не так.Любой Джерс там знает почему?Я сбит с толку, так как это довольно прямолинейно и грубо.

1 Ответ

3 голосов
/ 17 июня 2010

Причина в том, что вы применяете расширенную точность (x:) слишком поздно в игре. Переключитесь на расширенную точность в первую очередь (например, i. x: 99), и все должно быть готово.

Еще одно замечание, касающееся вашего cartesian. Возможно, вы захотите взглянуть на встроенное в табличное наречие J (/) :

   ^/~ >: i.5
1  1   1   1    1
2  4   8  16   32
3  9  27  81  243
4 16  64 256 1024
5 25 125 625 3125

   , ^/~ >: i.3
1 1 1 2 4 8 3 9 27
...