代码之家  ›  专栏  ›  技术社区  ›  Gregory Higley

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

  •  3
  • Gregory Higley  · 技术社区  · 14 年前

    我已经解决了84个Euler项目的问题,大部分是在Haskell。我现在回到过去,试着用J来解决一些我想解决的问题 在Haskell中解决,作为学习J。

    目前,我正在努力解决 Problem 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 回复  |  直到 10 年前
        1
  •  3
  •   earl    14 年前

    原因是您正在应用扩展精度( 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
    
    推荐文章