Myślałem, że będzie to dobre wyzwanie: http://adventofcode.com/2016/day/1
Opis zadania
Biorąc pod uwagę sekwencję obrotów i odległości zgodnie ze wzorem (L | R) [1-9] [0-9] *, podaj manhattan odległość między punktem początkowym a końcowym, czyli minimalną liczbę ruchów w pionie i poziomie siatka.
Przykłady
Na przykład, jeśli założymy, że zacząłeś wychodzić na północ:
Po R2, L3 pozostawia ci 2 bloki na wschód i 3 bloki na północ lub 5 bloków dalej. R2, R2, R2 pozostawiają ci 2 bloki na południe od pozycji początkowej, która jest 2 bloki dalej. R5, L5, R5, R3 pozostawia ci 12 bloków.
Szczegóły techniczne
Możesz wybrać separator między ruchami (np .: „\ n”, „,” lub „,”). Musisz podać odpowiedź jako liczbę całkowitą w bazie 10.
Nie duplikat!
Nie jest to duplikat z wielu powodów:
- Ruchy nie są takie same. Tutaj są rotacje , a nie kierunki.
- Chcę odległości na Manhattanie, a nie euklidesa.
Odpowiedzi:
Python 3,
10999104101 bajtówJest to prosta odpowiedź, która używa liczb zespolonych, z wejściem jako ciąg rozdzielany spacjami lub ciąg rozdzielany znakiem nowej linii. Zapraszamy do gry w golfa!
Edycja: -13 bajtów dzięki Labo. +5 bajtów do konwersji na liczbę całkowitą.
Ungolfing
źródło
PHP, 93 bajty
awaria
źródło
Python 2, 86 bajtów
Śledzi prąd
x
iy
współrzędne. Podczas obracania zamiast aktualizować kierunek, obraca bieżącą wartość, dzięki czemu ruch jest zawsze w kierunku dodatnim x. Liczby zespolone były zbyt kosztowne, aby wyodrębnić współrzędne.źródło
Python 2,
103102 bajtówrepl.it
Dane wejściowe to ciąg kierunków rozdzielanych spacjami, np
"R5 L5 R5 R3"
.Drukuje odległość Manhattanu między miejscem początkowym a miejscem docelowym.
W jaki sposób?
Zaczyna się od początku płaszczyzny złożonej
l=0
;Z skumulowanej ćwierćfinałowym skręt w prawo blatu
c=0
;Dla każdej instrukcji
i
obrót jest analizowany przez porównanie pierwszego znaku kierunku z znakiem'N'
ic
jest odpowiednio dostosowywany.Odległość do przebycia jest analizowana,
int(i[1:])
a instrukcja jest wprowadzana w życie, wykonując tyle kroków wielkości bloku w kierunku podanym, przyjmującc
moc0+1j
z1j**c
.Ostateczna odległość na Manhattanie jest sumą absolutnych odległości od miejsca początkowego w dwóch kierunkach - urojonym i rzeczywistym; osiągnięte dzięki
abs(l.imag)+abs(l.real)
źródło
cmp
podobnej do mojej odpowiedzi, daj mi znać, a usunę.JavaScript (ES2016), 98
1002 bajty zaoszczędzone dzięki @Neil
100 bajtów dla ES6
Mniej golfa
Test (ES6)
źródło
s=>s.replace(/.(\d+)/g,(c,n)=>(d+=c<'R'||3,n*=~-(d&2),d&1?x+=n:y+=n),x=y=d=0)&&(x<0?-x:x)+(y<0?-y:y)
który jest teraz o dwa bajty krótszy niż odpowiedź ES6, dziękic<'R'||3
in*=~-(d&2)
sztuczkom .