Đào đến Úc - antipodes


24

Lý lịch

Vô số thế hệ trẻ em đã tự hỏi chúng sẽ ở đâu nếu chúng đào một cái lỗ trực tiếp xuống dưới. Hóa ra điều này, không có gì đáng ngạc nhiên, khá nguy hiểm , nhưng dù sao thì ...

Antipode là những điểm đối diện trực tiếp với nhau trên bề mặt Trái đất. Điều này có nghĩa là nếu một đường được vẽ giữa hai điểm, nó sẽ đi qua tâm Trái đất.

Thử thách

Viết chương trình hoặc hàm, cho một điểm, tìm antipode của nó.

Trong thử thách này, các điểm được biểu diễn bằng hệ thống kinh độ và vĩ độ, phút cung và giây cung. Để tìm antipode, hoán đổi hướng của mỗi tọa độ ( N <-> SW <-> E) và trừ đi kinh độ từ 180độ.

Ví dụ:
Lấy điểm N 50 26 23 W 4 18 29. Đổi hướng để đưa ra S 50 26 23 E 4 18 29. Trừ các kinh độ từ 180 0 0để cho 175 41 31, để lại các tọa độ cực âm là S 50 26 23 E 175 41 31.

Quy tắc

Đầu vào

Một tập hợp các tọa độ kinh độ vĩ độ, ở bất kỳ định dạng hợp lý nào , trong đó mỗi tọa độ chứa một hướng, một số độ, một số phút cung và một số giây cung.

Đầu ra

Các tọa độ kinh độ vĩ độ của cực âm, ở bất kỳ định dạng hợp lý nào , trong đó mỗi tọa độ chứa một hướng, một số độ, một số phút cung và một số giây cung.

Hãy hợp lý để có nghĩa là mỗi phần của tọa độ có thể được phân biệt rõ ràng.

Thông số kỹ thuật

  • Hướng cho tọa độ vĩ độ là Nhoặc S, và đối với tọa độ kinh độ là Whoặc E.
  • Tất cả các giá trị tọa độ là số nguyên. Giá trị độ sẽ nằm giữa 090cho vĩ độ, và giữa 0180cho kinh độ. Giá trị phút cung và giây cung cho cả hai tọa độ sẽ nằm giữa 059.
  • Nếu tất cả các giá trị cho một tọa độ là 0, một trong hai hướng đều được chấp nhận.
  • Không cần phải đệm bất kỳ giá trị nào.
  • Không có thứ tự vĩ độ nào sẽ lớn hơn 90độ, và không có thứ tự kinh độ nào sẽ lớn hơn 180độ.
  • Tiêu chuẩn áp dụng.

Các trường hợp thử nghiệm

N 50 26 23 W 4 18 29 -> S 50 26 23 E 175 41 31

S 43 9 9 E 0 0 5     -> N 43 9 9 W 179 59 55

N 0 0 0 E 0 0 0      -> S/N 0 0 0 W/E 180 0 0 (either direction fine in each case)

S 1 2 3 W 4 5 6      -> N 1 2 3 E 175 54 54

S 9 21 43 W 150 7 59 -> N 9 21 43 E 29 52 1

S 27 40 2 W 23 0 0   -> N 27 40 2 E 157 0 0

N 0 58 37 W 37 0 0   -> S 0 58 37 E 143 0 0

Liên kết hữu ích

Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng!


Đây có phải là một định dạng hợp lý? Bốn đầu vào: mảng 3 số, char, mảng ba số; cách nhau bởi dòng mới
Luis Mendo

@LuisMendo Trừ khi tôi hiểu lầm bạn, tôi chỉ có thể thấy ba đầu vào; Tôi giả sử bạn sẽ muốn có thêm char? Tôi sẽ nói rằng đó là một định dạng hợp lý. Theo hợp lý, về cơ bản, tôi có nghĩa là mỗi phần của tọa độ có thể được phân biệt rõ ràng.
TheBikingViking

Vâng, tôi đã quên char đầu tiên. Cảm ơn!
Luis Mendo

3
"Khá nguy hiểm"? Mate, mối nguy hiểm thực sự là một khi bạn đến đây .
Andrew Grimm

