/
Hello_World!.py
68 lines (58 loc) · 2.13 KB
/
Hello_World!.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import sys
import math
n = int(input()) # number of capitals
m = int(input()) # number of geolocations for which to find the closest capital
class Captial:
def __init__(self, name, lat, lon, message):
self.name = name
self.lat = lat
self.lon = lon
self.message = message
self.distance = -1
def return_lat(self):
lat = self.lat
facing = lat[0]
degree = lat[1:3]
mins = lat[3:5]
sec = lat[5:7]
return convert_std(facing, degree, mins, sec)
def return_lon(self):
lon = self.lon
facing = lon[0]
degree = lon[1:4]
mins = lon[4:6]
sec = lon[6:8]
return convert_std(facing, degree, mins, sec)
def convert_std(facing, hh, mm, ss):
if facing in ['N', 'E']:
return float(hh) + float(mm) / 60.0 + float(ss) / 3600.0
else:
return -1 * (float(hh) + float(mm) / 60.0 + float(ss) / 3600.0)
captial_object = {}
for i in range(n):
name, lat, lon = input().split()
cap = Captial(name, lat, lon, '')
captial_object[i] = cap
for i in range(n):
captial_object.get(i).message = input()
for i in range(m):
lat, lon = input().split()
ncap = Captial('', lat, lon, '')
# print(lat,lon,file=sys.stderr)
for i in range(n):
x1 = math.radians(captial_object.get(i).return_lat())
y1 = math.radians(captial_object.get(i).return_lon())
x2 = math.radians(ncap.return_lat())
y2 = math.radians(ncap.return_lon())
distance = int(round(6371 * math.acos(math.sin(x1) * math.sin(x2) + (math.cos(x1) * math.cos(x2) * math.cos(abs(y1 - y2))))))
# print(distance,x1,y1,ncap.lat,ncap.lon,captial_object.get(i).name,file=sys.stderr)
if ncap.distance == -1:
# set the first one
ncap.distance = distance
ncap.message = captial_object.get(i).message
elif ncap.distance == distance:
ncap.message = ncap.message + ' ' + captial_object.get(i).message
elif ncap.distance > distance:
ncap.distance = distance
ncap.message = captial_object.get(i).message
print(ncap.message)