为什么我没有得到J中Euler 56的正确答案?

时间:2010-06-15 07:47:53

标签: j tacit-programming

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

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

这是我在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 个答案:

答案 0 :(得分:3)

原因是你在游戏中应用扩展精度(x:)太晚了。你做的第一件事就是切换到扩展精度(例如i. x: 99),你应该全部设定。

关于cartesian的其他说明。您可能想看一下J的内置"table" adverb (/)

   ^/~ >: 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