Das Ziel dieser Herausforderung ist es, eine Reihe positiver Ganzzahlen zu nehmen und ihre Indizes zu zählen, wobei ähnliche Elemente gruppiert werden.
Eine Aufzählung ohne Duplikate erfolgt durch einfache Ausgabe eines Arrays von Paaren (value, index)
, z. B. [3, 4, 13, 9, 2]
=> [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
Wenn ein bestimmtes Element jedoch ein zweites Mal angezeigt wird, erhält es kein eigenes Paar, sondern wird stattdessen zur Gruppe seines ersten Auftretens hinzugefügt. Wenn in unserem Beispiel wir die 9 mit 3, dann in der Ausgabe ersetzt würden wir entfernen [9,4]
und ersetzen [3,1]
mit [3,1,4]
.
In der Ausgabe müssen die Gruppen nach ihrem ersten Vorkommen geordnet sein und die Indizes müssen in aufsteigender Reihenfolge vorliegen. Das Element muss sich zuerst in einer Gruppe befinden, bevor seine Indizes angezeigt werden. Der Ausgang kann 0 oder 1 indiziert sein. Sie können davon ausgehen, dass das Array mindestens ein Element enthält.
Testfälle:
Input | Output (One-indexed)
[3, 2, 2, 3] | [[3, 1, 4], [2, 2, 3]]
[17] | [[17, 1]]
[1, 1] | [[1, 1, 2]]
[1, 1, 2] | [[1, 1, 2], [2, 3]]
[1, 2, 3, 4] | [[1, 1], [2, 2], [3, 3], [4, 4]]
[1, 1, 1, 1] | [[1, 1, 2, 3, 4]]
Das ist Code-Golf , die wenigsten Bytes gewinnen!
[[17,"1"]]
? (Ich weiß noch nicht, ob ich auf diese Weise Bytes speichern kann, während ich noch daran arbeite!)[[3, [1, 4]], [2, [2, 3]]]
stattdessen so etwas ausgeben ?Antworten:
Dyalog APL, 5 Bytes
Probieren Sie es online!
,⌸
für 2 Bytes funktioniert fast , hat aber nachgestellte Nullen: /quelle
⌸
das?,⌸
es möglich, alle Nullen in weniger als 3 Bytes zu löschen, da die Isue mit nachgestellten Nullen und Nullen niemals in der Eingabe sein werden?J , 12 Bytes
Null indexiert.
Probieren Sie es online!
Wenn Sie die ganze Arbeit, die ich mit Boxen mache, entfernen können, können Sie den Bytecount wahrscheinlich um einiges reduzieren. Ich werde sehen, ob ich das herausfinden kann.
Erläuterung
Dies ist wahrscheinlich zu früh, um es zu erklären (es sollte mehr Golf geben).
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 3 ,
8382 Bytes-1 Byte dank Mego
Probieren Sie es online!
quelle
j+1
->j
(Indizes können mit einem Nullindex versehen sein)Haskell , 48 Bytes
Probieren Sie es online!
quelle
Attache , 15 Bytes
Probieren Sie es online!
Dies ist ein interessanter Fall
=>
der Operatorform vonMap
. Wenn zwei funktionelle Argumente gegebenf
undg
,Map
gibt eine Funktionf => g[x]
überx
. Das heißt, der RHS-Wert wird auf den Eingang angewendet, und dann wird der LHS-Wert zugeordnet.Das Builtin
Positions
generiert ein Array, das die Gruppierung von Einträgen nach Indizes darstellt. Wenn kein zweites Argument angegeben ist,Positions
wird standardmäßig das erste Argument verwendet.Flat
wird dann über jedes Element abgebildet, da dies für die Frage erforderlich ist.Alternativlösungen
31 Bytes
Probieren Sie es online!
Eine ziemlich kurze, eingebaute Alternative.
MapArgs
ist eine Funktion wieMap
, mit der Ausnahme, dass Sie zusätzliche Argumente eingeben können. Zum BeispielMapArgs[{_1 + _2}, 1..3, 3]
ist[4, 5, 6]
. WieMap
wird es mit zwei funktionalen Argumenten geliefert curried. Die abzubildende Funktion istConcat#~Indices
, welches eine Gabel ist. Diese Verzweigung wird auf dieUnique
Elemente der Eingabe und die Eingabe selbst angewendet . Dies führt zuConcat[_, Indices[_2, _]]
(mit den ArgumentenIndices
getauscht durch~
), die paarweise das Element (abgebildet wird_
) mit dem Indizes des Elements_
in dem Eingangsfeld, das ist_2
(wie durch FFEDMapArgs
).43 Bytes
Probieren Sie es online!
Dies ist wirklich nur eine ausführlichere (und doch ein bisschen besser lesbare) Kombination der Lösungen Nr. 1 und Nr. 2.
quelle
Gelee , 6 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Pyth , 7 Bytes
0-indiziert.
Probieren Sie es hier aus! Alternative.
Wie?
quelle
MATL , 8 Bytes
Probieren Sie es bei MATL Online aus
Erläuterung
quelle
&f
aber nie zum Laufen brachte.Eigentlich 24 Bytes
Probieren Sie es online!
Erläuterung:
quelle
R , 56 Bytes
Probieren Sie es online!
Dies ist mein erster Versuch mit Codegolf, daher ist jedes Feedback willkommen!
quelle
x
, aber es muss eine Möglichkeit zum Lesen der Eingabe geben - normalerweise verwendenscan
oder definieren wir eine Funktion. Außerdem muss es ausgegeben werden, also muss es in aprint
oder a eingeschlossen werdencat
.Wolfram Language (Mathematica) , 40 Byte
Dank Martin Ender ein Byte gespeichert.
Probieren Sie es online!
quelle
@*PositionIndex
Arbeit?@*
ist die Zusammensetzung von Funktionen.PositionIndex
Im Grunde erledigt er den ganzen Job, gibt aber eine Zuordnung anstelle einer Liste zurück.{#,##&@@#2}&
Speichert ein Byte.JavaScript (ES6), 64 Byte
0 indiziert
Beachten Sie, dass dies voraussetzt, dass die Eingangsnummern positiv sind, also v> 0
Test leicht modifiziert (1 indiziert), um den Testfällen zu entsprechen
quelle
APL NARS, 24 Byte, 12 Zeichen
-4 Bytes dank Adam Test:
quelle
{∪⍵,¨⍸¨⍵=⊂⍵}
SWI-Prolog ,
165117 Bytes-48 Bytes dank Prolog Golftipps .
Probieren Sie es online!
Erläuterung
quelle
K (ok) , 10 Bytes
Lösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Die Auswertung erfolgt von rechts nach links. Ich denke immer noch, dass dies weiter golffähig ist ...
Anmerkungen:
x
,(,/)'+(!;.)@'=
gaben mit diesem Ansatz auf ...quelle
1+
.Julia 0,6 , 37 Bytes
Vielen Dank an Pavel für 1 Byte.
Probieren Sie es online!
quelle
]
undfor
für -1 Byte.JavaScript (ES6), 68 Byte
0-indiziert.
Testfälle
Code-Snippet anzeigen
quelle
PHP 4.1, 88 Bytes
Ja, es ist ziemlich lang.
Dies setzt eine Standarddatei
php.ini
(short_open_tag = On
undregister_globals = On
) voraus .Dies stellt das Array auf eine für den Menschen lesbare Weise dar.
Die Werte können per POST, GET und COOKIE in der Taste "A" übergeben werden.
Für eine moderne Version kann man (90 Bytes) verwenden:
Das Ergebnis ist das gleiche, außer dass alle Werte innerhalb des Schlüssels "A" über GET-Parameter übergeben werden müssen.
quelle
Perl 6 ,
6361 BytesTeste es (0-basiert)
Testen Sie es (0-basierter gleicher Algorithmus)
Erweitert:
quelle
Japt ,
149 Bytes0-indiziert.
Versuch es
quelle
PHP 7.4+ , 71 Bytes
* 73 Bytes, um den
$_GET
Schlüssel in Anführungszeichen zu setzen und Warnungen zu vermeiden.Snippet: ( Demo )
Basierend auf rep, gehe ich davon aus IsmaelMiguel dem besten Weg zu einem post PHP - Code in dieser Gemeinschaft weiß , damit ich aus bin der Aufbau seiner Stiftung . Es ist mir nicht klar, ob
<?
es in meinem Snippet enthalten sein soll . Da dies mein erster Beitrag ist, kann mir jeder erklären, ob es eine unnötige Syntax gibt. ps Ich habe auch Tipps zum Golfen in PHP gelesen, was mir als großartiger Kandidat für die Migration zu Meta erscheint .Die Verbesserungen an Ismaels Snippet sind:
array_values()
die Ausgabe neu zu indizieren.quelle
Sauber ,
6160 BytesProbieren Sie es online!
Der Ausgang ist 0-indiziert
quelle
Kotlin , 83 Bytes
Verschönert
Prüfung
TIO
TryItOnline
quelle
i
muss vordefiniert sein. Sie können dies gültig machen, indem Sie es in ein Lambda konvertieren, das einen Parameter annimmti
.Schnelle 4, 107 Bytes
... Huch.
Ungolfed:
Es ist schade, dass das Wörterbuch die Reihenfolge verliert, was mich dazu zwingt, so viele Zeichen beim erneuten Sortieren zu verschwenden. Diese Art von Missbrauch von impliziten Schließung Argumente (
$0
,$1
, ...) und implizite Tupel Mitglieder (.0
,.1
, ...) ist uhhhhh nicht schön.quelle
Perl 5 , 63 + 1 (
-a
) = 64 BytesProbieren Sie es online!
quelle
Ruby ,
5452 BytesDiese Version erlaubt nil (53 Bytes):
Probieren Sie es online!
quelle
nil
ist keine positive ganze Zahl.