はじめに
正月にねずみ、父母いでて、子を十二ひきうむ、親ともに十四ひきに成也。此ねずみ二月には子も又子を十二匹ずつうむゆえに、親ともに九十八ひきに成。かくのごとく、月に一度ずつ、親も子も、まごもひこも月々に十二ひきずつうむとき、十二月の間になにほどに成ぞといふときに、二百七十六億八千二百五十七万四千四百二ひき。
この問題は、塵劫記(じんこうき)という、江戸時代(1627年)の算術書に書いてある代表的な問題です。
Elixir
1..12 |> Enum.reduce(2, fn _, acc -> acc + div(acc, 2) * 12 end)
27682574402
(二百七十六億八千二百五十七万四千四百二)を得られます
数学的には2 * (7 ** 12)
で求められるとのことです。
お便りご紹介
読者の @Mnishiguchi さんからお便りをいただきました。
for _ <- 1..12, reduce: 2 do
acc -> acc + div(acc, 2) * 12
end
forの:reduceオプションを使う方法です。
ありがとうございます!
おわりに
ねずみ算をElixirで解いて、27682574402
を得ることができました。
かつては、算額という文化があったそうです。
江戸時代の日本で、額や絵馬に和算の問題や解法を記して、神社や仏閣に奉納したものである。