Groovyで「立方根の計算 どう書く?org」を解いてみた

2021-02-24Groovy

立方根の計算 どう書く?org をといてみました。(今更ですね。かなり昔の問題です。)

問題

xは0以上1000未満の実数です。 y * y * y = x になるような実数y(立方根)を小数点以下12桁以上の正確さで 求める関数cube_rootを作って下さい。

ただし、このお題の趣旨は実数区間での探索なので、 立方根関数があっても使ってはいけません。 指数関数と対数関数も禁止します。

pythonで表現した入出力の例:

>>> cube_root(10.0)
2.1544346900318834
>>> _ ** 3
9.9999999999999947
>>> cube_root(100.0)
4.6415888336127793
>>> _ ** 3
100.00000000000003

答え

def cubeRoot(num, left = 2, right = -16) {
    def ans = 0
    left.downto(right) { rank ->
        def findnum = (9..1).find { (ans + it * (10**rank))**3 <= num } ?: 0
        ans += findnum * (10**rank)
    }
    ans
}

println cubeRoot(10)
println cubeRoot(100)

ひとこと

怠け癖があるので、毎日こうやって少しずつ課題を解いていけるようにしたいです。

それにしても解法(数学的なものなど)を知っているのと知らないのでは、コードが大きく違います。いろんな知識を身につけておくのが大事ということですね。



2021-02-24Groovy