1
@busukxuan Xin lỗi vì không trả lời sớm hơn. Tôi có thể nói rằng cả hai trong những định dạng không hợp lý, vì spec đòi hỏi N, S, E, hoặc Wnhư một hướng, trong khi dư thừa 0giới thiệu mập mờ như mà giá trị đại diện mà thành phần của phối.
TheBikingViking 6/07/2016

Câu trả lời:


1

05AB1E, 37 34 byte

`60©3L<Rm*O3°648*s-®‰`s®‰s‚˜)'€Ã‡

Giải thích

`                                      # split input to 4 lines with longitude on top
 60©3L<Rm*O                            # convert longitude to seconds
            3°648*                     # longitude 180 0 0 in seconds
                  s-                   # subtract our longitude from this
                    ®‰`                # get seconds part
                       s®‰             # get minute and degrees part
                          s‚˜)         # join to list
                              '€Ã‡    # translate directions

Dùng thử trực tuyến

Chỉnh sửa: Đã lưu 3 byte nhờ Adnan .


Bạn có thể nén "NEWS"đến ‘€Ã‘hoặc thậm chí '€Ãnếu chữ thường được cho phép.
Ad Nam

@Ad Nam: Đẹp quá! Không nghĩ đến việc nén vì chuỗi quá nhỏ.
Emigna

6

JavaScript (ES6), 88 byte

(a,b,c,d,e,f,g,h)=>[a<'S'?'S':'N',b,c,d,e<'W'?'W':'E',!(g|h)+179-f,g|h&&!h+59-g,h&&60-h]

Lấy 8 tham số và trả về một mảng là kết quả. Dự akiến là một trong Nhoặc Stương tự elà một trong Whoặc E. Tính toán:

  • fcần phải được trừ từ 179 nếu một trong hai ghoặc hkhông khác nhưng 180 nếu cả hai ghbằng 0 (vì không có khoản vay nào), do đó !(g|h)được thêm vào 179.
  • gdo đó cần phải bằng 0 nếu cả hai ghbằng 0, do đó g|h&&, nếu không, nó cần được trừ từ 59 nếu hkhông khác nhưng 60 nếu hbằng 0 (vì không có khoản vay nào), do đó !hđược thêm vào 59.
  • h cần phải bằng 0 nếu nó đã bằng 0, nếu không nó chỉ bị trừ từ 60.

Một cách khác để nhìn vào đây là để thông báo rằng trừ ở dạng nhị phân được thực hiện bằng cách thêm sự bổ sung 1s cộng thêm 1. Translated cho vấn đề này, chúng ta lấy 179-f, 59-g59-hvà thêm 1. 59-h+ 1 là 60-h, nhưng nếu điều này là 60 sau đó nó mang , do đó, kết quả mong muốn là 0 nếu hban đầu là 0. Chúng tôi thêm 1 vào 59-gnếu có thực hiện h, tức là nếu hban đầu bằng không. Một lần nữa chúng ta phải cho phép mang theo, lần này xảy ra nếu cả hai ghbằng 0, và chúng ta thêm 1 vào 179-ftrong trường hợp này.


6

MATL , 51 byte

'NS'tPXEii'WE'tPXE648e3i60:qXJZA-JYAtn3-?2:&)wJZAwh

Định dạng đầu vào:

'N'
[50 26 23]
'W'
[4 18 29]

Định dạng đầu ra:

S
50 26 23
E
175  41  31

Hãy thử trực tuyến!

Giải trình

'NS'tPXE     % Take input (string) implicitly. Exchange 'N' and 'S'
i            % Take input (array)
i'WE'tPXE    % Take input (string). Exchange 'W' and 'E'
648e3        % Push 648000
i            % Take input (array)
60:qXJ       % Push [0 1 ... 59]. Copy into clipboard J
ZA           % Convert second input array from base 60 to decimal
-            % Subtract
JYA          % Convert to base 60
tn3-?        % If length exceeds 3
  2:&)       %   Split into first two elements and then the rest
  w          %   Swap
  JZA        %   Convert from base 60 to decimal
  wh         %   Swap, concatenate

Có một lỗi đánh máy trong lời giải thích của bạn ở dòng thứ hai đến dòng cuối cùng : bnase.
TheBikingViking

1
@TheBikingViking Cảm ơn bạn! Đã sửa
Luis Mendo

4

Vợt, 199 byte

