3

我已经解决了 84 个 Project Euler 问题,主要是在 Haskell 中。我现在回去尝试在 J 中解决一些我已经在 Haskell 中解决的问题,作为学习 J 的练习。

目前,我正在尝试解决问题 56。让我强调一下,我已经知道正确答案是什么,因为我已经在 Haskell 中解决了它。这是一个非常简单、微不足道的问题。我不会在这里给出答案。

这是我在 J 中的解决方案:

数字 =: ("."0)@":"0
eachDigit =: adverb : 'u@:digits"0' 注意。我经常使用这个,所以我把它变成了副词。
笛卡尔 =: 副词 : '((#~ #) u ($~ *:@#))'
>./ +/ eachDigit x: ^笛卡尔 >: i. 99

这会产生一个小于预期结果的数字。换句话说,它在某种程度上是错误的。那里有J-ers知道为什么吗?我很困惑,因为它非常简单而且完全是蛮力。

4

1 回答 1

3

原因是您x:在游戏中应用扩展精度 ( ) 为时已晚。在你做的第一件事(例如i. x: 99)切换到扩展精度,你应该已经准备好了。

另一个注意事项,关于您的cartesian. 您可能想看看 J 的内置“table”副词 ( /)

   ^/~ >: 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
于 2010-06-16T22:09:10.633 回答