n
Erstellen Sie bei einer nicht negativen Ganzzahl ( ) eine Funktion, die n
in alphabetischer Reihenfolge entsprechend der Literalschreibung jeder Ziffer in zurückgegeben wird n
.
Beispiele:
Input: 101
>> one, zero, one
>> one, one, zero
Output: 110
Input: 31948
>> three, one, nine, four, eight
>> eight, four, nine, one, three
Output: 84913
Input: 5544
>> five, five, four, four
>> five, five, four, four
Output: 5544
Input: 1234567890
Output: 8549176320
Hinweis: Die Operationen in diesem Beispiel dienen nur der Veranschaulichung und müssen nicht in die Ausgabe einbezogen werden. Es muss nur die alphabetisch sortierte Nummer zurückgegeben werden.
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes.
Bearbeiten: Die Eingabe kann in einem beliebigen Format erfolgen, das am besten zu Ihrer Sprache passt, und die Ausgabe kann auf ähnliche Weise erstellt werden, indem Sie von der Funktion zurückkehren oder drucken. Die Eingabe ist immer eine natürliche Zahl (einschließlich 0) und enthält keine führenden 0en.
Relevanter OEIS-Eintrag (A057846) gefunden von @DomHastings
00
....849
, dass wir die Nummer,849
aber nicht die Zeichenfolge drucken dürfen"849"
? IMO, dies ist nur ein umständliches E / A-Format (schlecht!), Zusätzlich zu einer perfekten Herausforderung.001
ausgegeben? Wenn sie signifikant sind und das Ergebnis nicht ist1
, erfordern die meisten Sprachen Zeichenfolgen als Eingabe, da es grob, unpraktisch und in der Regel so gut wie unmöglich ist, den Parser aufzufordern, führende Nullen in Basis-10-Literalzahlen beizubehalten.Antworten:
Perl 6 ,
3228 BytesErläuterung:
Prüfung:
quelle
05AB1E,
121110 BytesErklärt
Probieren Sie es online aus
Dank Adnan 1 Byte gespeichert
quelle
JavaScript (ES6), 54
Bearbeiten Sie dieselbe Zeichenanzahl, aber vermeiden Sie die globale Variable
z
Eingabe / Ausgabe als Zeichenketten
Prüfung
quelle
z
...Haskell,
62 5144 BytesWie @nimi angedeutet hat, ist die Verwendung eines Listenverständnisses kürzer als das Verfassen von Funktionen:
Als referenz meine version:
Die pointfree Version ist etwas länger:
Ganz einfach: Filtern Sie die Ziffern in der richtigen Reihenfolge und verketten Sie das Ergebnis.
quelle
Pyth,
1210 BytesIch bin mir nicht sicher, ob ich weiter Golf spielen kann. Die Eingabe muss in Anführungszeichen gesetzt werden.
2 Bytes gespart dank @isaacg!
Im pythonischen Pseudocode:
Teste es hier .
quelle
549176320
mitC" Ȁ\0
\0
. Das ist wahrscheinlich das Problem, auf das Sie gestoßen sind.Perl, 37 Bytes
36 Byte Code + 1 Byte Befehlszeile (-F)
Anwendungsbeispiel:
quelle
MATL , 19 Bytes
Probieren Sie es online!
Erläuterung
quelle
Jelly, 11 Bytes
Probieren Sie es hier aus.
Erläuterung
quelle
Mathematica
35 7847 Bytes31 Bytes gespart dank eines Vorschlags von LIAMnYP!
IntegerDigits
zerlegt die Nummer in Ziffern, die dann in Englisch nach ihren Namen sortiert werden.FromDigits
setzt die Ziffern zu einer Zahl zur Basis 10 zusammen.8549176320
quelle
FromDigits@SortBy[IntegerName]@IntegerDigits@#&
Interpreter
Ist auch schmerzhaft langsam, das ist also ein zusätzlicher Bonus.C
142,141,117Parameter übergeben
long long *
anf()
; Die Funktion ändert den Parameter:long long
ist notwendig, da der letzte Testfallint
beim Sortieren übergelaufen ist .quelle
Python 2 - 95 Bytes
Weiteres Golfen versuchen ... Ich denke, die Linie 2 ist unnötig und dies kann zu 1 Lambda werden.
BEARBEITEN: 49 char Version in Kommentaren, danke an xnor und vaultah für Hilfe.
quelle
lambda n:''.join(sorted(`n`,key="8549176320".find))
8
damit dasfind
-1 gibt.lambda n: "".join(sorted(n,key="549176320".find))
, was dem, was Sie vorgeschlagen haben, Vaultah, wirklich ähnlich ist. Du solltest es posten!- Oracle 11 (SQL): 164 Byte
Lange Form und Erklärung
Holen Sie sich die Eingabe als Parameter zum Skript:
"Erstelle" Zeilen mit connect by basierend auf der Länge der Eingabe:
Ziehen Sie jede Ziffer für jede Position aus der Zeichenfolge heraus:
Konvertieren Sie die Ziffer in das julianische Datum und zurück zu Char, um die Rechtschreibung zu erhalten:
Auf Null prüfen - Sonderfall.
Verwenden Sie die LISTAGG-Funktion, um die Zeilen wieder in eine einzelne Zeilenliste zu verknüpfen, die durch Kommas getrennt und alphabetisch sortiert ist
Es macht immer Spaß, SQL für solche Dinge zu optimieren ... :) testet wirklich mein Wissen über den Bugger ...
quelle
Ruby, 60 Bytes
quelle
Schläger,
142130 BytesDavon Umwandlungen sind
überfast die Hälfte der Länge (7664 Bytes).quelle
(+ 1 answer)
für Schläger!TSQL, 260 Bytes
Verwendet umgekehrte Blasensortierung, um die Länge zu vermeiden und einige Bytes zu sparen
Golf gespielt:
Ungolfed:
Indem Sie darauf bestehen, Integer-Typen als Ein- und Ausgabe zu verwenden, werden 37 Byte hinzugefügt
quelle
DECLARE @ varchar(99)=101
0.o wird101
automatisch in einen String umgewandelt?stuff
ein objektiv schrecklicher Funktionsname.squash
odershove
oderpack
wäre besser: Pstuff
das ist, was Funktionen tun: Sie machen Sachen. Dann kann Ihr Code aussehen wiestuff(stuff(4, 5, stuff), stuff(stuff()).(stuff())()); stuff(stuff)
ClojureScript, 45 Bytes
Verwendet eine beschissene String-> Int-Konvertierung von Javascript, so dass es kein gültiges Clojure ist.
quelle
Firebird, 317 Bytes
Golf gespielt:
Ungolfed:
In Firebird gibt es keine Split-Funktionalität. Stattdessen habe ich eine rekursive Abfrage erstellt, um das nächste Zeichen immer wieder abzurufen. Wählen Sie diese dann erneut aus, während Sie nach der richtigen Reihenfolge sortieren. Verketten Sie diese Ergebnisse schließlich wieder zu einer Liste. Überschreiben Sie das Standardkommatrennzeichen mit Leerzeichen. Ich könnte 11 Bytes einsparen, indem
rdb$database
ich stattdessen eine neue Dummy-Tabelle erstelle, aber ich dachte, das verstößt möglicherweise gegen die Regeln.quelle
ZX Spectum, Maschinencode,
5348474544 Bytesconvtab defb 249 ; zero defb 244 ; one defb 248 ; two defb 247 ; three defb 2+205 ; four defb 1+205 ; five defb 246 ; six defb 245 ; seven ; defb 0 ; eight ; defb 3 ; nine ; last 2 conversions hidden in call-command
quelle
Faktor 128
Hurra für Builtins! : D
quelle
PHP, 126 Bytes
Soweit ich weiß, hat PHP keine eingebauten Funktionen, die wirklich helfen könnten (das Beste, was ich mit einem Usort (str_split ()) tun konnte, war 5 Bytes länger). Das Einzige, worüber ich mich in dieser Antwort freue, ist die Spiele, die mit $ i gespielt wurden, um ein paar Bytes bei der Iteration zu sparen.
quelle
APL, 23 Bytes
Erläuterung:
n←⍕⍵
: Liefert die String-Darstellung vonn
und speichere sie inn
'8549176320'⍋
: finden Sie eine Permutationn
dieser Artn
angegebenen Reihenfolge8549176320
.n[
...]
: Nachn
dieser Permutation neu ordnen⍎
: bewerte das Ergebnis (um es wieder in eine Zahl umzuwandeln)quelle
⍎
und entfernen⍕
. Konvertieren in tradfn durch Entfernen{
und}
und ersetzt⍞
für⍵
. Schließlich entfernen Sie0
als nicht aufgeführte Sortierungen am Ende:n['854917632'⍋n←⍞]
Clojure, 53 Bytes
Nun, die Idee des Listenverständnisses aus der Haskell-Lösung scheint die kürzeste zu sein:
Mein ursprünglicher Ansatz ist 1 Byte länger:
Sie können beide Funktionen online hier sehen: https://ideone.com/afac5n
quelle
Common Lisp, 104
Ungolfed
Ganzzahl als Zeichenfolge konvertieren, Zeichen anhand des
string<=
Vergleichs sortieren und dabei eine benutzerdefinierte:key
Funktion verwenden, mit der ein bestimmtes Zeichen als englische Darstellung des von ihm repräsentierten numerischen Werts konvertiert wird. Normalerweise würde ich keine Schlüsselfunktion verwenden, die so viel bewirkt wie diese, aber sie kostet weniger Byte als dekorieren / sortieren / undekorieren.quelle
Python 3, 234 Bytes
Dies ist eine direkte Übersetzung meiner Factor-Antwort , nur zum Spaß.
Die Semantik der Auswertung von "faulen" Karten- und Zip-Objekten ist das subtilste, schwer zu findende, Fehler auslösende Stück echter Pferdekot im Universum. Manchmal kann
s = map(f, x)
es nichts
richtig oder überhaupt nicht verwendet werden.quelle
Pyke, 14 Bytes
Probieren Sie es hier aus!
quelle
C 80 Bytes
Nimmt eine Zeichenfolge mit einer Zahl in der Basis 10 und druckt auf
stdio
:quelle
Python 2.7.11, 67 Bytes
Nimmt einen String als Eingabe und gibt einen String aus.
quelle
Python 3, 74 Bytes
quelle
PHP , 107 Bytes
Probieren Sie es online!
Verwendet eine benutzerdefinierte Vergleichsfunktion, um die Sortierreihenfolge anzupassen.
Ausgabe
quelle