(λ(l)(cons(cons(if(eq?(caar l)'n)'s'n)(cdar l))(cons(if(eq?(cadr l)'e)'w'e)(list (- 180(+(caddr l)(sgn(foldl + 0(cdddr l)))))(modulo(- 60(+(fourth l)(sgn(fifth l))))60)(modulo(- 60(fifth l))60)))))

Đó là dài khủng khiếp. Có lẽ có một số điều tôi có thể làm để rút ngắn hơn nữa, nhưng tôi đã hoàn toàn rùng mình .

Mất một conscặp hai lists: một cho vĩ độ và một cho kinh độ. Mỗi danh sách có hướng (dưới dạng biểu tượng vợt chữ thường) làm mục đầu tiên và theo sau đó là độ, phút-phút và giây-giây. Đầu ra ở cùng định dạng

Vợt sẽ diễn giải cặp danh sách này dưới dạng một danh sách với một danh sách khác là thành phần đầu tiên. Điều này là hoàn toàn tốt, vì bạn vẫn có thể truy cập cả vĩ độ và kinh độ như thể chúng là hai danh sách trong một cặp.

Sử dụng:

>    (
     (λ(l)(cons(cons(if(eq?(caar l)'n)'s'n)(cdar l))(cons(if(eq?(cadr l)'e)'w'e)(list (- 180(+(caddr l)(sgn(foldl + 0(cdddr l)))))(modulo(- 60(+(fourth l)(sgn(fifth l))))60)(modulo(- 60(fifth l))60)))))
     (cons (list 's 43 9 9) (list 'e 0 0 5)))
'((n 43 9 9) w 179 59 55)

Mà có thể được giải thích bởi mã tương lai như '((n 43 9 9) (w 179 59 55)), hai danh sách.


4

Pyth, 41 45 43 35 byte

K60-"NS"ww-"EW"wA.D-*3^K3iEKK+.DGKH

Sử dụng chuyển đổi cơ sở-60 để biến độ và phút thành giây.

Định dạng I / O:

N
[1,2,3]
E
[4,5,6]

Nó in một dòng mỗi khi bạn nhập một dòng, vì vậy để có định dạng đẹp, bạn có thể sử dụng CLI và đặt đầu vào, hoặc thuận tiện hơn, sử dụng triển khai Pyth trực tuyến .

Trong mã giả:

K60                                              K = 60
   -"NS"w                                        "NS".remove(input())
         w                                       print(input())
          -"EW"w                                 "EW".remove(input())
                A.D                              G,H = divmod(
                   -*3^K3                          3*K**3 -
                         iEK                         baseToDec(input(),K)),
                            K                      K)
                             +.DGKH              divmod(G,K)+H

@LuisMendo giống như của bạn, nhưng các danh sách được phân tách bằng dấu phẩy và không có dấu ngoặc kép
busukxuan

4

Python 2, 140 122 byte

Cập nhật:

def f(c):x=([180,0,0],[179,59,60])[1<sum(c[6:8])];print['NS'['N'in c]]+c[1:4]+['EW'['E'in c]]+map(lambda x,y:x-y,x,c[5:8])

Điều này sử dụng một cách tiếp cận hơi khác: đặt các giá trị để trừ khỏi kinh độ dựa trên phút và giây. Nếu có 0 phút và giây, nó sẽ trừ 180 từ độ và nếu có> 0 phút và giây, nó sẽ trừ đi 179, 59 và 60 từ d, m, s tương ứng.

Nguyên:

def f(c):v=divmod;m,s=v((180-(c[5]+c[6]/60.+c[7]/3600.))*3600,60);d,m=v(m,60);print['NS'['N'in c]]+c[1:4]+['EW'['E'in c]]+map(round,[d,m,s])

Lấy đầu vào dưới dạng danh sách : f(['N', 0, 0, 0, 'E', 0, 0, 0]), chuyển đổi kinh độ thành độ thập phân, trừ từ 180, sau đó chuyển đổi lại thành độ, phút, giây và xây dựng lại danh sách, lật hướng trong quy trình.

Chưa chơi gôn:

def f(c):
    minutes,seconds=divmod((180-(c[5]+c[6]/60.+c[7]/3600.))*3600,60)
    degrees,minutes=divmod(minutes,60)
    print ['NS'['N'in c]]+c[1:4]+['EW'['E'in c]]+map(round,[degrees,minutes,seconds])

Thử nó


3

JavaScript, 138 137 129 124 112 110

Cải thiện 2 byte lấy cảm hứng từ mã @ Neil ERICs

