4
I want to write a function golf(C, A)
that takes the height (C = 2*c
) and the width (A = 2*a
) of an oblate (left image) or prolate (right image) spheroid or a sphere as parameters and returns the volume V
and the surface area S
of the shape as tuple. The output must be rounded to two decimal places.
All input and output numbers are floating point decimals.
The input numbers (A
and C
) are guaranteed to be greater than 0 and lower than 100.
Here are some example calls of the function (golf(C, A)
) in Python 3 and the expected outputs given as test cases:
golf(4, 2) # expected output (8.38, 21.48)
golf(2, 2) # expected output (4.19, 12.57)
golf(2, 4) # expected output (16.76, 34.69)
The challenge requires my code to be smaller than 150 characters.
I could not manage to solve it myself yet, my best solution in Python 3 still takes 220 characters:
from math import *
def golf(C,A):
c,a,V=C/2,A/2,pi/6*A*A*C;F=c*c/a**2;E=sqrt(1-(F if a>c else 1/F));S=4*pi*a*a if a==c else 2*pi*a*a*(1+(((1-E**2)/E)*atanh(E)if a>c else(c/(a*E))*asin(E)))
return round(V,2),round(S,2)
The necessary formulas are taken from Wikipedia: Spheroid, here's a summary:
Vall spheroids = 4 π/3 a²c = π/6 A²C as A=2a and C=2c.
This challenge was originally from checkio.org and got refactored into a code-golf challenge for empireofcode.com.
2
Rounded how? Reference
– Peter Taylor – 2016-04-11T09:39:02.907Were comments purged? Why were all the comments purged? – cat – 2016-04-15T18:18:00.700
1@cat Most of the comments became obsolete when this was turned into a tips question. The one that didn't didn't get deleted. – Dennis – 2016-04-16T14:38:54.757