Tło:
Jack to dynia, która co Halloween lubi straszyć mieszkańców wsi w pobliżu swojej łaty z dyni. Jednak każdego roku po tym, jak ktoś zapali w nim świecę, ma on ograniczoną ilość czasu, aby przestraszyć wszystkich, zanim świeca się wypali, a tym samym nie jest w stanie przestraszyć więcej wieśniaków, ponieważ nikt go nie widzi. W ostatnich latach był w stanie wystraszyć tylko niewielką liczbę wiosek z powodu złego podejmowania decyzji, ale teraz, gdy ma cię do pomocy, będzie w stanie wystraszyć jak najwięcej wiosek!
Zadanie:
Biorąc pod uwagę listę miejscowości i długość życia świec, wypisz maksymalną liczbę wiosek, które Jack może odwiedzić. Nie musisz drukować samej ścieżki.
Wkład:
Żywotność świecy i lista miejscowości w kartezjańskim układzie współrzędnych. Naszywka z dyni, z której pochodzi Jack, zawsze będzie wynosić 0,0. Możesz sformatować dane wejściowe w dowolny sposób. Aby uprościć ruchy Jacka, może on poruszać się tylko w poziomie, w pionie lub po przekątnej, co oznacza, że jego świeca straci 1 lub 1,5 (zabiera nieco dłużej po przekątnej) jednostki życia przy każdym ruchu. Świeca wypala się, gdy żywotność jest mniejsza lub równa 0.
Wydajność:
Liczba całkowita równa maksymalnej liczbie wiosek, które Jack może odwiedzić przed wypaleniem świecy.
Zasady:
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach. Standardowe luki są niedozwolone.
Przypadki testowe:
// Format [lifespan] [list of village coordinates] -> [maximum visit-able villages]
4 -1,0 1,0 2,0 3,0 4,0 5,0 -> 3
4 1,1 2,2 3,3 -> 2
5 1,1 2,1 3,1 4,1 5,0 5,1 -> 4
źródło
Odpowiedzi:
Galaretka,
30292725 bajtówWypróbuj online!
Najwyraźniej produkt kropkowy Jelly po prostu ignoruje niedopasowanie wielkości listy i nie zwielokrotnia dodatkowych elementów drugiej tablicy, po prostu je dodaje. Ogolił 2 bajty.
Wyjaśnienie
źródło
Java 7,
206201 bajtówDzięki @KevinCruijssen za oszczędność 5 bajtów
Bez golfa
źródło
i-x
dwa ib[c]-y
dwa razy, więc możesz dodać,t
do ints, a następnie użyć tego:Math.sqrt((t=i-x)*t+(t=b[c]-y)*t)*1
zamiastMath.sqrt((i-x)*(i-x)+(b[c]-y)*(b[c]-y))*1
.Scala, 196 bajtów
Nie golfowany:
Objaśnienie:
źródło
JavaScript (ES6), 145
Anonimowa funkcja rekurencyjna, parametrem
s
jest żywotność świecy, parametreml
jest lista współrzędnych wioski.Depth First Search , zatrzymując się, gdy odległość reachs żywotność świec
Mniej grał w golfa, patrz poniższy fragment
Test
źródło
MATL , 27 bajtów
EDYCJA (26 listopada 2016 r.): Ze względu na zmiany
Xl
funkcji należy ją zastąpić w powyższym kodzie przez2$X>
. Poniższe linki zawierają tę modyfikację.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Odległość dyni między miastami oddzielone Δ x i Δ Y w każdej współrzędnej można otrzymać jako (| Δ x | + | Δ y | + max (| Δ x |, | Δ r |)) / 2.
Kod wykonuje następujące kroki:
Skomentowany kod:
źródło
Python 2.7 , 422 bajty
dzięki NoOneIsHere za wskazanie dodatkowych ulepszeń!
dzięki edc65 za informację, że nie zapisujesz listy, ale zamiast tego używaj iteratorów!
Wypróbuj online!
Wyjaśnienie:
Funkcja oblicza odległość między dwoma punktami zgodnie z podanymi regułami, pętla iteruje przez wszystkie permutacje generowane przez generator danych wejściowych i oblicza odległość, jeśli odległość jest mniejsza niż długość życia świecy, odejmuje ją i dodaje miejsce do licznik, jeśli ten licznik jest większy niż bieżące maksimum, zastępuje go.
bez golfa:
źródło
current
c
ill
m
.PHP, 309 bajtów
Absolutnie brutalna siła, a nawet niezbyt krótka. Użyj jak:
Z większą ilością białych znaków i zapisanych w pliku:
źródło
Python, 175 bajtów
c
to długość życia świecy,l
to lista krotek - współrzędne wioski,v
liczba odwiedzonych wiosek,(x,y)
para współrzędnych wioski, w której Jack jest obecnie.r(t)
to funkcja, która oblicza odległość do aktualnej pozycji i służy do sortowania listy, aby stała się najbliższal[0]
. Zastosowana formuła to | Δx | + | Δy | - min (| Δx |, | Δy |) / 2.Wypróbuj tutaj!
źródło
Rakieta
Testowanie:
Wydajność:
Powyższy kod nie działa jednak dla ujemnych wartości xiy.
źródło