f=a=>a.map((v,i,a)=>i%4?i>6?v&&60-v:i>5?(59-v+!a[7])%60:i>4?179-v+!(a[7]|a[6]):v:'NEWS'[3-'NEWS'.indexOf(v)]);
  • input = output = mảng chứa 2x (1 chữ hoa và 3 int)
  • đã thử nghiệm trên Firefox

vô dụng

f=a=>a.map((v,i,a)=>
i%4?
    i>6?v&&60-v              // 7: invert seconds - old: (60-v)%60
    :i>5?(59-v+!a[7])%60     // 6: invert minutes, increase if seconds are 0
    :i>4?179-v+!(a[7]|a[6])  // 5: invert degrees, increase if seconds and minutes are 0
    :v                       // 1,2,3: unchanged
:'NEWS'[3-'NEWS'.indexOf(v)] // 0,4: swap directions
);

kiểm tra

<table id=out border=1><tr><th>in</th><th>out<th>expected</th><th>ok?</th></tr></table>
<script>
addR=(r,s)=>{var d=document.createElement('td');d.appendChild(document.createTextNode(s));r.appendChild(d)}
test=(x,e,f)=>{var y,r=document.createElement('tr');addR(r,x);addR(r,y=('function'==typeof f)?f(x):f);addR(r,e);addR(r,e.toString()==y.toString()?'Y':'N');document.getElementById('out').appendChild(r)}

samples=[
'N',50,26,23,'W',4,18,29,   'S',50,26,23,'E',175,41,31,
'S',43,9,9,'E',0,0,5,       'N',43,9,9,'W',179,59,55,
'N',0,0,0,'E',0,0,0,        'S',0,0,0,'W',180,0,0,
'S',1,2,3,'W',4,5,6,        'N',1,2,3,'E',175,54,54,
'S',9,21,43,'W',150,7,59,   'N',9,21,43,'E',29,52,1,
'S',27,40,2,'W',23,0,0,     'N',27,40,2,'E',157,0,0,
'N',0,58,37,'W',37,0,0,     'S',0,58,37,'E',143,0,0,
];
while (samples.length)
{
    x=samples.splice(0,8);
    e=samples.splice(0,8);
    test(x,e,h);
    test(e,x,h);
}
</script>

ah Tôi chỉ thấy @Neil có cùng một ý tưởng, nhưng một số tham số ngắn hơn
Tít

2

Python 3, 131 130 byte

def f(w,x,y,z):S=60;d=divmod;a,b,c=y;l,m=d(648e3-c-S*b-S*S*a,S);return w,"N" if x=="S" else "S",d(l,S)+(m,),"E" if z=="W" else "W"

Các định dạng: các góc là bộ dữ liệu của hình thức (deg,min,sec), hướng là hình thức N. Xuất ra một bộ tứ gồm 2 góc, mỗi góc theo hướng của nó.

Phiên bản bị đánh cắp:

def f(latitude,NS,longitude,EW):
    degree,minute,second=longitude
    minute,second=divmod(648000-second-60*minute-60*60*degree,60)
    return latitude, "N" if NS=="S" else "S", divmod(minute,60)+(second,), "E" if EW=="W" else "W"

1
Bạn có thể giảm xuống 120 byte bằng cách thực hiện def f(w,x,y,z):S=60;d=divmod;a,b,c=y;l,m=d(648e3-c-S*b-S*S*a,S);return w,["S","N"][x=="S"],d(l,S)+(m,),["W","E"][z=="W"]Điều này hoạt động bằng cách sử dụng thực tế TrueFalsecó thể được hiểu là 10, do đó a if b else ctương đương với [c, a][b]. Bên cạnh đó, tôi nghĩ rằng mã gốc của bạn có lỗi đánh máy; nên x=="W"được z=="W"?
TheBikingViking 6/07/2016

2

C #, 310 269 ​​byte

float[]t(string[]a,int n)=>a.Skip(n).Take(3).Select(float.Parse).ToArray();string A(string i){var s=i.Split(' ');var w=t(s,5);float a=180-(w[0]+w[1]/60+w[2]/3600),b=a%1*60;return(s[0][0]>82?"N":"S")+$" {string.Join(" ",t(s,1))} {(s[4][0]<70?'W':'E')} {a} {b} "+b%1*60;}

