tło
Niezliczone pokolenia dzieci zastanawiały się, gdzie by się skończyły, gdyby wykopały dziurę bezpośrednio w dół. Okazuje się, że byłoby to, co nie dziwi, raczej niebezpieczne , ale i tak ...
Antypody to punkty, które są naprzeciw siebie na powierzchni Ziemi. Oznacza to, że gdyby linia została narysowana między dwoma punktami, przeszedłaby przez środek Ziemi.
Wyzwanie
Napisz program lub funkcję, która, biorąc pod uwagę punkt, znajdzie swój antypod.
W tym wyzwaniu punkty są reprezentowane przy użyciu systemu długości i szerokości geograficznej oraz stopni, minut łuku i sekund łuku. Aby znaleźć antypod, zamień kierunki każdej rzędnej ( N <-> S
i W <-> E
) i odejmij rzędną długości geograficznej od 180
stopni.
Przykład:
Weź punkt N 50 26 23 W 4 18 29
. Zamień wskazówki, aby podać S 50 26 23 E 4 18 29
. Odejmij rzędną długości geograficznej od, 180 0 0
aby dać 175 41 31
, pozostawiając współrzędne antypody jako S 50 26 23 E 175 41 31
.
Zasady
Wkład
Zestaw współrzędnych szerokości i długości geograficznej, w dowolnym rozsądnym formacie , w którym każda rzędna zawiera kierunek, liczbę stopni, liczbę minut łuku i liczbę sekund łuku.
Wydajność
Współrzędne szerokości i długości geograficznej antypodu, w dowolnym rozsądnym formacie , gdzie każda rzędna zawiera kierunek, liczbę stopni, liczbę minut łuku i liczbę sekund łuku.
Rozumiem, że każdą część współrzędnych można jednoznacznie rozróżnić.
Okular
- Kierunek dla rzędnej szerokości geograficznej to
N
lubS
, a dla rzędnej długości geograficznej jestW
lubE
. - Wszystkie wartości współrzędnych są liczbami całkowitymi. Wartość stopnia będzie pomiędzy
0
i90
dla szerokości geograficznej oraz pomiędzy0
i180
dla długości geograficznej. Wartości minut łuku i sekund łuku dla obu rzędnych będą pomiędzy0
i59
. - Jeśli wszystkie wartości dla rzędnej są
0
, dowolny kierunek jest akceptowalny. - Nie ma potrzeby zerowania żadnych wartości.
- Żadna rzędna szerokości geograficznej nigdy nie będzie większa niż
90
stopnie i żadna rzędna długości geograficznej nigdy nie będzie większa niż180
stopnie. - Obowiązują standardowe luki .
Przypadki testowe
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
Przydatne linki
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
N
,S
,E
, lubW
jako kierunek, zaś nadmiarowe0
niejasność co do których wprowadza wartość reprezentuje której składnikiem rzędnej.Odpowiedzi:
05AB1E,
3734 bajtówWyjaśnił
Wypróbuj online
Edycja: Zapisano 3 bajty dzięki Adnan .
źródło
"NEWS"
do,‘€Ã‘
a nawet'€Ã
jeśli dozwolone jest pisanie małymi literami.JavaScript (ES6), 88 bajtów
Pobiera 8 parametrów i zwraca tablicę jako wynik. Oczekuje
a
się jednymN
lubS
podobniee
być jednąW
lubE
. Obliczenia:f
musi być odjęta od 179 jeżeli jedeng
lubh
jest różna od zera, lecz 180, gdy obag
ih
mają wartość zero (ponieważ nie ma pożyczać), co!(g|h)
dodaje się do 179.g
musi być zerowy, gdy obag
ih
mają wartość zero, cog|h&&
, w przeciwnym razie musi być odjęta od 59, jeślih
nie jest zerem, ale 60,h
jest równa zero (ponieważ nie ma pożyczać), co!h
dodaje się do 59.h
musi wynosić zero, jeśli było już zero, w przeciwnym razie jest po prostu odejmowane od 60.Innym sposobem spojrzenia na to zauważyć, że odjęcie binarnie uzyskuje się przez dodanie 1s uzupełnienie plus dodatkowe 1. przetłumaczony na ten problem, bierzemy
179-f
,59-g
a59-h
i dodać 159-h
+ 160-h
, ale jeśli jest to 60 to niesie , więc pożądany wynik to zero, jeślih
pierwotnie było zero. Dodajemy 1,59-g
jeśli występuje przeniesienie zh
, tzn. Jeślih
pierwotnie było zero. Ponownie musimy umożliwić Carry, który tym razem dzieje się wtedy, gdy obag
ih
są zerowe, a dodamy 1 do179-f
niniejszej sprawy.źródło
MATL , 51 bajtów
Format wejściowy:
Format wyjściowy:
Wypróbuj online!
Wyjaśnienie
źródło
bnase
.Rakieta, 199 bajtów
To jest okropnie długie. Prawdopodobnie jest kilka rzeczy, które mógłbym zrobić, aby to jeszcze bardziej skrócić, ale drżę , jestem całkowicie skończony.
Pobiera
cons
dwalists
: jeden dla szerokości i jeden dla długości. Każda lista ma kierunek (jako mały symbol rakiety) jako swój pierwszy element i następujące po nim stopnie, minuty i sekundy łukowe. Wyjścia w tym samym formacieRakieta zinterpretuje tę parę dwóch list jako pojedynczą listę z inną listą jako pierwszym elementem. Jest to całkowicie w porządku, ponieważ nadal możesz uzyskać dostęp do szerokości i długości geograficznej, jakby były dwiema listami w parze.
Stosowanie:
Który może być interpretowany przez przyszły kod jako
'((n 43 9 9) (w 179 59 55))
dwie listy.źródło
Pyth,
41454335 bajtówWykorzystuje konwersję base-60, aby zamienić stopnie i minuty w sekundy.
Format we / wy:
Drukuje linię za każdym razem, gdy ją wprowadzasz, więc aby mieć dobrze wyglądający format, możesz albo użyć interfejsu CLI i potokować dane wejściowe, albo, wygodniej, użyć internetowej implementacji Pyth .
W pseudokodzie:
źródło
Python 2,
140122 bajtówZaktualizowano:
Stosuje to nieco inne podejście: ustawienie wartości odejmowania od długości geograficznej na podstawie minut i sekund. Jeśli jest 0 minut i sekund, odejmuje 180 stopni od stopni, a jeśli jest> 0 minut i sekund, odejmuje odpowiednio 179, 59 i 60 od d, m, s.
Oryginalny:
Pobiera dane wejściowe jako listę:
f(['N', 0, 0, 0, 'E', 0, 0, 0])
konwertuje długość geograficzną na stopnie dziesiętne, odejmuje od 180, a następnie konwertuje z powrotem na stopnie, minuty, sekundy i ponownie konstruuje listę, odwracając kierunki w tym procesie.Bez golfa:
Spróbuj
źródło
JavaScript,
1381371291241121102 bajty poprawy zainspirowane kodem @ Neila
bez golfa
testy
źródło
Python 3,
131130 bajtówFormaty: kąty są krotkami formy
(deg,min,sec)
, kierunki są formąN
. Wysyła czterokrotnie 2 kąty, z których każdy ma swój kierunek.Wersja bez golfa:
źródło
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"]
To działa, wykorzystując fakt, żeTrue
iFalse
można interpretować jako1
i0
, a zatema if b else c
jest równoważne z[c, a][b]
. Na marginesie, myślę, że twój oryginalny kod zawiera literówkę; powinnox=="W"
byćz=="W"
?C #,
310269 bajtówDane wejściowe to jeden ciąg. Możesz spróbować na .NetFiddle .
Kod
Jeśli nie wezmę
string
jako danych wejściowych, ale achar, float[], char, float[]
, mogę:C #,
167166165163152148147 147139 bajtówKod
Mogę również usunąć
3600
i użyćฐ
zamiast tego, aby przejść do 164 znaków i 166 bajtów. Czy powinienem tego użyć?C #, 150 bajtów
Kod
Bardziej .NET sposób! I przekazać całą logikę do .NET
struct
TimeSpan
iabużyć ciąg formatowanie logiki. Dane wejściowe tochar, int, int, int, char, int, int, int
. Podzielam się tym, aby podać kilka pomysłów. Może ktoś poprawi się lepiej niż ja.źródło
string.Join()
...return
, musiałem go dodać sobie ... Stosując testa('N', new float[] { 50, 26, 23 }, 'W', new float[] { 4, 18, 29 })
dostajęS 50 26 23 E 175.6919 41.51642 30.98511
- byłoby rozważyć tę przepustkę?Java,
199177 lub 151 lub 134 bajtów177 bajtów rozwiązanie, które drukuje wynik
151 Bajtów rozwiązanie, które zwraca wynik jako tablicę
134 bajtów, jeśli użyliśmy notacji lambda
źródło
C 188
Wymaga 8 argumentów programu, w przeciwnym razie zawiedzie. Przekaż argumenty jak
N 50 26 23 W 4 18 29
. KierunkowskazyN
,S
,E
,W
, muszą być aktywowane.źródło
PostGIS, 123 bajty
Tool-For-The-Job jest rozczarowująco gadatliwy, częściowo z powodu słownictwa SQL, a częściowo z powodu potrzeby rzutowania na geometrię i odwrotnie:
Z drugiej strony ta pojedyncza funkcja przekształci punkty, zbiory punktów lub bardziej złożone kształty (takie jak cała linia brzegowa Australii i Nowej Zelandii).
źródło
PHP, 148 bajtów
tak samo jak moja odpowiedź na JavaScript , poszukaj tam podziału
$
znakiforeach
ponieważ PHParray_map
ma ogromne koszty ogólne(60-$v)%60
ponieważ$v&&60-$v
rzutuje na boolean w PHPchr
,ord
a niektóre operacje arytmetyczne na zamiany kierunkutesty
porzucone pomysły
źródło
Befunge,
122114111 bajtów (110 znaków)Format wejściowy:
Zwróć uwagę na kierunek długości geograficznej i sekundy łuku muszą być skulone
Możesz przetestować kod tutaj
źródło