Zusammenfassung
Einem Lehrer wurde gesagt, er solle den Schülern Wortprobleme vorbereiten. Sie bekommt eine Liste von Gleichungen und muss sie als das entsprechende Wortproblem schreiben. Sie ist jedoch sehr faul, weshalb sie nicht viel Kreativität in sie steckt. Stattdessen schreibt sie es einfach wörtlich. Wenn sie zum Beispiel liest 1+1
, schreibt sie one plus one
, 47 * 2
verwandelt sich in forty seven times two
und 56.2 / 7.4
wirdfifty six point two divided by seven point four
.
Schreiben Sie einen Code, um diesem faulen Lehrer zu helfen.
Einzelheiten
- Zahlen können einen Dezimalpunkt und ein negatives Vorzeichen enthalten.
- Zahlen sollten in der kurzen Skala geschrieben werden. (dh
1,000,000,000
istone billion
) - Die Zahlen können bis zu 999.999.999.999.999.999 (
nine hundred ninety nine quadrillion...nine hundred ninety nine
) gehen. - Gruppen von Nullen müssen weggelassen werden. zB
1,000,000
gehtone million
nichtone million zero thousand zero hundred
. - Es können beliebig viele Stellen nach dem Komma stehen.
- Nachkommastellen müssen ziffernweise aufgelistet werden. zB
12.34
gehttwelve point three four
nichttwelve point thirty four
. - Zwei Nummern werden immer durch einen Operator getrennt.
- Die gültigen Operatoren sind plus (
+
), minus (-
), times (*
) und dividiert durch (/
). - Es gibt keine Klammern.
- Zahlen wie
1234
können optional einand
in ihre Ausgabe aufnehmen, wie inone thousand two hundred *and* thirty four
. - Kommas und Leerzeichen in der Eingabe werden möglicherweise ignoriert.
Beispiele
Eingabe: 24 + 65
Ausgabe:twenty four plus sixty five
Eingabe: 3.33333 - 0
Ausgabe:three point three three three three three minus zero
Eingabe: 3.6 * 18.18 / 999.0
Ausgabe:three point six times eighteen point one eight divided by nine hundred ninety nine point zero
Eingabe: 1-1
Ausgabe:one minus one
Eingabe: 1+-1
Ausgabe:one plus negative one
Eingabe: 1,000,000,000 + 0.2
Ausgabe:one billion plus zero point two
Eingabe: 123,000,456,789,012,345.6789
Ausgabe:one hundred twenty three quadrillion four hundred fifty six billion seven hundred eighty nine million twelve thousand three hundred forty five point six seven eight nine
Eingabe: -4.3 * 7
Ausgabe:negative four point three times seven
Eingabe: -1-1--1
Ausgabe:negative one minus one minus negative one
123,456,789,012,345.6789
den Beispielen etwas Ähnliches hinzufügen ? Es sollte viele Testfälle abdecken.minus
statt verwendennegative
?/
eineover
negative Zahlminus
, daher ist eine gewisse Manipulation erforderlich.Antworten:
JavaScript (ES6),
552532 BytesDieses dreckige Monster kommt direkt aus der Hölle des Code-Golfens.
Erwartet eine Eingabezeichenfolge ohne Leerzeichen.
Probieren Sie es online!
quelle
btoa`ÍêèÒ‰ÞÒÜ(ÒØkyí¢êô~+ÞÒȱÒǯz}ŠmÒx§{K^ŸG¥z÷§ÒÜ–÷´¶«ÓGâM4z(!ÓKpz}-†*ô~Šô~'ôÓG¢‚4¶.±©ÝÒmÒÚôªæ�¯IÞ�«b½í)–ë4š)î³Kb™ë4v+âuçu×Vò`.replace(111,' ')
.Perl 6 ,
434 401 387359 BytesProbieren Sie es online!
Hier besteht definitiv Verbesserungsbedarf. Ich sage das, aber ich bemerke immer wieder Randfälle, die ich nicht bearbeitet habe
:(
. Es wird davon ausgegangen, dass bei der Eingabe die Operatoren durch Leerzeichen getrennt sind und das Negativ einer Zahl nicht getrennt ist.Erläuterung:
quelle
Ruby + Swift 4,
283279270 BytesProbieren Sie es online!
Ich muss verrückt sein, eine solche Frankenstein-Lösung vorzuschlagen, aber einerseits ist es sehr verlockend, Swifts integrierte Funktionalität für diese Aufgabe zu verwenden, und andererseits scheint es eine Golfkatastrophe zu sein, Strings mit Regexes in Swift zu verarbeiten.
Aus diesem Grund habe ich mich für die grundlegende Verarbeitung von Zeichenfolgen in Ruby entschieden, aber um Zahlen auszudrücken, speichere ich sie in einer Swift-Quelldatei, führe Swift in einem Shell-Befehl aus und sammle die Ausgabe.
Ich stelle fest, dass Swifts "spellOut" -Zahlenformatierer fast genau das tut, was wir brauchen, außer, dass unnötige Bindestriche für zweistellige Zahlen wie in eingefügt werden
twenty-two
. Tatsächlich ist sogar die Gleitkommaausgabe im Format voninteger part point digit digit...
gut, aber hier kommt die Einschränkung: Es gibt keine unendliche Genauigkeit, und bei ausreichend großen Zahlen oder vielen Dezimalstellen gehen die Ergebnisse schief. Deshalb musste ich die ganzzahligen und gebrochenen Teile trennen und den Bruch ziffernweise vorschieben.quelle
sfk , 853 bytes
Probieren Sie es online!
Erfordert, dass Operatoren und Zahlen durch mindestens ein Leerzeichen getrennt sind.
quelle
Sauber ,
766... 687 BytesProbieren Sie es online!
Erwartet eine Zeichenfolge ohne Leerzeichen.
quelle
05AB1E ,
315295282276 BytesÜbernimmt Eingaben ohne Leerzeichen.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E an (Abschnitte Verwendung des Wörterbuchs ? , Komprimieren von Zeichenfolgen, die nicht Teil des Wörterbuchs sind? Und Komprimieren großer Ganzzahlen ), um zu verstehen, warum:
'¢…
ist"negative"
;'¡×
ist"zero"
;“†ìˆÈŒšï¿Ÿ¯¥Š“
ist"four five six seven eight nine"
;'…§
ist"teen"
;…€µ‚•„í
ist"one two three"
;…—¿áÓÁÏ
ist"ten eleven twelve"
;'°¡
ist"hundred"
;'¾ß
ist"ion"
;…¡›‡È±°
ist"billion million thousand"
;'…®
ist"point"
; und“‰´Øè„ƺߓ
ist"plus minus times divided"
..•6b©•
is"thir"
;.•4º»Ÿć'Rþн•
ist"twenthirforfif"
; und.•cG3₅¦„¥F•
ist"quadrilltrill"
.ŽH$
ist4433
.quelle
Python 2 ,
790774 BytesProbieren Sie es online!
So viele schlechte Praktiken. Das tat fast weh zu schreiben ....
Erwartet eine Nicht-Unicode-Zeichenfolge ohne Leerzeichen als Eingabe.
Erläuterung:
Ich habe beim Schreiben der Erklärung etwa 150 Byte eingespart. Lassen Sie sich niemals sagen, dass das Kommentieren / Überprüfen Ihres Codes nicht hilfreich ist!
quelle