from math import acos, sin, cos, radians, floor
RADIUS_MILES = 3963
class Solution:
def __init__(self):
self.city_map = {}
pass
def handle_location(self, line_arr):
city = line_arr[1]
print(line_arr[2],"degree")
lat_rad = radians(float(line_arr[2]))
long_rad = radians(float(line_arr[3]))
self.city_map[city] = [lat_rad,long_rad]
def calculate_distance(self,line_arr):
city_1 = self.city_map[line_arr[2]]
city_2 = self.city_map[line_arr[3]]
abs_long_dif = abs(city_1[1]-city_2[1])
sin_pro = sin(city_1[0])*sin(city_2[0])
cos_pro = cos(city_1[0])*cos(city_2[0])*cos(abs_long_dif)
distance = floor(RADIUS_MILES*acos(sin_pro+cos_pro))
return ":".join(line_arr[1:]+[str(distance)])
def process(self,line):
line_arr = line.split(":")
if(line_arr[0] == "LOC"):
self.handle_location(line_arr)
return line_arr[1]
else:
return self.calculate_distance(line_arr)
pass
sol = Solution()
print(sol.process("LOC:CHI:41.836944:-87.684722"))
print(sol.process("LOC:NYC:40.7127:-74.0059"))
print(sol.process("TRIP:C0FFEE1C:CHI:NYC"))
ZnJvbSBtYXRoIGltcG9ydCBhY29zLCBzaW4sIGNvcywgcmFkaWFucywgZmxvb3IKUkFESVVTX01JTEVTID0gMzk2MwoKY2xhc3MgU29sdXRpb246CglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi5jaXR5X21hcCA9IHt9CgkJcGFzcwoJCglkZWYgaGFuZGxlX2xvY2F0aW9uKHNlbGYsIGxpbmVfYXJyKToKCQljaXR5ID0gbGluZV9hcnJbMV0KCQlwcmludChsaW5lX2FyclsyXSwiZGVncmVlIikKCQlsYXRfcmFkID0gcmFkaWFucyhmbG9hdChsaW5lX2FyclsyXSkpCgkJbG9uZ19yYWQgPSByYWRpYW5zKGZsb2F0KGxpbmVfYXJyWzNdKSkKCQlzZWxmLmNpdHlfbWFwW2NpdHldID0gW2xhdF9yYWQsbG9uZ19yYWRdCgkJCglkZWYgY2FsY3VsYXRlX2Rpc3RhbmNlKHNlbGYsbGluZV9hcnIpOgoJCWNpdHlfMSA9IHNlbGYuY2l0eV9tYXBbbGluZV9hcnJbMl1dCgkJY2l0eV8yID0gc2VsZi5jaXR5X21hcFtsaW5lX2FyclszXV0KCQlhYnNfbG9uZ19kaWYgPSBhYnMoY2l0eV8xWzFdLWNpdHlfMlsxXSkKCQlzaW5fcHJvID0gc2luKGNpdHlfMVswXSkqc2luKGNpdHlfMlswXSkKCQljb3NfcHJvID0gY29zKGNpdHlfMVswXSkqY29zKGNpdHlfMlswXSkqY29zKGFic19sb25nX2RpZikKCQlkaXN0YW5jZSA9IGZsb29yKFJBRElVU19NSUxFUyphY29zKHNpbl9wcm8rY29zX3BybykpCgkJcmV0dXJuICI6Ii5qb2luKGxpbmVfYXJyWzE6XStbc3RyKGRpc3RhbmNlKV0pCgkJCgkJCglkZWYgcHJvY2VzcyhzZWxmLGxpbmUpOgoJCWxpbmVfYXJyID0gbGluZS5zcGxpdCgiOiIpCgkJaWYobGluZV9hcnJbMF0gPT0gIkxPQyIpOgoJCQlzZWxmLmhhbmRsZV9sb2NhdGlvbihsaW5lX2FycikKCQkJcmV0dXJuIGxpbmVfYXJyWzFdCgkJZWxzZToKCQkJcmV0dXJuIHNlbGYuY2FsY3VsYXRlX2Rpc3RhbmNlKGxpbmVfYXJyKQoJCXBhc3MKCnNvbCA9IFNvbHV0aW9uKCkKcHJpbnQoc29sLnByb2Nlc3MoIkxPQzpDSEk6NDEuODM2OTQ0Oi04Ny42ODQ3MjIiKSkKcHJpbnQoc29sLnByb2Nlc3MoIkxPQzpOWUM6NDAuNzEyNzotNzQuMDA1OSIpKQpwcmludChzb2wucHJvY2VzcygiVFJJUDpDMEZGRUUxQzpDSEk6TllDIikpCg==