Seepferdchen brauchen natürlich Schuhe. Ein Seepferdchen mit nur einem Schwanz benötigt jedoch nur einen Schuh. Leider kommen die Schuhe nur paarweise. Das Geld für die Seepferdchenregierung ist knapp, deshalb müssen sie so wenig Paare wie möglich kaufen. Jedes Seepferdchen hat eine Schuhgröße x, wobei x eine positive ganze Zahl ist. Ein Seepferdchen kann jedoch bei Bedarf einen Schuh der Größe x - 1 oder x + 1 tragen .
Ihre Aufgabe ist es, die Mindestanzahl von Paaren auszugeben, die die Seepferdchenregierung kaufen muss, um alle ihre Seepferdchen mit Schuhen zu bekleiden.
Sie können Eingaben vornehmen, wie Sie möchten, Standardlücken usw.
Da es sich um Code-Golf , kürzeste Code in Bytes gewinnt.
Testfälle
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
Antworten:
05AB1E , 13 Bytes
Verwendet den in den Kommentaren beschriebenen Ansatz OP.
Probieren Sie es online!
Erläuterung
quelle
Schale ,
15 bis14 BytesVerwendet den Greedy-Algorithmus: Sortieren und Koppeln von links. Probieren Sie es online!
Danke an Leo für das Speichern von 1 Byte.
Erläuterung
Dies ist die erste Antwort von Husk, die
Γ
die Funktion für den Mustervergleich mit einer Liste verwendet. Wenn in diesem Anwendungsfalla
ein Wert undg
eine Funktion ist,Γag
entspricht dies derf
durch das Haskell-Snippet definierten FunktionIch definiere den Basisfall als
a = 0
undwo
line0
bezieht sich auf die gesamte Zeile. In dem Husk - Code,x
undxs
geben implizite Argumente an die Lambda - Funktion undline0
ist₀
. Die Liste wird bei jedem rekursiven Aufruf erneut sortiert, aber das spielt bei einer Golf-Herausforderung keine Rolle.quelle
Python 3 ,
696660 Bytes9 Bytes dank xnor.
Probieren Sie es online!
quelle
a.sort()
.lambda
:f=lambda a:a[1:a.sort()]and-~f(a[1+(a[1]-a[0]<3):])or len(a)
or[]<a
3 Bytes zu rettenJelly ,
20 bis18 BytesProbieren Sie es online!
Gabel meiner Python Antwort .
quelle
IḢ<3+2⁸ṫß‘µLḊ?
(im Grunde sehe ich keinen Grund, esṢ
vorher zu tunL
, undḊ
würde zurückkehren,[]
wenn Liste, wenn Länge 1 oder 0, und dann kann ich eineµ
von entfernenLµḊ?
)Ṣ
meinem Golf etwas voranstellen , wenn ich es richtig verstehe.Python 2 , 49 Bytes
Probieren Sie es online!
Basierend auf der rekursiven Lösung von Leaky Nun .
Python 2 , 59 Bytes
Probieren Sie es online!
Durchläuft die Größen
x
in sortierter Reihenfolge. Erinnert sich an den oberen Schwellenwertp
für die aktuelle Größe, der mit dem vorherigen gepaart wurde. Wenn dies der Fall ist (x>p
), setzen Sie den Schwellenwert zurück,0
um das Pairing des nächsten Schwellenwerts zu verhindern . Wenn nicht, erhöhen Sie die Ausgangsanzahlc
und setzen Sie den nächsten Schwellenwertp
aufx+2
.Die neue Schwelle
p=(x>p)*(x+2)
ist ein aufgeblähter Ausdruck. Ich würde gerne einen Weg finden, es zu verkürzen.quelle
C #,
111108137102 BytesDies wird niemals gewinnen, aber ich wollte die Übung trotzdem lösen:
Dank des Kommentars von @grabthefish konnte ich noch ein paar Bytes knabbern:
Befolgen Sie die speziellen C # -Regeln von PC & G:
Verwendung einer Lambda-Funktion:
quelle
Perl, 113 Bytes
Übernimmt die Liste der Argumente von der Kommandozeile (as
@ARGV
) und druckt nachSTDOUT
standardmäßig auf.In Seahorseville ...
Eine Nachbarschaft ist eine Folge benachbarter Schuhgrößen. Wenn sortiert, hat jedes Seepferdchen unmittelbare Nachbarn, die die gleiche Schuhgröße teilen können. Es kann mehrere Nachbarn in der Nachbarschaft geben und keine Nachbarn können sich im Wert um mehr als zwei unterscheiden:
zB
3 3 4 5 5 6
ist eine einzelne Nachbarschaft, wie es ist2 4 6 6
, und1 2 3 5 7 8 10 12
zB
1 1 1 4 5 6
enthält zwei Stadtteile:1 1 1
und4 5 6
.Grundlage des Algorithmus
Es gibt zwei Arten von Nachbarschaft:
Gleichmäßig groß
Für diese,
n/2
ist immer ein Paar ausreichend:zB
3 3 4 5 5 6
benötigt drei Paare für3 3
,4 5
und5 6
Seltsame Größe
Für diese,
ceil(n/2)
ist immer ein Paar ausreichend:zB
12 13 13 14 15
erfordert drei Paare für12 13
,13 14
und15
allein.Ungolfed Code zum Testen des Algorithmus
Probenergebnisse
(Nachbarschaften eingeschlossen in
[ ]
)quelle
Mathematica, 67 Bytes
Versuchen Sie es in Wolfram Sandbox .
quelle
UpTo
Perl, 103 Bytes
Übernimmt die Liste der Argumente von der Kommandozeile (as
@ARGV
) und druckt nachSTDOUT
standardmäßig auf.Dies ist ein alternativer Ansatz, der auf der folgenden Beziehung basiert:
(In dieser Antwort erfahren Sie, wie die Nachbarschaft definiert ist.)
quelle
Javascript, 67 Bytes
Beispielcode-Snippet:
quelle