Koniki morskie oczywiście potrzebują butów. Jednak konik morski, mający tylko jeden ogon, potrzebuje tylko jednego buta. Niestety buty występują tylko w parach. Pieniądze są ograniczone dla rządu konika morskiego, więc muszą kupić jak najmniej par. Każdy konik morski ma rozmiar buta x, gdzie x jest dodatnią liczbą całkowitą. Konik morski może jednak w razie potrzeby nosić but o rozmiarze x -1 lub x + 1 .
Twoim zadaniem jest wyprowadzenie minimalnej liczby par, które rząd konika morskiego musi kupić, aby założyć buty na wszystkich swoich konikach morskich.
Możesz wprowadzać dane w dowolny sposób, standardowe luki itp.
Ponieważ jest to golfowy kod, wygrywa najkrótszy kod w bajtach.
Przypadki testowe
2 4 6 6 8 14 -> 4
2 1 3 1 1 -> 3
4 1 4 9 1 8 9 1 8 4 -> 6
1 2 3 5 7 8 10 12 -> 4
Odpowiedzi:
05AB1E , 13 bajtów
Wykorzystuje podejście OP opisane w komentarzach.
Wypróbuj online!
Wyjaśnienie
źródło
Łuska ,
1514 bajtówUżywa chciwego algorytmu: sortuj i paruj od lewej. Wypróbuj online!
Dzięki Leo za oszczędność 1 bajtu.
Wyjaśnienie
To pierwsza odpowiedź Husk, która używa
Γ
funkcji dopasowania wzoru do listy. W tym przypadku użycia, jeślia
jest wartością ig
jest funkcją, toΓag
odpowiada funkcjif
zdefiniowanej przez fragment kodu HaskellZdefiniuję przypadek podstawowy jako
a = 0
igdzie
line0
odnosi się do całej linii. W kodzie Huskx
ixs
są niejawnymi argumentami funkcji lambda, iline0
jest₀
. Lista jest sortowana ponownie przy każdym rekurencyjnym połączeniu, ale to nie ma znaczenia w wyzwaniu golfowym.źródło
Python 3 ,
696660 bajtów9 bajtów dzięki xnor.
Wypróbuj online!
źródło
a.sort()
.lambda
:f=lambda a:a[1:a.sort()]and-~f(a[1+(a[1]-a[0]<3):])or len(a)
or[]<a
zaoszczędzić 3 bajtyGalaretka ,
2018 bajtówWypróbuj online!
Widelec mojej odpowiedzi w języku Python .
źródło
IḢ<3+2⁸ṫß‘µLḊ?
(w zasadzie nie widzę żadnego powodu, aby zrobićṢ
przedL
iḊ
wróci[]
czy listy, jeśli o długości 1 lub 0, a następnie mogę wyjąćµ
zLµḊ?
)Ṣ
Jeśli dobrze rozumiem, możesz dołączyć do mojego golfa.Python 2 , 49 bajtów
Wypróbuj online!
Oparty na rekurencyjnym rozwiązaniu Leaky Nun .
Python 2 , 59 bajtów
Wypróbuj online!
Powtarza rozmiary
x
według posortowanej kolejności. Zapamiętuje górny prógp
dla bieżącego rozmiaru do sparowanego z poprzednim. Jeśli tak (x>p
), zresetuj próg,0
aby uniemożliwić sparowanie następnego. Jeśli nie, zwiększ liczbę wyjśćc
i ustaw następny prógp
nax+2
.Nowy próg
p=(x>p)*(x+2)
jest nadęty. Chciałbym znaleźć sposób, aby to skrócić.źródło
C #,
111108137102 bajtówTo nigdy nie wygra, ale i tak chciałem rozwiązać to ćwiczenie:
Dzięki komentarzowi @grabthefish udało mi się skubnąć jeszcze kilka bajtów:
Zgodnie ze specjalnymi zasadami C # w PC&G:
Korzystanie z funkcji lambda:
źródło
Perl, 113 bajtów
Pobiera listę argumentów z wiersza poleceń (as
@ARGV
), drukuje doSTDOUT
domyślnie .W Seahorseville ...
sąsiedztwo jest sekwencją sąsiednich rozmiarów obuwia. Po posortowaniu każdy konik morski ma bezpośrednich sąsiadów, którzy mogą dzielić ten sam rozmiar buta. W sąsiedztwie może znajdować się wielu sąsiadów i żaden z sąsiadów nie może różnić się wartością o więcej niż dwóch:
np.
3 3 4 5 5 6
jest jednym sąsiedztwem, tak jak są2 4 6 6
, i1 2 3 5 7 8 10 12
np.
1 1 1 4 5 6
zawiera dwie dzielnice:1 1 1
i4 5 6
.Podstawa algorytmu
Istnieją dwa rodzaje sąsiedztwa:
Równej wielkości
Dla nich
n/2
pary są zawsze wystarczające:np
3 3 4 5 5 6
wymaga trzech parach3 3
,4 5
i5 6
Dziwne rozmiary
Dla nich
ceil(n/2)
pary są zawsze wystarczające:np
12 13 13 14 15
wymaga trzech parach12 13
,13 14
i15
sam.Nieskluczony kod do testowania algorytmu
Przykładowe wyniki
(Zamknięte dzielnice
[ ]
)źródło
Mathematica, 67 bajtów
Wypróbuj w piaskownicy Wolfram .
źródło
UpTo
Perl, 103 bajty
Pobiera listę argumentów z wiersza poleceń (as
@ARGV
),STDOUT
domyślnie drukuje .Jest to alternatywne podejście oparte na następującej relacji:
(Zobacz tę odpowiedź, jak zdefiniowano sąsiedztwo )
źródło
JavaScript, 67 bajtów
Przykładowy fragment kodu:
źródło