Einführung
Per Definition sollten eindeutige Bezeichner eindeutig sein. Wenn mehrere Identifikatoren identisch sind, ruft einer unerwartete Daten ab. Bei Daten, die gleichzeitig aus mehreren Quellen eingehen, kann es jedoch schwierig sein, die Eindeutigkeit sicherzustellen. Schreiben Sie eine Funktion, die eine Liste von Bezeichnern eindeutig macht.
Dies ist möglicherweise der schlimmste Puzzle-Flaum, den ich geschrieben habe, aber Sie haben die Idee.
Bedarf
Wenden Sie bei einer Liste mit null oder mehr positiven ganzen Zahlen die folgenden Regeln auf jede Zahl vom ersten bis zum letzten an:
- Wenn die Nummer die erste ihrer Art ist, bewahren Sie sie auf.
- Wenn die Zahl bereits einmal angetroffen wurde, ersetzen Sie sie durch die niedrigste positive Ganzzahl, die in der gesamten Eingabeliste oder einer vorhandenen Ausgabe nicht vorhanden ist.
Für die Lösung:
- Die Lösung kann ein Programm oder eine Funktion sein.
- Die Eingabe kann eine Zeichenfolge, ein als Argument übergebenes Array oder eine Tastatureingabe sein.
- Die Ausgabe kann eine Zeichenfolge, ein Array oder ein Ausdruck auf dem Bildschirm sein.
- Alle Zahlen in der Ausgabeliste sind unterschiedlich.
Annahmen
- Die Eingabeliste ist sauber. Es enthält nur positive ganze Zahlen.
- Eine positive ganze Zahl hat den Bereich von 1 bis 2 31 -1.
- Für die Variablen Ihres Programms sind weniger als 256 MB Speicher verfügbar. (Grundsätzlich sind keine Arrays mit 2.147.483.648 Elementen zulässig.)
Testfälle
Input: empty
Output: empty
Input: 5
Output: 5
Input: 1, 4, 2, 5, 3, 6
Output: 1, 4, 2, 5, 3, 6
Input: 3, 3, 3, 3, 3, 3
Output: 3, 1, 2, 4, 5, 6
Input: 6, 6, 4, 4, 2, 2
Output: 6, 1, 4, 3, 2, 5
Input: 2147483647, 2, 2147483647, 2
Output: 2147483647, 2, 1, 3
Wertung
Nur ein einfacher Code Golf. Die niedrigste Byteanzahl von dieser Zeit nächste Woche gewinnt.
code-golf
set-theory
Hand-E-Food
quelle
quelle
6, 6, 1, 2, 3, 4, 5
→6, 7, 1, 2, 3, 4, 5
6, 6, ...
geben6, 1, ...
?6, 6, 4, 4, 2, 2
Testfall bestätigt Adáms Interpretation: Die erwartete Ausgabe ist6, 1, 4, 3, 2, 5
und nicht6, 1, 4, 2, 3, 5
.Antworten:
Brachylog , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java 8,
158144 Bytes.contains(m+c);m++)
um.contains(++m+c);)
1 Byte zu speichern , und gleichzeitig auf Java 8 umgewandelt 13 weitere Bytes zu speichern.Erklärungen:
Probieren Sie es hier aus.
quelle
JavaScript (ES6), 49 Byte
quelle
Ruby , 63 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E ,
171618 BytesProbieren Sie es online!
Erläuterung
quelle
6, 6, 1, 2, 3, 4, 5
.[6, '1', '2', '3', '4', '5', '7']
. Sollte geben[6, '7', '1', '2', '3', '4', '5']
.PHP, 121 Bytes
Online Version
Erweitert
quelle
Python 2,
7779 BytesNimmt Tastatureingaben wie
[3, 3, 3, 3, 3, 3]
.Verfolgen Sie einfach die kleinste positive Ganzzahl
j
, die bisher nicht verwendet wurde. Für jedes Elementx
der Eingabe wird ausgegeben,x
wenn esx
noch nicht verwendet wurde, andernfalls wird ausgegebenj
. Aktualisierenj
Sie schließlich jedes Mal , wenn Sie etwas ausgeben.BEARBEITET: um eine Fehlerbehandlungseingabe von zu beheben
[6, 6, 4, 4, 2, 2]
. Vielen Dank an @Rod für den Hinweis auf den Fehler sowie eine Fehlerbehebung. Der Fehler bestand darin, dass im Falle eines doppelten Eintrags die kleinste Zahl ausgegeben wurde, die bis zu diesem Punkt in der Liste nicht verwendet wurde, selbst wenn diese Ausgabe später in der Eingabe erschien. (Dies war falsch, wie im Beitrag und in den Kommentaren klargestellt, aber ich habe es trotzdem irgendwie durcheinander gebracht.) Trotzdem bestand die Korrektur darin, die Eingabeliste einfacha
zu den Werten hinzuzufügen, die in diesem Fall nicht ausgegeben werden konnten.quelle
[6,6,4,4,2,2]
, Sie können (wahrscheinlich) das Problem beheben, indem Sie+a
denwhile j in u:
->while j in u+a:
Haskell ,
79-76BytesBEARBEITEN:
head
durch eine Musterübereinstimmung ersetzt werden konnte.([]#)
ist eine anonyme Funktion, die eine Liste aufnimmt und zurückgibt. Verwenden Sie wie([]#)[2147483647, 2, 2147483647, 2]
.Probieren Sie es online!
Wie es funktioniert
?
ist ein abgekürzter Operator zum Überprüfen, ob ein Element in einer Liste fehlt.s#l
Behandelt die Liste der Ganzzahlenl
, wenn eine Listes
der bereits verwendeten Ganzzahlen vorliegt.x
ist die nächste zu betrachtende Ganzzahl,y
die übrigen.z
ist die für den nächsten Punkt gewählte Ganzzahl. Es ist,x
wennx
ist kein Element vons
und die erste positive ganze Zahl weder ins
noch iny
sonst.(z:s)#y
dann rekursiv mitz
zur Liste der verwendeten Ganzzahlen hinzugefügt.n
ist eine leere Liste, da nicht leere Listen in der vorherigen Zeile behandelt wurden.([]#)
nimmt eine Liste und ruft#
sie als zweites Argument und eine leere Liste für das erste Argument auf.quelle
|z:_<-[x|...]...
APL (Dyalog 16.0), 34 Bytes
quelle
Pyth ,
21 bis20 BytesTestsuite
Ich werde eine Erklärung hinzufügen, wenn ich Zeit habe.
quelle
C # , 135 Bytes
Golf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
135 bytes
- Anfangslösung.Anmerkungen
quelle
Python 2 , 101 Bytes
Probieren Sie es online! oder Probieren Sie alle Testfälle aus
quelle
R 39
46BytesErstellt einen Vektor aus der Eingabe und ersetzt dann die duplizierten Werte durch einen Bereich von 1 bis 1 Million, bei dem die Eingabewerte entfernt wurden. Gibt einen numerischen Vektor zurück. Keine Eingabe gibt den leeren numerischen Vektor (0) zurück.
Probieren Sie es online!
Dies gibt eine Warnung über die Länge des Ersatzvektors aus
quelle
C
169 Bytes133 BytesEingabe = Array a, Ausgabe = modifiziertes Array a
formatiert
Für diese Schleife wurden zu viele Bytes verschwendet. Denkt jemand daran, den Code durch die Erfindung eines neuen Algorithmus (der weniger Schleife verwendet) zu verkürzen? Ich habe nachgedacht, aber noch keinen gefunden.
quelle
C # 7, 116 Bytes
Eingerückt
Erklärt
[1, 2, 3, ...]
, wobei die in der Eingabe vorhandenen Werte übersprungen werden.Online Version
quelle
Clojure, 72 Bytes
Eine Grundreduktion. Wenn
i
in der Ausgabeliste bisher enthalten ist, werden wir das 2. Element (1, wenn 0-indiziert) aus der unendlichen Liste von Ganzzahlen nehmen,(range)
aus denen wir die bereits verwendeten Zahlen entfernt haben. Der Bereich beginnt bei Null, sodass wir nicht das erste Element, sondern das zweite nehmen können.quelle
R 74 Bytes
liest die Liste von stdin; Gibt NULL für eine leere Eingabe zurück.
Erläuterung:
1:length(n)
kann verwendet werden, da wir garantiert keinen Ersatz von außerhalb dieses Bereichs benötigen.Probieren Sie es online!
quelle
Axiom, 169 Bytes
ungolf und ergebnis
quelle