Das Ziel dieses Codegolfs ist es, ganze Zahlen in englische Wörter umzuwandeln.
Das Programm fordert zur Eingabe auf. Wenn diese Eingabe keine Ganzzahl ist, drucken Sie NaN
. Wenn es sich um eine Ganzzahl handelt, konvertieren Sie sie in englische Wörter und drucken Sie diese Wörter aus. Minimale Eingabe: 0 (Null). Maximale Eingabe: 9000 (neuntausend).
Also, 5
kehrt zurück five
(Groß- / Kleinschreibung spielt keine Rolle) und 500
kehrt zurück five hundred
oder five-hundred
(Striche spielen keine Rolle).
Einige andere Regeln:
Ein one
vor hundred
oder thousand
ist optional: one hundred
ist aber hundred
auch richtig (wenn die Eingabe 100
natürlich ist).
Das Wort and
zum Beispiel in one hundred and forty five
ist auch optional.
Leerzeichen sind wichtig. Also, für 500
, five-hundred
oder five hundred
ist richtig, aber fivehundred
ist es nicht.
Viel Glück!
Antworten:
Perl 281 Bytes
Zeilenumbrüche für horizontale Vernunft hinzugefügt. Das obige kann interaktiv verwendet werden, oder indem ein Wert über stdin übergeben wird.
Funktioniert ordnungsgemäß für alle Ganzzahlwerte im Bereich [0, 19999] . Werte außerhalb dieses Bereichs weisen ein undefiniertes Verhalten auf. Nicht ganzzahlige Werte werden gegen Null gekürzt, und als solche werden nur Werte gemeldet, die wirklich nicht numerisch sind
NaN
.Beispielnutzung:
Beispielausgabe:
quelle
NaN
JavaScript (375)
Wahrscheinlich ein schrecklicher Versuch, aber auf jeden Fall, hier geht ...
Hübsch gedruckt (als Funktion):
Beispielkonvertierung (beachte, dass sie sogar
NaN
außerhalb der Grenzen ausgibt , dh ungültige Eingaben):quelle
+1
In einer Sprache wie Javascript ist es ziemlich schwierig, es besser zu machen. (Sie können das Leerzeichen entfernenN(s,z) {return
, um 1 Zeichen zu sparen)O
Saite verpasst . Ich werde das beheben ..Mathematica
6057Verwendung:
Bearbeiten:
quelle
Lisp,
7256 ZeichenIch stelle fest, 1) dass dies alt ist und 2) dass es vollständig auf der Standardbibliothek beruht, um zu funktionieren, aber die Tatsache, dass Sie das c-lisp-Drucksystem dazu bringen können, solche Dinge zu tun, hat mich immer beeindruckt. Dabei wird auch die Eingabe eines Benutzers übernommen, konvertiert und gedruckt.
Es umfasst 72 Zeichen.
:junk-allowed
Bewirkt, dass parse-integer bei einem Fehler nil zurückgibt, anstatt einen Fehler auszulösen.~:[if-nil~;if-non-nill]
Bedingt auf Null vorausgesetzt, behandelt NaN wo nötig~:*
Sichert die Argumentinterpretation, um die Eingabe erneut zu verarbeiten~r
druckt die Zahl wie gewünscht als englische Wortfolge aus, außer mit vollständig korrigierter InterpunktionProbe:
Lisp-Info hauptsächlich von Practical Common Lisp .
Bearbeiten, richtig golfen bis zu 56 Zeichen
Diese Version funktioniert etwas anders. Anstatt eine Zeile zu lesen und zu konvertieren, ruft es den LISP-Reader auf, die Eingabe als LISP-S-Ausdruck zu interpretieren, versucht, sie als Zahl zu verwenden, und ignoriert sie, falls Fehler auftreten, und gibt nil zurück, um die Formatzeichenfolge mit Bedingungen zu versorgen. Dies ist vielleicht das erste Mal, dass ich gesehen habe, wie Lisp ein wirklich knappes Programm produziert hat ... Spaß!
(read)
Ruft den Lisp-Reader / Parser auf, um einen Ausdruck aus der Standardeingabe zu lesen und in ein geeignetes Objekt zu konvertieren(floor)
Versuche, einen beliebigen numerischen Typ in die nächstniedrigere Ganzzahl umzuwandeln, führen bei nicht numerischen Typen zu einem Fehler(ignore-errors ...)
Wenn es das tut, was es sagt, fängt es alle Fehler im eingeschlossenen Ausdruck ab und ignoriert sie. Es gibt nil zurück, um den NaN-Zweig der Formatzeichenfolge einzugebenquelle
PHP,
327310308 BytesNimmt die Zahl als Parameter und arbeitet für 0 <= n <= 12999
Nervenzusammenbruch
quelle
SAS, 70 Zeichen
Die Anweisungen
window
unddisplay
öffnen die SAS-Eingabeaufforderung. Die Eingabe fürn
geht in Zeile 1. Dies nutzt das SAS-Format,words.
das die Nummer als Wort oder Wortfolge mit "und", "" und "-" ausgibt.quelle
PHP
777 Zeichen
Dies ist definitiv ein schrecklicher Versuch, aber Sie können mich nicht beschuldigen, Schlupflöcher ausgenutzt zu haben, und es ist eine sehr glückliche Zahl. Danke an ProgramFOX für den Tipp.
Lange Hand
quelle
array('zero','one','two')
.['zero','one','two']
(php 5.4+). Und wenn es Ihnen nichts ausmachtE_NOTICE
,[zero,one,two]
würde es auch funktionieren.Python 2.x - 378
Die Ableitung von Fireflys antwortet, obwohl
P
sie rekursiv für jeden Bereich positiver Zahlen verwendet werden kann , indem sie auf Million oder Billionen usw. geändert wird. Dies unterstützt auch Werte bis zu 999.999Beispieltest (Eingabe ist
<<<
, Ausgabe ist>>>
):Obwohl, wenn jemand dieses seltsame "Buffer Underflow" -Problem erklären kann, wäre das großartig ...
quelle
print divmod(-2,1000) #-> (-1, 998)
-1*1000
und ein "Rest" von998
.SmileBASIC,
365dreihundertsiebenundvierzig BytesEs gibt ein Leerzeichen am Ende, wenn die letzten ein oder zwei Ziffern 0 sind.
quelle
MOO - 55 Zeichen
player:tell($string_utils:english_number(read(player)))
Oder, wenn ich nicht auf "stdout" drucken muss - 42 Zeichen:
$string_utils:english_number(read(player))
Hinweis: Dieser Code druckt keine Eingabeaufforderung an die Standardausgabe und druckt
zero
stattdessenNaN
wenn die Eingabe keine Zahl ist.Als Bonus kann dieser Code mit jeder Zahl innerhalb der Grenzen der MOO-Sprache (
2147483647
--2147483648
) umgehen .quelle
Wolfram-Sprache
2740 BytesDie Nutzung der nativen Funktion
IntegerName
,Das obige fordert zur Eingabe durch den Benutzer auf. Die vorliegende Implementierung gibt "NaN" zurück, wenn der Benutzer etwas anderes als eine ganze Zahl eingibt.
Einige Beispiele (mit voreingestellten Eingängen) :
quelle
Python 2 , 333 Bytes
Probieren Sie es online!
Dies gilt für 1 bis einschließlich 999.999.
quelle
Pyth,
239242 BytesDie Eingabe ist eine Ganzzahl im Bereich [0-999.999]. Probieren Sie es online aus hier aus . Erklärung ausstehend.
Vorherige Version, sehr ähnliche Operation, unterstützt aber nicht 0:
Erklärung der Vorgängerversion:
quelle