我已经解决的项目欧拉问题84,主要是在Haskell。现在我要回,并试图以J解决其中的一些我的的解决哈斯克尔,如在学习Ĵ练习。的

目前,我试图解决问题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

这产生了数小于所期望的结果。换句话说,它是错的莫名其妙。任何J-ERS那里知道为什么吗?我百思不得其解,因为它是非常简单的,完全蛮力。

有帮助吗?

解决方案

的原因是要应用扩充精度(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
scroll top