Ganzzahlen alphabetisieren
Ordnen Sie die Zahlen für einen bestimmten Satz in alphabetischer Reihenfolge zu, wenn sie buchstabiert sind (z. B. 1: eins, 2: zwei, 90: neunzig, 19: neunzehn). Ihr Code sollte für den Bereich funktionieren[-999999, 999999]
. Die Ausgabe muss ein Trennzeichen zwischen den Zahlen enthalten. Ein Leerzeichen funktioniert genauso wie ein Leerzeichen und ein Komma, wie in den folgenden Beispielen gezeigt. Die Eingabe kann ein Array von Ganzzahlen sein, eine Zeichenfolge von durch Trennzeichen getrennten Zahlen, oder wie Sie es für richtig halten. Es wird angenommen, dass alle Ganzzahlen eindeutig sind.
Zahlen werden für diese Herausforderung nicht mit Bindestrich getrennt und Leerzeichen werden vor anderen Zeichen in alphabetischer Reihenfolge angezeigt. Es wird angenommen, dass negative Zahlen mit dem Wort ausgedrückt werden minus
. Beispielsweise four
würde vorausgehen four thousand
und die Nummer -40
würde anhand der Zeichenfolge sortiert werden minus forty
. Angenommen, alle Zahlen bestehen ausschließlich aus Zahlenwörtern und keinen Konjunktionen (z. B. Verwendung two thousand forty two
anstelle von two thousand and forty two
).
Testfälle
Einstellige ganze Zahlen:
Eingang:
1, 2, 3, 4, 5
Ausgabe:
5, 4, 1, 3, 2
Mehrstellige Ganzzahlen:
Eingang:
-1002, 5, 435012, 4, 23, 81, 82
Ausgabe:
81, 82, 5, 4, 435012, -1002, 23
Leerzeichen zwischen Wörtern, keine Bindestriche, Kommas oder "und":
Eingang:
6, 16, 60, 64, 600, 6000, 60000, 60004, 60008, 60204, 60804
Ausgabe:
6, 600, 6000, 16, 60, 64, 60000, 60008, 60804, 60004, 60204
Denken Sie daran, das ist Code-Golf , also gewinnt der Code mit den wenigsten Bytes. Keine Lücken erlaubt!
Antworten:
JavaScript (ES6),
189179186 BytesDie Grundidee besteht darin, jede eingegebene Zahl in eine kurze Zeichenfolge umzuwandeln, die sich im Vergleich zu allen anderen Zahlen-Zeichenfolgen-Paaren an der richtigen lexografischen Position befindet. Hier ist das verwendete Wörterbuch: (Führen Sie das Snippet nicht aus; es dient nur zum Ausblenden der langen Liste.)
Code-Snippet anzeigen
Dies schafft eine sehr präzise Möglichkeit, jede Zahl ihrer lexographisch korrekten Position zuzuordnen. Das macht die rekursive
q
Funktion:Das
0
am Anfang der Zeichenkette soll sicherstellen, dass zB 100 (one hundred
, umgerechnet aufPK0
) vor101
(one hundred one
, umgerechnet aufPKP
) sortiert wird . Dies erzeugt ein seltsames Szenario, in dem 0 (zero
) an der Vorderseite des Arrays sortiert ist. Um dies zu umgehen, sortieren wir in der Sortierfunktion zuerst alle Nullen nach rechts mit!x-!y||(...
.quelle
[1100, 1000]
. Ich würde erwarten1000 (one thousand), 1100 (one thousand one hundred)
, dass die Ausgabe ist, aber die Ausgabe ist die gleiche Reihenfolge wie die Eingabe.1000
wird analysiert alsone thousand zero
; Ich werde das gleich beheben. Müssen wir uns aber selbst unterstützen0
? Es ist ein einzigartiger Fall, der meinem Code etwa 15 Bytes hinzufügt.Informieren Sie 7,
214201118 BytesInform 7 ist eine absolut schreckliche Sprache fürs Golfen, deshalb wollte ich es hier mal probieren.
Einrückung sollte Tabulatorzeichen (
\t
) verwenden, HTML mag diese jedoch nicht. Umgekehrt mag Inform keine Leerzeichen für Einrückungen, daher müssen Sie die Leerzeichen durch Tabulatoren ersetzen, wenn Sie den Code von hier kopieren und einfügen, um ihn zu testen. Oder kopieren Sie sie einfach aus der Markdown-Quelle.Golf gespielt:
Die Eingabe sollte wie folgt in einer Inform-Tabelle erfolgen (
\t
zwischen den Spalten):Ausgabe:
Diese Funktion durchläuft die Tabelle einmal und fügt eine Textdarstellung jeder Zahl in einer neuen Spalte hinzu. Anschließend werden die Tabellenzeilen entsprechend der Textspalte sortiert. In Inform werden Zeichenfolgen lexikografisch sortiert. Schließlich wird die ursprüngliche Spalte in der neuen Reihenfolge ausgedruckt. Praktischerweise stellt sich heraus, dass Inform 7s "rohes, aber manchmal nützliches" Format zum Ausdrucken von Tabellenspalten genau wie gewünscht durch Kommas getrennt ist.
Ungolfed, mit einem Kesselschild, das zeigt, wie die Funktion aufgerufen wird:
quelle
words
ein Verweis auf die in Inform 7 enthaltenen buchstabierten Versionen von Zahlen vorhanden?say "[R entry] "
sollte daher ausreichen.Mathematica, 67 Bytes
Unbenannte Funktion, die eine Liste von Ganzzahlen als Argument verwendet und eine Liste von Ganzzahlen als Wert zurückgibt.
#~IntegerName~"Words"
ist eine integrierte Funktion, die eine Ganzzahl in ihren Namen in Englisch ändert.IntegerName
Manchmal enthält die Ausgabe Kommas und Bindestriche, sodass derStringReplace
Aufruf diese entfernt. (Leider ist der Bindestrich tatsächlich das 3-Byte-Zeichen 8208 in UTF-8.) Anschließend wirdSortBy
die ursprüngliche Liste alphabetisch nach dem Wert des geänderten Ganzzahlnamens sortiert.Ein schöner Zufall:
IntegerName
verwendetnegative
anstelle vonminus
in seiner Ausgabe - aber kein Wort, das in den Namen einer der zulässigen Zahlen vorkommt, ist alphabetisch zwischen diesen beiden Wörtern, sodass kein Ersatz erforderlich ist!(Hutspitze an Genisis, weil sie mich daran erinnert hat
Sortby
.)quelle
IntegerName
. Die Wolfram-Dokumentation besagt, dass es sich um das Unicode-Zeichen 2010 handelt .Bash + GNU utils + bsdgames, 52
E / A sind Zeilen mit Zeilenumbrüchen.
number
), gefolgt von:
der numerischen Form der Zahl.sort
ed.sed
Streifen führt die Zeichen bis einschließlich zu und:
lässt die numerische Form nach Bedarf sortiert.number
behandelt "minus" richtig und seine Ausgabe ist nahe genug an dem angegebenen Format, das dassort
wie erforderlich funktioniert. Es wird "vierundvierzig" anstelle von "vierundvierzig" ausgegeben, aber dies sollte aus Sicht der Sortierung keine Rolle spielen.Das bsdgames-Paket muss möglicherweise installiert werden:
Die
sed
undsort
Dienstprogramme sind mit ziemlicher Sicherheit bereits in Ihrer Distribution.quelle
-t:
ist nutzlos und Sie können verwendennumber<<<&
-t:
. Diee
val-Funktion von sed führt jedoch Befehle mit aussh
, sodass bash-Funktionen wie<<<
nicht funktionieren.sh
es versucht, Posix sh so weit wie möglich zu emulieren, bedeutet dies, dass bashisms wie ausgeschaltet<<<
sind.sed
Die Funktione
val von GNU startet Befehle mit/bin/sh -c ...
und nicht/bin/bash -c ...
. Hast du das versucht?<<<
, auch nicht im Posix-ModusPython + Flex,
979189 BytesVerwendete die
inflect
Bibliothek, um daswords
Array von Ganzzahlen in ihre phonetische / Zeichenfolgendarstellung umzuwandeln . In einem Wörterbuch mit k / v-Paaren gespeichert, wobei die Tasten die numerische Darstellung und die Werte die Zeichenfolgendarstellung waren. Gibt die Liste der Schlüssel sortiert nach Werten zurück.EDIT: 5 und 3 Bytes gespart, dank ETHproductions und Alex.S!
quelle
a={x:inflect.engine().number_to_words(x)for x in words}
.from inflect import*
indem Sieinflect.
die zweite Zeile verwenden und wegwerfen .Mathematica, 30 Bytes
Die Antwort unten gibt eine reine Funktion aus, die eine Liste von Ganzzahlen als Eingabe verwendet und diese nach ihrem alphabetischen Namen sortiert. Genau das, was der Arzt bestellt hat;)
Hier ist die ungolfed Version:
Und hier ist ein Anwendungsbeispiel:
Welches könnte auch als geschrieben werden
Sie erzeugen identische Ergebnisse - in Mathematica
f[x]
ist dies gleichbedeutend mitf@x
.Es gibt eine viel längere Antwort, die ein anderer Benutzer in Mathematica gepostet hat. Diese Antwort versucht, einige kleine Unterschiede zwischen der Art und Weise zu korrigieren, wie mathematica Zahlen alphebatisiert, um sie besser an die Art und Weise anzupassen, in der die vom OP angegebenen Zahlen alphebatisiert werden sollten.
quelle
TheirF
sortiert 888 korrekt vor 880.000,MyF
tut dies aber nicht. Wahrscheinlich liegt das Problem beim Einfügen des seltsamen Bindestrichs beim Kopieren: Ihre Version von ersetztTheirF
wahrscheinlich normale Bindestriche (von denen es keine gibt), während die aktuelle Version den seltsamen 3-Byte-Unicode-Bindestrich ersetzt. (Es wäre immer noch interessant zu sehen, ob das Entfernen von Kommas erforderlich ist.)Common Lisp, 113 Bytes
Keine externen Bibliotheken erforderlich.
Ausgabe wenn
x
ist'(1 2 3 4 5)
:quelle