我不知道Ruby,但我想了解歐拉#17問題的代碼。我理解這個問題,並且理解代碼的前幾行。並且,我搜索了關於個人方法,如puts
和injects
。我不明白代碼在|sum,n|
之後要做什麼。如何將Ruby代碼轉換爲僞代碼?
有人可以將它翻譯成某種僞代碼嗎?
這是the code:
digit = [ 4, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 8, 7, 9, 8, 8 ]
decade = [4, 3, 6, 6, 5, 5, 5, 7, 6, 6]
puts (1..1000).inject(0) { |sum, n|
sum, n = sum + 11, n % 1000 if n > 999
sum, n = sum + digit[n/100] + (n % 100 > 0 ? 10 : 7), n % 100 if n > 99
sum, n = sum + decade[n/10], n % 10 if n > 19
sum += digit[n] if n > 0
sum
}
如果你瞭解'puts'和'inject',其餘的是僞代碼。 – 2011-12-22 20:14:01
查看Ruby Array類和Enumerate模塊。那你很好。 – three 2011-12-22 20:15:45
如果我遇到有人使用「','」操作符將行連接到這樣的條件,我會在代碼審查中對它們進行編程。雖然它是一個可用的加入操作的操作符,但它幾乎不常見或習慣用法,並且不會加速代碼或使其更具可讀性。避開這種做法,遵循Ruby的啓發式禪宗代碼。 – 2011-12-22 20:48:50