Bei einer Liste von zwei oder mehr buchstabierten Seriennummern gleicher Länge größer als zwei, z
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
sortiere die Liste nach den Zahlen, die die Wörter darstellen:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Möglicherweise müssen die Zahlen in Groß- oder Kleinschreibung geschrieben sein, jedoch nicht gemischt.
Testfälle
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
gibt[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
gibt[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
gibt[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
gibt[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Antworten:
Schale ,
98 BytesProbieren Sie es online!
Algorithmus "inspiriert" durch die rekursive Stax-Antwort (ich habe gerade die Suchzeichenfolge ein wenig geändert), stimme ihm zu!
Der Trick besteht darin, jeden Buchstaben seiner Position in der Zeichenfolge zuzuordnen
tfsen
(am Ende dieses Programms komprimiert). Hüllenlisten basieren auf 1, und fehlende Elemente geben 0 zurück, sodass wir diese Zuordnung erhalten:Wie Sie sehen, sind die Listen perfekt sortiert.
Um klar zu sein, funktioniert der Listenvergleich in Husk (und in vielen anderen Sprachen) wie folgt:
quelle
tfrsen
, könnte es sein, aber ich vermute, Wörter wiewith
undsen
darin zu haben, hilft der Kompression.[1,0,0]
gilt als kleiner als[1,0,0,0]
(aber für dieses Programm würde es keinen Unterschied machen)Stax ,
2422171614 BytesFühren Sie es aus und debuggen Sie es
Dieses Programm verwendet Felder mit Kleinbuchstaben zur Eingabe. Die Ausgabe ist wie folgt durch Zeilenumbrüche getrennt.
Dieses Programm sortiert die Eingaben anhand der Reihenfolge, die bei einer bestimmten Umwandlung erhalten wurde. Jedes Zeichen in jedem Wort wird durch seinen Index in der Zeichenfolge ersetzt
"wo thif sen"
. Die ursprünglichen Arrays werden nach dieser Reihenfolge sortiert. Anschließend werden die Ergebnisse nach dem Verbinden mit einem Leerzeichen gedruckt.Die Leerzeichen dienen keinem Zweck, ermöglichen jedoch eine stärkere Komprimierung des String-Literal.
quelle
Gelee , 12 Bytes
Eine monadische Verbindung.
Probieren Sie es online! ... oder sehen Sie sich die Testsuite an
Wie?
Das Umwandeln der Ziffern in Ordnungszahlen und dann von der Basis 10 zu Modulos mit 4752 und 147 ergibt eine aufsteigende Reihenfolge:
Dies kann dann als Schlüsselfunktion zum Sortieren verwendet werden:
quelle
Python , 62 Bytes
Probieren Sie es online! ... oder sehen Sie sich die Testsuite an
Hinweis:
Was in Python 2 (aber nicht in 3) funktioniert, ist um zwei Bytes länger.
quelle
APL (Dyalog Classic) , 12 Byte
Probieren Sie es online!
So habe ich ein passendes linkes Argument für dyadisch gefunden
⍒
(ich habe es zuerst versucht⍋
und Länge 6):quelle
Perl 6 , 37 Bytes
Versuch es
Erweitert:
Der Codeblock nimmt einen Wert des Formulars
("three","one","four")
und übersetzt ihn in("3","1","4")
einen Wert, der.sort
leicht verwendet werden kann.quelle
APL (Dyalog) , 38 Bytes
Probieren Sie es online!
Basierend auf Jonathan Allans großartiger Lösung .
quelle
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
aber Sie können dies viel einfacher in weniger als der Hälfte Ihrer aktuellen Byteanzahl tun.Ruby, 48 Bytes
Missbraucht die Tatsache, dass
"zero".to_i(35)
0 ist (da 'z' keine gültige Ziffer in Basis 35 ist), so ist es viel einfacher, eine Formel für die anderen neun Ziffern zu erzwingen.quelle
K (ngn / k) , 14 Bytes
Probieren Sie es online!
quelle
JavaScript (Node.js) , 70 Byte
Probieren Sie es online!
quelle
Ruby , 47 Bytes
Probieren Sie es online!
Nutzt die Tatsache, dass die Verwendung einer Basis, die kleiner als die maximale Ziffer ist, ein Ergebnis von Null ergibt (wie von Histokraten in ihrer Antwort hervorgehoben ).
quelle
Python 2 ,
858180 BytesVerwenden Sie einfach die ersten beiden Buchstaben jedes Wortes, um die Nummer zu bestimmen, und sortieren Sie dann jede Liste mit dieser Indexierungsfunktion als Schlüssel.
Probieren Sie es online!
4 Bytes gespart, dank Jonathan Allan
quelle
Ruby , 49 Bytes
Probieren Sie es online!
quelle
05AB1E , 27 Bytes
Probieren Sie es online!
quelle
Haskell ,
133122109107106 BytesUngolfed:
quelle
Python 2 , 59 Bytes
Probieren Sie es online!
Riffing über Jonathan Allans Python 3-Lösung ...
quelle
Java (JDK 10) , 132 Byte
Probieren Sie es online!
quelle
Ruby , 64 Bytes
Probieren Sie es online!
Ein Lambda, das ein 2D-Array von Zeichenfolgen akzeptiert und ein 2D-Array von Zeichenfolgen zurückgibt.
Huckepack von mbomb007's Python 2 Antwort für -26 Bytes von dem, was ich gerade posten wollte.
quelle
Perl 5 , 103 Bytes
Probieren Sie es online!
quelle
Retina 0.8.2 , 38 Bytes
Probieren Sie es online! Link enthält Testsuite. Ersetzt vorübergehend die Buchstaben
zowithfsen
durch ihre Position in der Zeichenfolge, sodass die Zahlen lexikalisch sortiert werden können.quelle
Jelly ,
302827 BytesProbieren Sie es online!
-1 Danke an Jonathan Allan.
Findet den Index jeder Ziffer in der Zeichenfolge 'onetwo ... nine' und sortiert diese mit
Þ
. Muss nicht'zero'
am Anfang eingeschlossen werden, da die Suche nach den ersten beiden Zeichen von'zero'
fehlschlägt und0
anstelle eines Index zurückgegeben wird, wodurch'zero'
lexikographisch "früh" wird.quelle
'zeontw...ni'
dauerte länger.Python 3, 141 Bytes
Probieren Sie es online!
quelle
C (clang) , 229 Bytes
Probieren Sie es online!
Es gibt keine einfache Möglichkeit, ein Array von Strings an C-Funktionen zu senden, daher habe ich mir im Sinne von Code-Golf eine kleine Freiheit im Eingabeformat genommen.
f()
Akzeptiert ein Array von Zeigern auf Zeichenfolgen, wobei jede Zeichenfolge eine Zahl ist, die durch durch Kommas getrennte, in Kleinbuchstaben geschriebene Ziffern dargestellt wird. Darüber hinaus benötigt es die Anzahl der Zeichenfolgen im Array im zweiten Parameter. Ich hoffe das ist akzeptabel.f()
ersetzt die vorhandenen Zeiger in sortierter Reihenfolge mitqsort()
.r()
Liest die eingegebene Nummer aus einer durch Kommas getrennten Zeichenfolge. Es werden nur die ersten beiden Zeichen verglichen, um die Nummer zu identifizieren.c()
ist Vergleichsfunktionquelle
strstr("i"-19,t)-"zeontwthfofisiseeini"
? Ist es compilerspezifisch oder standard?.rodata
, die so aussehen,0x69 0x00
und dass der Compiler die Adresse von"i"
am Ende von"zeo..."