Herausforderung:
Sortieren Sie bei einer Liste mit Ganzzahlen absteigend nach den größten einzelnen Ziffern. Die Reihenfolge für Zahlen mit der gleichen größten Ziffer wird dann nach der zweitgrößten Ziffer usw. sortiert.
Doppelte Ziffern in Zahlen werden ignoriert. Und wenn alle Ziffern einer Nummer gleich sind, kann die Reihenfolge dieser Nummern in der Liste beliebig sein.
Beispiel:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Warum? Hier sind die relevanten Ziffern, nach denen die Nummern sortiert wurden:
Output:
[8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0 ]
Relevant digits they were sorted on:
[[9,8], [9,4], [8,7,6], [8,7,4], [8,7,3], [8,6], [7,3], [7,3], [3,2,1,0], [3,2,1], [0]]
Herausforderungsregeln:
- Wir ignorieren doppelte Ziffern
478
und-7738
werden als geordnet478, -7738
, da die größten Ziffern[8,7,4]
und[8,7,3]
und nicht[8,7,4]
und sind[8,7,7,3]
. - Wenn mehrere Nummern die gleichen Ziffern haben, kann die Reihenfolge dieser so oder so sein. So
373
und-73
kann als beide373, -73
oder sortiert werden-73, 373
(Ziffern sind[7,3]
für beide dieser Nummern). - Wenn eine Nummer keine weiteren zu überprüfenden Ziffern enthält, wird sie hinter den entsprechenden Nummern platziert. Also
123
und3120
wird sortiert wie3120, 123
, da die größten Ziffern gleich[3,2,1]
sind, aber0
vorher kommennone
. - Sie können davon ausgehen, dass alle Zahlen in der Eingabe im Bereich liegen
[-999999,999999]
. - Nur eine der möglichen Ausgaben ist als Ergebnis ausreichend, aber Sie können alle möglichen Ausgaben ausgeben, bei denen sich Unterlisten in einer beliebigen Permutation befinden können, wenn Sie dies wünschen (obwohl ich bezweifle, dass dadurch Bytes in einer beliebigen Sprache gespart werden).
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input: [123, 478, -904, 62778, 0, -73, 8491, 3120, 6458, -7738, 373]
Possible outputs: [8491, -904, 62778, 478, -7738, 6458, 373, -73, 3120, 123, 0]
[8491, -904, 62778, 478, -7738, 6458, -73, 373, 3120, 123, 0]
Input: [11, -312, 902, 23, 321, 2132, 34202, -34, -382]
Possible outputs: [902, -382, 34202, -34, -312, 321, 2132, 23, 11]
[902, -382, 34202, -34, 2132, -312, 321, 23, 11]
etc. The sublist [-312, 321, 2132] can be in any permutation
Input: [9, 44, 2212, 4, 6, 6, 1, 2, 192, 21, 29384, 0]
Possible outputs: [29384, 192, 9, 6, 6, 4, 44, 2212, 21, 2, 1, 0]
[29384, 192, 9, 6, 6, 44, 4, 2212, 21, 2, 1, 0]
etc. The sublists [4, 44] and [2212, 21] can be in any permutation
Input: [44, -88, 9, 233, -3, 14, 101, 77, 555, 67]
Output: [9, -88, 67, 77, 555, 14, 44, 233, -3, 101]
m:g/\d./
für.abs.comb
: tio.run/…Python 2 ,
605554 Bytes-1 Byte dank Jonas Ausevicius .
Probieren Sie es online!
Ungolfed
Probieren Sie es online!
quelle
None
kann durchcmp
insort
Funktion ersetzt werdenPython 2 ,
5860 Byteslambda a:sorted(a,key=lambda x:sorted(set(`x`))[::-1])[::-1]
Probieren Sie es online!
quelle
Brachylog , 9 Bytes
Hinweis: Aufgrund der Funktionsweise der Bestellung in Brachylog funktioniert die Bestellung bei Nummern nicht richtig. Dies wird behoben, indem die Zahl auf
ṫ
Kosten von 1 Byte in eine Zeichenfolge ( ) umgewandelt wird.Probieren Sie es online!
quelle
ṫ
(zu Zeichenfolge) behebt das Problem. Die Reihenfolge der Ziffern in absteigender Reihenfolge funktioniert wie folgt. Reihenfolge vom kleinsten zum größten, dann umkehren. Das Problem ist, dass die3120
vom kleinsten zum größten geordnete Zahl0123
gleich123
der umgekehrten Zahl ist321
und nicht3210
ṫ
) hinzugefügten Codes . Wie von @Arnauld erwähnt, dachte ich, dass Ihr Kommentar bedeutet, dass Ihr aktueller Code nicht funktioniert. Es könnte besser sein, es so zu erwähnen: " Dies könnten 8 Bytes gewesen sein, wenn derṫ
(toString) entfernt wurde, aber leider funktioniert es nicht wie beabsichtigt, da die Bestellung in Brachylog funktioniert. "Pyth,
76 Bytes-1 Byte von @Sok
Pyth, das nur druckbares ASCII verwendet, ist hier etwas nachteilig. Optimal codiert wären dies
6*log(95)/log(256) = 4.927
Bytes vor 05AB1E.Erklärt:
Probieren Sie es hier aus .
quelle
N
kann weggelassen werden, um 1 Byte zu sparen - alle Lambda-Funktionen schließen auf das Vorhandensein der Lambda-Hauptvariablen, wenn am Ende Argumente fehlen. Beispiele hierfür sindm
Inferenzd
,f
InferenzT
,u
InferenzG
...Gelee , 8 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Ṛ
als mit AufwärtsbewegungenU
. Beachten Sie jedoch, dass Sie dieD
Da-Sortierung nicht benötigen, dieṢ
mit einemiterable(z, make_digits=True)
Aufruf im Innern implementiert wird. Also das warAṢQṚµÞṚ
für 7.MathGolf ,
76 BytesProbieren Sie es online! oder als Testsuite .
Erläuterung
Als ich mir die 05AB1E-Lösung von Emigna ansah, stellte ich fest, dass ich keinen absoluten Operator benötigte (und meine vorherige Antwort war aufgrund dieses Operators tatsächlich falsch). Der Hauptunterschied besteht nun darin, dass ich in einen String konvertiere und eindeutige Zeichen erhalte, anstatt den 1-Byte-Operator in 05AB1E zu verwenden.
quelle
Japt , 12 Bytes
Alle Testfälle
Erläuterung:
quelle
Haskell ,
5452 BytesProbieren Sie es online!
quelle
r=reverse
zwei Bytes gespeichert. Wir erlauben auch anonyme Funktionen, so dass dief=
nicht gezählt werden müssen.f=r$r id.nub.show;r=(reverse.).sortOn
.Stax ,
67 BytesFühren Sie es aus und debuggen Sie es
quelle
-904 8491 478 62778 6458 -7738 -73 373 123 3120 0
anstelle des beabsichtigten8491 -904 62778 478 -7738 6458 373 -73 3120 123 0
oder ausgegeben8491 -904 62778 478 -7738 6458 -73 373 3120 123 0
. Dieser Testfall wird auch im Beispiel verwendet und um die Regeln zu erläutern. Ich würde mir das ansehen, um es besser zu verstehen. Anscheinend sortieren Sie nur einmal nach der größten Ziffer, ohne eine der anderen Regeln?APL (Dyalog Extended) , 19 Byte
Probieren Sie es online!
Bei einem Aufwand von +2 Bytes dank OP behoben.
quelle
¯7738
wird er davor gestellt478
, sollte aber danach stehen: Ziffern[8,7,4]
kommen vor Ziffern[8,7,3]
.C (gcc) ,
114111109 BytesProbieren Sie es online!
Erläuterung:
f () verwendet qsort (), um das angegebene Array an Ort und Stelle zu sortieren. Verwenden der Vergleichsfunktion c () zum Vergleichen von Zahlen, die Zahlen mit v () auswerten. v () berechnet eine höhere Zahl, wenn der Parameter größere Ziffern enthält.
[Edit 1] Verbessert um 3 Bytes. 2-Byte-Credits für Kevin. Vielen Dank
[Edit 2] 2 weitere Bytes verbessert. Dank an gastropner. Vielen Dank
quelle
n>0
,n
denke ich, in Ihrer Schleife Ihrer Methodev
.int*a,n
kann auf gekürzt werdenint*a
.for(a=0;n=abs(n);
anstelle vonn=n<0?-n:n;for(a=0;n;
J , 17 Bytes
Probieren Sie es online!
Erläuterung:
quelle
JavaScript (SpiderMonkey) , 68 Byte
Vielen Dank für @Arnauld, der mich noch einmal daran erinnert hat, dass SpiderMonkey eine stabile Sortierung verwendet, also -4 Bytes zum Entfernen
||-1
.Probieren Sie es online!
JavaScript (Node.js) , 72 Byte
Probieren Sie es online!
quelle
Java (JDK) , 98 Byte
Probieren Sie es online!
Erläuterung
Hinweis:
Ich brauchte eine Möglichkeit, Nummern entweder
0/1
oder zuzuordnen0/-1
.indexOf
hat die nette Eigenschaft, dass es-1
für nicht gefundene Zeichen konsequent zurückgibt .-1
um eine beliebige Zahl nach rechts verschoben ist immer-1
. Jede positive Zahl, die um eine ausreichend große Zahl nach rechts verschoben wird, ergibt immer0
.So hier sind wir:
quelle
>>9
statt>>32
aufgrund der begrenzten Reichweite der Nummern.Ruby , 55 Bytes
Probieren Sie es online!
quelle
Perl 5
-nl
, 68 BytesProbieren Sie es online!
quelle
Julia 1.0 , 50 Bytes
Probieren Sie es online!
quelle
APL (NARS), 366 Zeichen, 732 Byte
Für den qsort-Operator ist es eine Übersetzung in APL von algo S. 139 K & R Linguaggio C. Ich denke, darin werden Daten als C mit Zeigern verwendet ... Test
quelle
Powershell, 44 Bytes
Testskript:
Ausgabe:
quelle
PHP,
87 8684 BytesLaufen Sie mit
-nr
oder versuchen Sie es online .Ersetzen Sie
++$i
durch$argc
(+1 Byte), um den Hinweis zu unterdrücken (und-n
obosolet zu machen ).Nervenzusammenbruch
-
ist "kleiner" als die Ziffern, hat also keinen Einfluss auf die Sortierung.quelle
Common Lisp, 88 Bytes
Probieren Sie es online!
Gutes altes wortreiches Common Lisp!
Erläuterung:
quelle
C # (Visual C # Interactive Compiler) ,
75 bis74 Byte-1 Danke, nur bei ASCII
Probieren Sie es online!
In C # werden Zeichenfolgen als "Enumerables" von Zeichen betrachtet. Ich nutze dies zu meinem Vorteil, indem ich zuerst jede Zahl in einen String umwandle. LINQ wird dann genutzt, um die eindeutigen Zeichen (Ziffern) in umgekehrter Reihenfolge zu sortieren. Ich konvertiere jedes sortierte Zeichenarray zurück in eine Zeichenfolge und verwende diese als Sortierschlüssel, um die gesamte Liste zu sortieren.
quelle
-
. Sieht es so aus, als wäre die Reihenfolge nicht wirklich wichtig?-
kehrt Testfall # 2 zurück,... 321 2132 ...
was falsch erscheint?