Bei einer positiven Ganzzahl können wir eine neue Zahl bilden, die durch ihre paarweise ausgeführten Ziffern beschrieben wird (wobei bei Zahlen mit ungerader Ziffernanzahl eine führende 0 hinzugefügt wird).
Zum Beispiel:
1234 kann als eine 2, drei 4s gelesen werden - die Ausgabe für 1234 ist also 2444.
643 hat eine ungerade Anzahl von Ziffern, daher wird eine führende Null hinzugefügt, um sie gerade zu machen. Dann kann 0643 gelesen werden als: null 6s, vier 3s, daher wäre die Ausgabe 3333.
(Dies ist OEIS A056967 ).
Aufgabe: Sortieren Sie bei einem gegebenen Array positiver Ganzzahlen nach ihrem durch Ziffernpaare beschriebenen Wert in aufsteigender Reihenfolge. Die Reihenfolge zwischen den eingegebenen Zahlen, die zum gleichen Wert führen, spielt keine Rolle.
Eingabe : Ein Array / eine Liste / eine Menge positiver Ganzzahlen. Führende Nullen in der Eingabe sind nicht zulässig und werden als Zeichenfolgen / Ziffernlisten / etc. Eingegeben. sind nicht erlaubt - die Eingaben sollten einem ganzzahligen / numerischen Typ so nahe kommen, wie es Ihre Sprache kann.
Ausgabe : Das Array wird wie oben beschrieben sortiert und auf eine der üblichen Arten zurückgegeben (Rückgabewert der Funktion / STDOUT / In die Leere schreien / usw.). Sie können sie einzeln drucken und als Zahlen, Zeichenfolgen oder Listen von zurückgeben Ziffern.
Testfälle
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(Im vierten Testfall werden 1, 4 und 5 alle zu 0 ausgewertet und können daher in beliebiger Reihenfolge untereinander sortiert werden. Ebenso werden im fünften Testfall 10 und 1 beide zu 0 ausgewertet und können somit sortiert werden entweder bestellen.)
(Verwandte: Sagen Sie , was Sie sehen , Eins 1, Zwei Einsen, Eins 2 Eins 1
Vielen Dank an Kevin Cruijssen für die Hilfe bei der Klärung der Frage in der Sandbox.
strtoi
eine Integer-korrekt zurückgibt? Wenn ja, ist das in Ordnung, es ist legal wie es ist.Antworten:
APL (Dyalog) , 26 Bytes
Danke ngn für das Speichern von 1 Byte :)
Probieren Sie es online!
Inspiration von dzaima & ngn
quelle
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
arbeitet für 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 Bytes
Probieren Sie es online!
Ziemlich umständliche Antwort - funktioniert aber in allen Testfällen. Erstellt die Ziffernpaarausgabe und sortiert die Eingabe entsprechend.
quelle
v
für die Variable aus Ihren anderen Antworten genommen - ich habe ihn noch nie benutztv
. Und netter Gebrauch vonintToUtf8
!R , 120 Bytes
Probieren Sie es online!
Ungolfed Code mit Erklärung:
quelle
[!1:0]
Trick ist wirklich schön - noch nie gesehen.[!1:0]
Jungs etwas Ordentliches versteckten. Ich war mit diesem und den Spitzen auf R Golf spielen um und versuchen , die Anzahl der Ziffern arithmetisch zu erhalten (ohneas.double
), kam aber nur mit einem 132 - Byte - Version auf: TIOPyth , 14 Bytes
Probieren Sie es hier aus! | Testsuite! | 12 Bytes mit Liste der E / A-Ziffern
Wie es funktioniert?
quelle
Gelee , 10 Bytes
Probieren Sie es online!
Testen Sie eine Testsuite!
Wie es funktioniert
quelle
2537
und3725
nicht die gleiche Zahl darstellen.[2537, 3725]
. Ich habe nie daran gezweifelt, dass dies ein Zufall ist, daher habe ich diese Notiz in die Antwort aufgenommenPerl 6 , 53 Bytes
Probieren Sie es online!
Anonym Welches Lambda auch immer, das eine Liste von Werten aufnimmt und nach dem sortiert, was die Zahlenpaare beschreiben.
In diesem Fall vertausche ich die Zahl und
rotor
zähle die Liste um zwei, um jedes Zahlenpaar zu erhalten. Dies schließt die erste Ziffer für Zahlen ungerader Länge aus, aber da dies das0
Mal dieser Zahl ergibt, ist es in Ordnung. Außerdem werden die Werte so angeordnet, dass sie[x]
korrekt verwendet werden.quelle
Python 2 ,
8074 BytesProbieren Sie es online!
quelle
Haskell ,
8988 BytesDank ovs ein Byte gespeichert
Die letzte Zeile definiert eine anonyme Funktion, die folgendermaßen verwendet werden kann:
Die Kernfunktionalität wird vom Infix-Operator bereitgestellt,
(?)
der einen Multiplikatorm
und die verbleibende RLE-Eingabe verfolgtn
.(?)
Subtrahiert fortlaufend 10 von,n
während es eine Zehnerstelle gibt, von der subtrahiert werden muss, und schiebt dabei eine weitere Kopie der letzten Stelle vor die Ausgabe (über den Multiplikatorm
, der jedes Mal um 10 erhöht wird). Wenn die Zehnerstelle erschöpft ist, werden die letzten beiden Ziffern verworfen und der Vorgang wiederholt, bis die Zahl auf 0 reduziert ist. Schließlich verwenden wir den Operator (mit einem anfänglichen Multiplikator von 1) als Sortierschlüssel.quelle
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
ist ein Byte kürzer.Schale , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Dyalog APL,
41393635313029 BytesProbieren Sie es online!
-2 danke an Cows quack
-4 (plus -4 für die Grundkonvertierungsidee ) danke an ngn
-2 danke also H.PWiz
quelle
⊃,/
kann werden∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
als⊂⌷¨⍨∘⍋F
C (gcc) (32-Bit-Systeme),
188177176 BytesProbieren Sie es online!
on
amd64
Füge Flag-m32
zum Kompilieren hinzu.Verwendung :
s(x,n);
wobeix
auf ein Array von zu sortierenden Ganzzahlen zeigt undn
die Länge dieses Arrays ist.Der zweite Testfall liefert ein falsches Ergebnis, da die Konvertierung
25257
einen2222277777
Überlauf einer 32-Bit-Ganzzahl ergibt - ein fünfter Testfall ohne diese Zahl wurde hinzugefügt.Erläuterung:
quelle
d()
ist aufgrund von Strings und damit verbundenen Funktionen lang. Sie können viele Bytes speichern, indem Sie nur die letzten beiden Ziffern lesen und die Ausgabe folgendermaßen erstellen:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
Sie sparen auch Bytes, indem Sie das Deklarieren und Initialisieren vonchar
s vermeiden .b-~sprintf(b+1,"%d",x)%2
stattdessen vorb+!(sprintf(b+1,"%d",x)&1)
x/10%10
anstelle von vorschlagenx%100/10
Python 2 ,
10210197101 BytesProbieren Sie es online!
quelle
Brachylog , 18 Bytes
Probieren Sie es online!
Erläuterung
Viele kleine Dinge mussten berücksichtigt werden, um die drei verschiedenen Fälle zu erklären: ungerade Anzahl von Ziffern, Paar von 0 mal einer Zahl und normale Paare.
quelle
|Ȯt
ist unnötig und macht die Sortierung sogar falsch: Es ist gleichbedeutend mit dem Auffüllen mit einer 1 anstelle einer 0, also sortiert es mit [125, 26, 1] als [1, 26, 125] anstelle von [1] 125, 26].Perl 5 , 76 Bytes
Eine Funktion anstelle eines Einzeilers.
Ganz einfach:
g
Sortiert die Eingaben numerisch undh
konvertiert die Zahlen.h
Verwenden Sie dazu den regulären Ausdrucks/(.)(.)/$2x$1/gre
(der wahrscheinlich ausreichend lesbar ist). Und das0
Auffüllen der linken Seite erfolgt mit0 x("@_"=~y///c%2)."@_"
(wobeiy///c
es sich um eine kurze Schreibweise handeltlength
,x
der Wiederholungsoperator und.
die Verkettung).Probieren Sie es online!
Ich erwarte jedoch kürzere Perl-Antworten!
quelle
Retina , 44 Bytes
Probieren Sie es online! Das Generieren des Sortierschlüssels am Zeilenanfang ist schwieriger, aber die kurze Sortierphase führt zu einer Gesamtsparung von 3 Byte. Erläuterung:
Wenden Sie die ersten beiden Stufen auf jede Linie einzeln an.
Ordnen Sie eine gerade Anzahl von Nachkommastellen zu und kopieren Sie sie.
Ersetzen Sie jedes Ziffernpaar durch den beschriebenen Wert. Das
\G\d
bewirkt, dass das Match an der Leerstelle stoppt.Numerisch sortieren.
Löschen Sie die Sortierschlüssel.
quelle
05AB1E ,
20 bis19 BytesFehler behoben für +1 Byte und dann dank @sundar um -2 Byte golfen .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Kann auf jeden Fall golfen werden .. nicht allzu glücklich darüber tbh ..
Erläuterung:
quelle
Attache , 50 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES8),
7270 BytesProbieren Sie es online!
quelle
Japt, 13 Bytes
Probieren Sie es aus oder führen Sie alle Testfälle aus
Erläuterung
quelle
Jelly , 14 Bytes
Probieren Sie es online!
quelle
Ruby , 71 Bytes
Probieren Sie es online!
quelle
Java 11,
204189 BytesNimmt eine List of Longs als Parameter und sortiert diese Input-List (ohne eine neue List zurückzugeben).
Probieren Sie es online aus (HINWEIS: Wird
String.repeat(int)
emuliert,repeat(String,int)
da Java 11 noch nicht auf TIO ist. Die Anzahl der Bytes bleibt gleich.)Erläuterung:
quelle
+""
zu addieren , um die Zahl in String umzuwandeln. Sollte jetzt behoben sein. :)