Kurze und süße Beschreibung der Herausforderung:
Basierend auf den Ideen mehrerer anderer Fragen auf dieser Website besteht Ihre Herausforderung darin, den kreativsten Code in einem Programm zu schreiben, das eine in Englisch geschriebene Zahl als Eingabe verwendet und in eine Ganzzahlform umwandelt.
Wirklich trockene, lange und gründliche Spezifikationen:
- Ihr Programm erhält als Eingabe eine Ganzzahl in Kleinbuchstaben Englisch zwischen
zero
undnine hundred ninety-nine thousand nine hundred ninety-nine
einschließlich. - Es darf nur die ganzzahlige Form der Zahl zwischen
0
und999999
und nichts anderes (kein Leerzeichen) ausgegeben werden . - Die Eingabe enthält NICHT
,
oderand
, wie inone thousand, two hundred
oderfive hundred and thirty-two
. - Wenn sowohl die Zehner- als
1
auch die Einerstelle ungleich Null sind und die Zehnerstelle größer als ist , werden sie durch ein HYPHEN-MINUS-Zeichen-
anstelle eines Leerzeichens getrennt. Das Gleiche gilt für die zehntausenden und tausenden Plätze. Zum Beispielsix hundred fifty-four thousand three hundred twenty-one
. - Das Programm kann für andere Eingaben undefiniertes Verhalten aufweisen.
Einige Beispiele für ein gut erzogenes Programm:
zero
-> 0
fifteen
-> 15
ninety
-> 90
seven hundred four
-> 704
sixty-nine thousand four hundred eleven
-> 69411
five hundred twenty thousand two
->520002
popularity-contest
Abraham
quelle
quelle
Antworten:
Applescript
Ein albernes, hacky Mash-Up, das einige Cupertino / Mountain View-Leute verärgern könnte, aber ich denke, es ist ein kreatives albernes, hacky Mash-Up.
Verwendet OSX-Text in Sprache, um die Textnummer auszusprechen, und Google-Audiosuche, um darauf zu warten und sie in eine Ganzzahl umzuwandeln.
Bedarf
Die Verzögerungszeiten müssen möglicherweise in Abhängigkeit von Ihrer Chrome-Ladezeit und der Google Lookup-Zeit angepasst werden.
Beispiel Eingabe:
Beispielausgabe:
quelle
Bash,
936455 Zeichen *In dem fantastischen
bsd-games
Paket, das auf den meisten Linux-Betriebssystemen verfügbar ist, gibt es ein kleines Befehlszeilenspielzeug namensnumber
. Es wandelt Zahlen in englischen Text um, das heißt, es macht genau das Gegenteil von dieser Frage. Es ist wirklich das genaue Gegenteil: Alle Regeln in der Frage werden befolgtnumber
. Es ist fast zu schön, um ein Zufall zu sein.Natürlich
number
beantwortet die Frage nicht. Wir wollen es umgekehrt. Ich habe eine Weile darüber nachgedacht, versucht, Zeichenfolgen zu analysieren und all das. Dann wurde mir klar, dass ich einfachnumber
alle 999.999-Nummern anrufen und sehen kann, ob etwas mit der Eingabe übereinstimmt. In diesem Fall hat die erste Zeile, in der sie übereinstimmt, die doppelte Zeilennummer, nach der ich suche (number
nach jeder Zahl wird eine Punktzeile gedruckt). So einfach ist das. Also, ohne weiteres, hier ist der vollständige Code für meinen Eintrag:Es schließt sogar kurz, so dass das Konvertieren von "zwei" ziemlich schnell ist und noch höhere Zahlen normalerweise in weniger als einer Sekunde auf meiner Box dekodiert werden. Hier ist ein Beispiellauf:
Natürlich müssen Sie
number
installiert haben , damit dies funktioniert.*: Ja, ich weiß, das ist keine
code-golf
Herausforderung, aber Kürze ist so ziemlich die einzige erkennbare Qualität meines Beitrags, also ... :)quelle
number
umgekehrte Verwendung das Kreativste an dieser Antwort. Die Golffreundlichkeit ist auch gut :)Javascript
Magst du welche
eval()
?Führen Sie dieses Skript in der Konsole Ihres Browsers aus.
Edit: Danke für das Feedback. Fehler behoben (wieder).
quelle
twelve
Rückkehr beginnen23
."twenty"
.seven thousand three hundred thirty five
gib mir10335
Python
Nur um den Ball ins Rollen zu bringen.
quelle
Perl + CPAN
Warum das Rad neu erfinden, wenn es schon gemacht wurde?
Dieses Programm liest englische Zeichenfolgen aus der Standardeingabe (oder aus einer oder mehreren als Befehlszeilenargumente angegebenen Dateien), eine pro Zeile, und druckt die entsprechenden Zahlen in der Standardausgabe aus.
Ich habe diesen Code sowohl mit den Beispieleingaben aus der Challenge als auch mit einer umfassenden Testsuite getestet, die aus den Zahlen von 0 bis 999999 besteht, die mit dem Dienstprogramm bsd-games in Text konvertiert wurden
number
(danke, Wander Nauta!) alle von ihnen. Als Bonus versteht es auch solche Eingaben wie z. B.minus seven
(–7),four and twenty
(24),four score and seven
(87),one gross
(144),a baker's dozen
(13),eleventy-one
(111) undgoogol
(10 100 ).( Hinweis: Zusätzlich zum Perl-Interpreter selbst benötigt dieses Programm auch das CPAN-Modul Lingua :: EN :: Words2Nums . Hier einige Anweisungen zur Installation von CPAN-Modulen . Benutzer von Debian / Ubuntu Linux können dieses Modul auch über den APT-Paketmanager installieren als liblingua-en-words2nums-perl .)
quelle
Python
Eine allgemeine rekursive Lösung mit Gültigkeitsprüfung. Könnte für den Bereich der erforderlichen Zahlen vereinfacht werden, aber hier ist zu zeigen, denke ich:
quelle
VBScript 474
Dies ist eine ziemlich routinemäßige Antwort ... leider so routinemäßig, dass @Snack so ziemlich den gleichen Prozess gepostet hat, aber vor mir.
quelle
Haskell
Ähnlich wie bei anderen rekursiven Lösungen, aber ich habe mir die Zeit genommen, um es sauber zu machen.
Hier ist die vollständige Quelle mit allen Erklärungen: http://ideone.com/fc8zcB
quelle
Common Lisp, 94
Die Umwandlung von Zahl in Text ist in CL integriert, jedoch nicht umgekehrt. Erstellt eine umgekehrte Zuordnung für die Zahlen und überprüft die Eingabe darauf.
quelle