Đầu vào là một chuỗi. Bạn có thể thử nó trên .NetFiddle .

float[]t(string[]a,int n)=>a.Skip(n).Take(3).Select(float.Parse).ToArray();
string A(string i) {
    var s=i.Split(' ');var w=t(s,5);float a=180-(w[0]+w[1]/60+w[2]/3600),b=a%1*60;
    return (s[0][0]>82?"N":"S")
        +$" {string.Join(" ",t(s,1))} {(s[4][0]<70?'W':'E')} {a} {b} "+b%1*60;
}

Nếu tôi không lấy stringlàm đầu vào nhưng a char, float[], char, float[], tôi có thể làm:

C #, 167 166 165 163 152 148 147 139 byte

(s,n,e,w)=>{float a=180-(w[0]+w[1]/60+w[2]/3600),b=a%1*60;return(s>82?"N":"S")+$" {string.Join(" ",n)} {(e<70?'W':'E')} {a} {b} "+b%1*60;};

(s,n,e,w) => {
    float a=180-(w[0]+w[1]/60+w[2]/3600),b=a%1*60;
    return(s>82?"N":"S")+$" {string.Join(" ",n)} {(e<70?'W':'E')} {a} {b} "+b%1*60;
};

Ngoài ra tôi có thể loại bỏ 3600và sử dụng thay vào đó để di chuyển đến 164 ký tự và 166 byte. Tôi có nên sử dụng nó?


C #, 150 byte

(s,n,m,p,e,w,x,y)=>{var t=new TimeSpan(180,0,0)-new TimeSpan(w,x,y);return(s>82?"N":"S")+$" {n} {m} {p} {(e<70?'W':'E')} {t.TotalHours} {t:%m\\ s}";};

(s,n,m,p,e,w,x,y) => {
    var z=new TimeSpan(180,0,0)-new TimeSpan(w,x,y);
     return(s>82?"N":"S")+$" {n} {m} {p} {(e<70?'W':'E')} {z.TotalHours} {z:%m\\ s}";
};

Một cách .NET hơn! Tôi giao toàn bộ logic để .NET struct TimeSpanvà tôi ab sử dụng chuỗi định dạng logic. Đầu vào là char, int, int, int, char, int, int, int. Tôi chia sẻ cái này để đưa ra một số ý tưởng. Có lẽ ai đó sẽ cải thiện một cách tốt hơn tôi.


Thật không may là dài dòng.
Steven H.

@Fawful Tôi đăng một phiên bản khác với các đối số khác nhau. Ít dài dòng hơn? Tôi vẫn không thể thoát khỏi string.Join()...
aloisdg nói Phục hồi Monica vào

Xin lưu ý rằng đây là C # 6.0
Yytsi

@TuukkaX vì đây là phiên bản mới nhất của C #, tôi không chỉ định nó. Tôi sẽ nếu tôi sử dụng một số tính năng chưa phát hành như tính năng C # 7.
aloisdg nói Phục hồi lại

1
Chà, tôi không thấy a return, tôi phải tự thêm nó ... Sử dụng bài kiểm tra của bạn a('N', new float[] { 50, 26, 23 }, 'W', new float[] { 4, 18, 29 })tôi nhận được S 50 26 23 E 175.6919 41.51642 30.98511- bạn có coi đây là một lần vượt qua không?
onedaywhen ngày

0

Java, 199 177 hoặc 151 hoặc 134 byte

Giải pháp 177 byte in kết quả

void t(int...a){int i=648000-(a[5]*3600+a[6]*60+a[7]);System.out.println(a[0]=='N'?"S":"N"+" "+a[1]+" "+a[2]+" "+a[3]+" "+(a[4]=='E'?"W":"E")+" "+i/3600+" "+i/60%60+" "+i%60);}

Giải pháp 151 Byte trả về kết quả dưới dạng mảng

Object[]y(int...a){int i=648000-(a[5]*3600+a[6]*60+a[7]);return new Object[]{a[0]=='N'?"S":"N",a[1],a[2],a[3],a[4]=='E'?"W":"E",i/3600,i/60%60,i%60};}

134 byte nếu chúng ta sử dụng ký hiệu lambda

a->{int i=648000-a[5]*3600-a[6]*60-a[7];return new Object[]{a[0]=='N'?"S":"N",a[1],a[2],a[3],a[4]=='E'?"W":"E",i/3600,i/60%60,i%60};}

