Dies soll ein einfacher, mundgerechter Code-Golf sein.
Das mex (minimale ausgeschlossene Zahl) einer endlichen Auflistung von Zahlen ist die kleinste nicht negative Ganzzahl 0, 1, 2, 3, 4, ...
, die nicht in der Auflistung enthalten ist. Mit anderen Worten, es ist das Minimum des Komplements. Die mex-Operation spielt eine zentrale Rolle bei der Analyse unparteiischer Spiele in der kombinatorischen Spieltheorie .
Ihr Ziel ist es, ein Programm oder eine benannte Funktion zu schreiben , um den mex mit möglichst wenigen Bytes zu berechnen.
Eingang:
Eine Liste nicht negativer Ganzzahlen in beliebiger Reihenfolge. Kann Wiederholungen enthalten. Der Vollständigkeit halber werden die Länge der Liste und der zulässige Bereich von Elementen sowohl zwischen 0
als auch 20
einschließlich liegen.
Die Definition von "Liste" ist hier flexibel. Jede Struktur, die eine Sammlung von Zahlen darstellt, ist in Ordnung, solange sie eine feste Reihenfolge von Elementen aufweist und Wiederholungen zulässt. Sie darf außer ihrer Länge keine zusätzlichen Informationen enthalten.
Die Eingabe kann als Funktionsargument oder über STDIN erfolgen.
Ausgabe
Die kleinste ausgeschlossene Zahl. Ausgeben oder ausdrucken.
Testfälle
[1]
0
[0]
1
[2, 0]
1
[3, 1, 0, 1, 3, 3]
2
[]
0
[1, 2, 3]
0
[5, 4, 1, 5, 4, 8, 2, 1, 5, 4, 0, 7, 7]
3
[3, 2, 1, 0]
4
[0, 0, 1, 1, 2, 2, 3]
4
[1, 0, 7, 6, 3, 11, 15, 1, 9, 2, 3, 1, 5, 2, 3, 4, 6, 8, 1, 18]
10
0
zu20
, ist die korrekte Ausgabe 21. Ich werde einen Testfall hinzuzufügen. Ja, der feste Bereich macht es definitiv einfacher, obwohl man ihn immer noch verwenden könntesys.maxint
oder2**64
wenn ich ihn nicht spezifiziert hätte.Antworten:
Pyth , 6 Bytes
Beispiellauf
Wie es funktioniert
quelle
range(21)
) bei, das geordnet ist. (Dies bedeutet auch, dass die Erklärung nicht ganz korrekt ist. Pyth und Python 3 sind für mich beide ziemlich neu.)-
in Pyth tatsächlich ein Filter - es filtert das erste Argument auf Abwesenheit vom zweiten Argument und konvertiert es dann in die Form des ersten Arguments (Zeichenfolge, Liste oder Menge).h-U22Q
so sein, dass es die korrekte Ausgabe von 21 für die Eingabe gibt, die den gesamten zulässigen Bereich enthält.CJam,
118 BytesWie es funktioniert:
Beispieleingabe:
Ausgabe:
Probieren Sie es hier online aus
quelle
J - 13 Zeichen
Sehr einfache Aktionen in J und daher sehr schwer zu verkleinern.
i.@21
Erstellt eine Liste von 0 bis einschließlich 20.-.
führt set-subtrahiert die Eingabe von dieser Liste aus.0{
Nimmt das erste Element von dem, was übrig ist, dh die kleinste Zahl.f=:
definiert eine benannte Funktion. Auf der REPL:Seit dem Release von J806 im November 2017 gibt es eine neue Syntax, die uns ein Byte erspart, indem wir in diesem Kontext
i.@21
die alte verwenden(i.21)
können.quelle
f=:
?i.@21-.]
würde 1 Byte gespart.Golfscript 7
Eine weitergehende Version von Peter Taylors Antwort. Community-Wiki, da ich nicht den Repräsentanten habe, der seinen Beitrag kommentiert.
Der Unterschied besteht darin, dass anstelle der Länge +1 die bekannte maximale Listengröße aus der Frage verwendet wird, um ein Zeichen zu speichern und das irrelevante $ zu löschen.
Probieren Sie es online aus
quelle
Burlesque - 9 Bytes
Übernimmt die Eingabe von stdin im Format {7 6 5 5 1 2 2 4 2 0}
Erklärt:
Probieren Sie einige Beispiele aus:
{1 0 7 6 3 11 15 1 9 2 3 1 5 2 3 4 6 8 1 18} 20rzj \\ <]
{5 4 1 5 4 8 2 1 5 4 0 7 7} 20rzj \\ <]
quelle
{0 1 2}
, da Sierz
mehr als die größte Zahl benötigen . Einfach loslegen, um das20rzj\\<]
Problem zu beheben und einen Buchstaben zu sparen.Bash + Coreutils, 23 Bytes
Dies setzt die Eingabe als
|
(Pipe-) getrennte Liste voraus . Z.B:quelle
"(...)"
um die brauchen$1
.Ruby, 32 Bytes
Definiert eine Funktion
f
, die mit einem Array aufgerufen werden soll.quelle
f[[0, 1]]
(wobei die äußeren Klammern die Aufrufsyntax und die inneren Klammern das Array definieren).f=
?GolfScript (
109 Bytes)Übernimmt die Eingabe von stdin im Format
[5 4 1 5 4 8 2 1 5 4 0 7 7]
.Online-Demo
quelle
;
bevor die Eingabezeichenfolge im Programm selbst gezählt werden?Xojo, 55 Bytes
quelle
Rubin, 22
Erläuterung
Array
vonInteger
s.[0,1,2..20]
.Array
[0,1,2..20]
sortiert ist, muss das erste Element das mex sein.quelle
20
statt verwenden21
, da die Eingabe nur 20 Elemente enthalten kann.Haskell, 30
Dies funktioniert für Listen aller Größen und Listen jenseits von 20. Dies kann zu einer Länge von 15 Byte gemacht werden, wenn Data.List importiert wird:
quelle
Schema - 219
Nicht sehr wettbewerbsfähig. Aber ich schreibe gerne Schema :),
Hier ist der ungolfed Code:
quelle
Python, 37 Zeichen
quelle
range(21)
.f=lambda l,i=0:i in l and f(l,i+1)or i
ist eini=0;l=input()\nwhile i in l:i+=1\nprint i
Zeichen länger und die iterative Lösung ist zwei Zeichen länger (wenn die Eingabe nicht gespeichert wird, wird sie wiederholt verwendet).20
Ich denke, dass diese Ansätze sich ohne diese Grenzen durchsetzen würden.C # - 64 Zeichen
Nicht immerSelten die beste Golfsprache, aber einfach zu schreiben und zu verstehen :)quelle
Scala, 18 Bytes
l
ist eine Liste von Int.quelle
Java , 91 Bytes
Probieren Sie es online!
quelle
Java 7,
6966 Bytes-3 Bytes dank @LeakyNun
Erläuterung:
Unterstützt stattdessen nicht nur 0-20, sondern 0-2147483647 (was tatsächlich Bytes spart).
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
APL (Dyalog) , 19 Bytes
Probieren Sie es online!
Ich vermisse hier wahrscheinlich etwas Wichtiges. Golfen im Gange ...
quelle
TI-BASIC, 24 Byte
Wenn
Prompt X
anstelle einer einzelnen Nummer eine Liste angegeben wird, wird automatisch eine Liste mit dem Namen erstelltX
, auf die zugegriffen werden kannʟX
.quelle
Prompt X:0:While not(prod(ʟX-Ans:Ans+1:End:Ans
Stax , 6 Bytes
Führen Sie es aus und debuggen Sie es
Erläuterung
quelle
APL (Dyalog Classic) , 11 Bytes
Probieren Sie es online!
quelle
Gelee , 7 Bytes
Ein anderer Ansatz. Kann in einer Kette beliebiger Art verwendet werden und benötigt keinen Kettentrenner oder ähnliches.
Da die Antwort garantiert weniger als 256 ist, funktioniert dies auch:
Gelee , 5 Bytes
Probieren Sie es online!
quelle
Powershell, 28 Bytes
Testskript:
Ausgabe:
Erläuterung:
$i
während das$args
Array den ganzzahligen Wert enthält+$i
.+$i
.quelle
MathGolf ,
54 BytesProbieren Sie es online!
Diese Lösung ist auf den Bereich von 0 bis 20 beschränkt, kann jedoch durch Erhöhen des Anfangsbereichs problemlos erweitert werden.
Erläuterung:
Alternativ eine 5-Byte-Lösung für alle Zahlen:
Probieren Sie es online!
Erläuterung:
quelle
Z
anstattJ
weil ich faul war).Perl - 34
Hier ist eine Unterroutine.
Testen Sie mit:
quelle
Java, 93
Ungolfed:
quelle
-1
für Testfall[]
.Cobra - 50
quelle
Javascript, 74
Schön und einfach! Beachten Sie die leere while-Schleife.
quelle
JavaScript (E6) 35
Rekursive Funktion, Array-Parameter in Eingabe und Rückgabe der
mex
. Nicht auf 20 begrenztTest in der FireFox / FireBug-Konsole
Ausgabe
quelle
PHP, 38 Bytes
PHP, 39 Bytes
quelle