Inspiriert von diesem StackOverflow-Beitrag.
Einführung
Bobs Aufgabe ist es, Tabellen zu erstellen und zu organisieren. Die Art und Weise, wie er sie organisiert, ist nur wenigen bekannt, außer Bob. Er erstellt jedoch eine Liste aller Tabellenkalkulationen, die derselben Gruppe angehören. Das von ihm erstellte Arbeitsblatt enthält eine Reihe von Daten, aber es gibt nur ein einziges Datenelement, das wir derzeit betrachten: Die Anzahl der Tage zwischen dem Tag, an dem er diesen Job gestartet hat, und dem Tag, an dem er das Arbeitsblatt erstellt hat. Am ersten Tag erstellte er zwei Tabellenkalkulationen, notierte beide als 0
und sortierte sie an den richtigen Positionen.
Jetzt bittet sein Chef um eine Überprüfung, welche Art von Tabellenkalkulation jeden Tag passiert ist, und es ist Ihre Aufgabe, Code zu schreiben, der das für Bob herausfindet. er hat viel zu viele Tabellenkalkulationen, um es von Hand zu tun.
Eingang
Bobs Informationen, die er Ihnen gibt, werden in Form eines (0 oder 1 indizierten) gezackten Arrays geliefert, wobei jedes Datum von der Form ist x = a[i][j]
. a
ist das, was ich das gezackte Array selbst nenne, i
ist der Typ der Tabelle und x
ist das Datum, an dem das Array erstellt wurde. j
ist unwichtig.
Die Aufgabe
Wenn eine gezackte Reihe von Tabellenkalkulationstagen nach Typ geordnet ist, geben Sie eine gezackte Reihe von Tabellenkalkulationstypen zurück, die nach Tabellenkalkulationstag geordnet sind.
Beispiele
Bob wird Sie nicht einfach mit diesen abstrakten Daten zurücklassen. Er hat mir einen Teil seiner Tabellen gegeben, um Ihnen dabei zu helfen, herauszufinden, was alles sein soll.
Beispieleingabe (0-indiziert):
a = [
[3,2,5,0], # Bob doesn't necessarily sort his lists
[1,3],
[2,1,0,4],
[4,5,3],
[6,6]
]
Beispielausgabe (mit Kommentar, der natürlich nicht benötigt wird):
output = [
[0,2] # On day 0, Bob made one type 0 and one type 2 spreadsheet
[1,2] # On day 1, Bob made one type 1 and one type 2 spreadsheet
[0,2] # On day 2, Bob made one type 0 and one type 2 spreadsheet
[0,1,3] # On day 3, Bob made one type 0, one type 1, and one type 3 spreadsheet
[2,3] # On day 4, Bob made one type 2 and one type 3 spreadsheet
[0,3] # On day 5, Bob made one type 0 and one type 3 spreadsheet
[4,4] # On day 6, Bob made two type 4 spreadsheets
]
Beachten Sie, dass Bob nicht immer zwei Tabellen pro Tag erstellt, sodass die Ausgabe möglicherweise auch uneinheitlich ist. Er erstellt jedoch immer mindestens eine Tabelle pro Tag, sodass die Ausgabe niemals leere Arrays enthalten muss. Wenn Ihre Ausgabe am Ende leere Arrays enthält, müssen Sie sie nicht entfernen.
Weitere Testfälle:
[[3,5,6,2],[0,0,0],[1,0,3,4]] -> [[1,1,1,2],[2],[0],[0,2],[2],[0],[0]]
[[-1]] -> Undefined behavior, as all input numbers will be non-negative integers.
[[0],[0],[],[0]] -> [[0,1,3]]
Die inneren Listen der Ausgabe müssen nicht sortiert werden.
Wie immer gibt es keine Standardlücken und natürlich gewinnt der kürzeste Code.
(Da dies meine erste Frage ist, lassen Sie mich bitte wissen, was ich tun kann, um sie zu verbessern.)
quelle
[[0 0]]
zB eine Ausgabe geben[[0 0] []]
?Antworten:
Jelly ,
11 bis10 BytesEingang und Ausgang sind 1-basiert.
Probieren Sie es online! oder überprüfen Sie alle Testfälle (0-basiert zum einfachen Vergleich).
quelle
Pyth, 13 Bytes
Probieren Sie es online aus
quelle
Pyth , 14 Bytes
Testsuite.
quelle
Brachylog , 28 Bytes
Erläuterung
Hauptprädikat, Input (
?
) = eine Liste von ListenPrädikat 1:
Prädikat 2:
quelle
Lua, 114 Bytes
Ideone es!
Inspiriert von Dennis 'Antwort in Python 2 .
quelle
JavaScript (ES6), 58 Byte
quelle
CJam (
3029 Bytes)Online-Demo
Seltsamerweise ist es kürzer, mit etwas herumzuhacken,
W
als es zu benutzenee
, hauptsächlich, weil der Index sowieso in einer Variablen enden soll.e]
sparte zwei Bytes über das erste Finden des maximalen Elementsm
und ein Array vonm+1
leeren Arrays zu initialisieren .Vielen Dank an Martin für die Einsparung von einem Byte, indem er einen Wert speichert,
X
anstatt ihn um den Stapel zu jonglieren.Hinweis: Wenn nachgestellte leere Arrays zulässig sind, können Sie alternativ 29-Byte-Ansätze verwenden, indem Sie das Array mit so vielen leeren Tagen wie Tabellenkalkulationen initialisieren:
quelle
CJam, 20 Bytes
Vielen Dank an Peter Taylor, der mir ermöglicht hat, diesen Code auf seine Lösung zu stützen und 3 Bytes zu sparen.
Ein unbenannter Block, der die Eingabe über dem Stapel erwartet und durch die Ausgabe ersetzt.
Teste es hier.
Erläuterung
quelle
Python 2, 82 Bytes
Teste es auf Ideone .
quelle
Mathematica, 35 Bytes
Eine unbenannte Funktion, die eine uneinheitliche Liste akzeptiert und zurückgibt. Verwendet 1-basierte Indizes.
Dankenswerterweise
Max
werden alle Eingaben automatisch geglättet, sodass wir den Index für den letzten Tag erhalten, obwohl es sich bei der Eingabe um eine uneinheitliche Liste handelt. Wir berechnen dann einfach eine Liste#&@@@#~Position~i
aller Tagesindizesi
. Dieser Ausdruck selbst findet die Positioni
innerhalb der uneinheitlichen Liste (Rückgabe als ein Array von Indizes in aufeinanderfolgenden Tiefen), sodass die gewünschten Werte die ersten Werte jeder dieser Listen sind.#&@@@
ist ein Standardtrick zum Golfen, um das erste Element aus jeder Unterliste abzurufen, indem es#&
auf jede dieser Unterlisten angewendet wird. Dies ist eine unbenannte Funktion, die ihr erstes Argument zurückgibt.Alternativ können wir einen unären Operator für dieselbe Bytezahl definieren (unter der Annahme einer ISO 8859-1-codierten Quelldatei):
quelle
Java, 314 Bytes
Detailliert
quelle
Map
?Perl 5, 48 Bytes
Ein Unterprogramm:
Sehen Sie es in Aktion wie folgt:
quelle