summer_tree_home

Check iOでPython3をマスターするぜっ

Humpty Dumpty Form (Alice In Wonderland) - 回転楕円体の体積と表面積

どんな問題?

Humpty Dumpty Form
http://www.checkio.org/mission/humpty-dumpty/

回転楕円体の体積と表面積を求めよ。

引数は、回転楕円体の高さと幅が整数値で与えられる。
戻り値は、体積と表面積を小数点以下2桁で返す。

例題:

checkio(4, 2) == [8.38, 21.48]
checkio(2, 2) == [4.19, 12.57]
checkio(2, 4) == [16.76, 34.69]

どうやって解く?

まずは、Wikipediaで調べる。

ちゃんと体積と表面積の求め方も載っているので、そのままコードにするだけ。

  • 引数の高さと幅は直径なので、赤道半径 a と極半径 b にしておく。
  • 表面積は、扁球(a>b)、長球(a<b)、球(a==b)のときで式が違う。
    • 扁球、長球の表面積は、Wikipedia
    • 球の表面積は、4πr2
  • 式の中のtanh-1は math.atanh()、sin-1は math.asin() を使う。
  • xを小数点以下2桁にするには、round(x,2)とする。

まとめ

import math

def checkio(height, width):
    a, b = width / 2, height / 2

    # 体積
    volume = 4 / 3 * math.pi * a ** 2 * b
    # 表面積
    e = math.sqrt(1 - (min(a, b) / max(a, b)) ** 2)
    if a == b:
        surface_area = 4 * math.pi * a ** 2
    elif a > b:
        surface_area = 2 * math.pi * (a ** 2 + b ** 2 * math.atanh(e) / e)
    else:
        surface_area = 2 * math.pi * (a ** 2 + a * b * math.asin(e) / e)

    return [round(volume, 2), round(surface_area, 2)]

http://www.checkio.org/mission/humpty-dumpty/publications/natsuki/python-3/first/


今回は簡単だった。Alice In Wonderlandは特別ステージっぽい作りだけど、問題はわりと普通かな。