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は特別ステージっぽい作りだけど、問題はわりと普通かな。