Es sei eine Liste positiver Ganzzahlen ohne bestimmte Reihenfolge, die Duplikate enthalten können. Schreiben Sie ein Programm oder eine Funktion, die eine Liste positiver Ganzzahlen M ausgibt (deren Reihenfolge unwichtig ist), so dass durch Zusammenführen von L und M die kleinste Liste entsteht, die sich vollständig in identische Bereiche von Ganzzahlen [ 1 .. i ] aufteilen lässt , wobei i die ist größtes Element in L
Beispiel
Lassen L = [5,3,3,2,7]
. Das maximale Element von L
ist 7
. Das häufigste Vorkommen einer bestimmten Ganzzahl ist 2
( 3
erscheint zweimal). Daher müssen wir die Liste ausgeben M
, die das Vervollständigen ermöglicht, L
damit wir 2
Bereiche von ganzen Zahlen von 1
bis konstruieren können 7
.
Daher müssen wir ausgeben M = [1,1,2,4,4,5,6,6,7]
, damit jede Ganzzahl von 1
bis mal 7
erscheint 2
.
Eingänge und Ausgänge
- Verwenden Sie in Ihrer Sprache alles, was Listen ähnelt. Die für die Eingabe und die Ausgabe verwendete Datenstruktur muss identisch sein.
- Die Eingabeliste enthält nur positive ganze Zahlen.
- Die Eingabeliste wird nicht leer sein.
- Sie können nicht davon ausgehen, dass die Eingabeliste sortiert ist.
- Die Reihenfolge in der Ausgabeliste ist unwichtig.
Testfälle
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
quelle
i
das größte Element vonL
oderM
?i
ist das größte Element vonL
, es war ein Tippfehler in den Spezifikationen.M=[1,1,2,2,3]
zu ,L=[3]
während „Verschmelzung L und M führt zu einer Liste , die in identische Bereiche von ganzen Zahlen ganz aufspalten [1..i]“?[1,2]
. Ich werde es klarstellen, damit klar ist, dass es die minimale Anzahl von Bereichen ergeben sollte.Antworten:
Gelee , 9 Bytes
Dank Jonathan Allan 1 Byte gespeichert . Die Fußzeile ruft den Hauptlink auf, sortiert das Ergebnis entsprechend den Testfällen und formatiert die Ausgabe als Raster.
Probieren Sie es online! oder Testen Sie eine Testsuite!
Alternativen
Probieren Sie eines davon online aus!
Erläuterung
quelle
Perl 6 ,
3733 Bytes-4 bytes dank nwellnhof!
Probieren Sie es online!
Anonymer Codeblock, der ein Bag nimmt und ein Bag mit Werten zurückgibt.
Erläuterung:
quelle
{^.max+1 xx.Bag.values.max∖.Bag}
{^.keys.max+1 xx.values.max∖$_}
weiteres Byte gespeichert.R ,
594948 BytesProbieren Sie es online!
quelle
rep
anders erzeugt, aber ansonsten das gleiche ist wie bei Ihnen. Ich könnte es selbst posten, aber ich glaube nicht, dass ich daran gedacht hätte, wenn ich nicht deins zuerst gesehen hätte. Ich fordere Sie auf, es zu finden!split
aber estabulate
ist viel besser!x=max(L<-scan());rep(1:x,1:x-lengths(split(L,c(L,1:x))))
die nach weiteren Tests nicht für Testfälle wie7
...Python 2 ,
86838072 BytesProbieren Sie es online!
quelle
05AB1E ,
171617 Bytes-1 Byte dank @ Mr.Xcoder .
+1 Byte nach Behebung des Problems
Vielleicht schaue ich komplett darüber hinweg, aber hat 05AB1E überhaupt ein Entfernen aller Listenelemente b aus Liste a . (Multiset-Unterschied)
Kann auf jeden Fall Golf gespielt werden. Nicht wirklich glücklich damit, tbh ..
sehen, ob ich noch mehr Golf spielen kann, bevor ich eine Erklärung hinzufüge.EDIT: Eine Erklärung hinzugefügt ..Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
K a,b Push a without b's
? Oh, warte "einmal" ... hmm[1,2,3,4,5,6,7,1,2,3,4,5,6,7]
und[5,3,3,2,7]
mitK
ergebnissen in[1,4,6,1,4,6]
leider. Es werden alle Elemente entfernt, anstatt einen Unterschied zwischen mehreren Sätzen zu machen.¢ZIZLŠŠи
sollte 1 Byte speichernR ,
5955 BytesMit dem
vecsets
Paket können wir die Antwortlänge ein wenig reduzieren. Mit könnengl
wir die bestellte Ausgabe bekommen. Dies funktioniert in TIO nicht. In Anlehnung an @ digEmAlls (ziemlich clevere) Lösung ohne Funktionsdefinition kann dies als 55-Byte-Lösung betrachtet werden.quelle
f(c(5,3,3,2,7))
JavaScript (ES6), 98 Byte
Dies stellte sich als ziemlich schwierig heraus, unter 100 Bytes Golf zu spielen. Es könnte einen besseren Ansatz geben.
Probieren Sie es online!
Wie?
Wir gehen zuerst durch das Eingabearray
a[]
, um die folgenden Daten zu erfassen:M
= höchstes im Eingabearray gefundenes Elementm
= höchste Anzahl von Vorkommen desselben Elementso[n]
= Anzahl der Vorkommen vonn
Beachten Sie, dass dies
o
in erster Linie als Funktion definiert ist, das zugrunde liegende Objekt jedoch auch zum Speichern der Anzahl der Vorkommen verwendet wird.Wir verwenden dann die rekursive Funktion
g()
, um die Ausgabe zu erstellen.quelle
Haskell, 72 Bytes
Probieren Sie es online!
quelle
Brachylog ,
1817 BytesProbieren Sie es online!
1 Byte dank @Kroppeb gespeichert.
Erläuterung
quelle
⌉
anstelle vonot
Java 10, 186 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle
Schale , 12 Bytes
Dank BWO 1 Byte gespart .
Probieren Sie es online!
quelle
MATL ,
2421 BytesProbieren Sie es online!
quelle
MATL , 14 Bytes
Die Eingabe ist ein Spaltenvektor mit
;
Trennzeichen.Probieren Sie es online! Oder überprüfen Sie alle Testfälle (dies wird
--
nach jeder Ausgabe angezeigt, damit leere Ausgaben identifiziert werden können).Erläuterung
Betrachten Sie die Eingabe
[5; 2; 4; 5; 5]
als Beispiel.quelle
Pyth , 13 Bytes
Probieren Sie es hier aus! oder Testen Sie eine Testsuite!
quelle
Holzkohle , 19 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Wäre 16 Byte gewesen, wenn die Ganzzahlen nicht negativ, sondern positiv gewesen wären. Erläuterung:
quelle
APL (Dyalog Classic) ,
18 bis17 BytesProbieren Sie es online!
Verwendet
⎕io←1
quelle
Prolog (SWI) , 211 Bytes
Es ist schon eine Weile her, dass ich in Prolog programmiert habe. Kann definitiv weiter golfen werden, aber ich muss eine Prüfung für hahaha ablegen.
Code
Probieren Sie es online!
Ungolfed-Version
quelle
Clojure, 94 Bytes
quelle
C ++, 234 Bytes
(Zeilenumbrüche im Funktionskörper dienen der Lesbarkeit).
Die Funktion nimmt und gibt einen Vektor von Ints zurück. Es nutzt
std::map
um das Element max in der Eingabeliste zu finden und um die Vorkommen jedes einzelnen Elements zu zählen.Erläuterung:
quelle
Gaia , 12 Bytes
Probieren Sie es online!
quelle
C (gcc) 177 Bytes
Die Ein- und Ausgabe erfolgt über stdin und stdout. Beide Arrays sind auf 2 ^ 15 Elemente begrenzt, können jedoch bis zu 2 ^ 99 Elemente umfassen.
Mit etwas Formatierung:
Probieren Sie es online!
quelle