2010-06-15 64 views
3

我已經解決了歐拉問題的84個問題,主要是在Haskell中。我現在在學習J.爲什麼我在J中不能得到歐拉56的正確答案?

目前回去,並試圖以J解決一些那些我已經哈斯克爾解決了,作爲一個練習,我試圖解決Problem 56。讓我強調一下我已經知道正確答案是,因爲我已經在Haskell中解決了它。這是一個非常簡單,微不足道的問題。 我不會在這裏給出答案。

這是我以J溶液:

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

這產生比期望的結果以下的數。換句話說,這是錯誤的。那裏的任何J-ers都知道爲什麼?我很困惑,因爲它非常簡單而且完全暴躁。

回答

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 
+0

那就修好了!它還解決了我正在研究的其他一些項目歐拉問題。我正在調查這個表格副詞。 – 2010-06-17 06:05:49

+0

我剛剛意識到我已經熟悉了表格副詞,但並沒有意識到你可以將它用於笛卡爾操作。 – 2010-06-17 06:08:47

+2

哦!當它被二元使用!我知道了。非常好! – 2010-06-17 06:10:27

相關問題