0

C, 188

main(int c,char**v){int n=*v[1]==78?83:78,e=*v[5]==69?87:69,b=648000-(atoi(v[6])*3600+atoi(v[7])*60+atoi(v[8]));printf("%c %s %s %s %c %d %d %d\n",n,v[2],v[3],v[4],e,b/3600,b/60%60,b%60);}

Yêu cầu 8 đối số chương trình, sẽ thất bại khác. Vượt qua tranh luận như thế nào N 50 26 23 W 4 18 29. Chỉ đạo N, S, E,W , phải được viết hoa.


0

PostGIS, 123 byte

Công cụ dành cho công việc rất dài dòng một cách đáng thất vọng, một phần là do tính lâu dài của SQL và một phần do nhu cầu chuyển sang hình học và ngược lại:

CREATE FUNCTION f(p geography)
RETURNS geography
AS 'SELECT ST_Affine(p::geometry,1,0,0,-1,180,0)::geography' LANGUAGE sql;

Mặt khác, chức năng đơn này sẽ biến đổi các điểm, bộ sưu tập các điểm hoặc hình dạng phức tạp hơn (như toàn bộ bờ biển của Úc và New Zealand).


0

PHP, 148 byte

Cách tiếp cận tương tự như câu trả lời JavaScript của tôi , hãy xem có sự cố không

  • +16 chức năng trên không
  • +17 cho $các dấu hiệu
  • +12 cho parantantes (ưu tiên toán tử khác nhau)
  • +4 foreachvì PHP PHP array_mapcó chi phí rất lớn
  • +1 (60-$v)%60vì vì $v&&60-$vchuyển sang boolean trong PHP
  • -8 bằng cách làm việc trên bản gốc
  • -4 bằng cách sử dụng chr, ordvà một số arithmetics về trao đổi hướng

function f(&$a){foreach($a as$i=>$v)$a[$i]=$i%4?($i>6?(60-$v)%60:($i>5?(59-$v+!$a[7])%60:($i>4?179-$v+!($a[7]|$a[6]):$v))):chr(($i?156:161)-ord($v));}
  • chức năng hoạt động trên bản gốc
  • định dạng: mảng với 2x (1 chữ hoa char, 3 int)

kiểm tra

function out($a){if(!is_array($a))return$a;$r=[];foreach($a as$v)$r[]=out($v);return'['.join(',',$r).']';}
function cmp($a,$b){if(is_numeric($a)&&is_numeric($b))return 1e-2<abs($a-$b);if(is_array($a)&&is_array($b)&&count($a)==count($b)){foreach($a as $v){$w = array_shift($b);if(cmp($v,$w))return true;}return false;}return strcmp($a,$b);}
$samples=[
N,50,26,23,W,4,18,29,   S,50,26,23,E,175,41,31,
S,43,9,9,E,0,0,5,       N,43,9,9,W,179,59,55,
N,0,0,0,E,0,0,0,        S,0,0,0,W,180,0,0,
S,1,2,3,W,4,5,6,        N,1,2,3,E,175,54,54,
S,9,21,43,W,150,7,59,   N,9,21,43,E,29,52,1,
S,27,40,2,W,23,0,0,     N,27,40,2,E,157,0,0,
N,0,58,37,W,37,0,0,     S,0,58,37,E,143,0,0,
];
while ($samples)
{
    $xx=$x=array_splice($samples,0,8);
    $ee=$e=array_splice($samples,0,8);
    func($x); test($xx,$ee,$x);
    func($e); test($ee,$xx,$e);
}

ý tưởng bị bỏ rơi

  • không có cách tiếp cận vòng lặp với cờ mang: +5
  • lặp ngược với cờ mang: +7
  • Tôi có thể biến chương trình này thành một chương trình cho PHP <5.4, nhưng đừng bận tâm: -3

0

Befunge, 122 114 111 byte (110 ký tự)

~"N"-v
 v"N"_"S"
v>,&.&.&.~"W"-
_"E"v"W"
+:v >,&"´"\-&"Z"*&
v\_\.00..@.-\"<".-1\ <
>1-.:"Z"/"<"\-\"Z"%:#^_\..@

Định dạng đầu vào:

N 50 26 23W 4 18 29

Lưu ý hướng kinh độ và các giây cung phải được rúc vào nhau

Bạn có thể kiểm tra mã ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.