Herausforderung
Schreiben Sie einen Taschenrechner, der die Eingabe in verbaler Form (wie man eine Gleichung spricht) und auch in verbaler Form (wie man eine Zahl spricht) vornimmt.
Regeln
Der Rechner sollte in der Lage sein:
- addieren, subtrahieren, multiplizieren und dividieren
- Behandle Operanden zwischen einer und einer Million
- verarbeiten Ausgaben zwischen einer und einer Milliarde
- Behandeln Sie Dezimalstellen in der Eingabe und platzieren Sie sie korrekt in der Ausgabe
- Behandeln Sie die Dezimalausgabe auf die Hundertstelstelle und runden Sie sie bei Bedarf auf
Alle Operationen, die zu Bruchergebnissen führen, sollten auf die nächste Hundertstelstelle gerundet werden (identisch mit der Ausgabeformatierung).
Mit Ausgabe "E" (für Fehler) melden, wenn die Eingabe dazu führen würde, dass das Programm fehlschlägt, weil es falsch formatiert ist oder durch 0 geteilt wird. Grundsätzlich sollte das Programm bei schlechten Eingaben nicht abstürzen, denn das wäre ein mieser Rechner.
Der Rechner darf , muss aber keine Fehler melden, wenn Operanden oder Ausgaben ihre Grenzen überschreiten. Dies soll das Problem vereinfachen. Wenn Sie mit mir nicht einverstanden sind, können Sie einen Taschenrechner erstellen, der größere Operanden und Ausgaben korrekt verarbeitet, ohne Fehler zu melden.
Geben Sie "E" aus, wenn ein Operand für eine Operation die für Operanden definierten Grenzen überschreitet.
Ausgang "E" für den Fall, dass der Ausgang die für Ausgänge beschriebenen Grenzen überschreitet
Wie das Programm mit Groß- und Kleinschreibung und Leerzeichen umgeht, bleibt dem Golfer überlassen, ebenso wie die Wahl zwischen britischem oder amerikanischem Englisch. 1
Programme, die die Implementierung des Taschenrechners umgehen, indem sie eine Sprache oder Bibliothek verwenden, die die oben beschriebene Funktionalität bereits implementiert hat, sind nicht zum Sieg berechtigt.
Gewinner
Das Programm mit der niedrigsten Anzahl von Zeichen gewinnt.
Beispiele
Eingang: zwei plus zwei
Ausgang: vier
Eingabe: einundzwanzig Punkt fünf minus ein Punkt fünf
Ausgabe: zwanzig
Eingang: eins minus zwei
Ausgang: negativ eins
Input: fünf mal fünf
Output: fünfundzwanzig
Eingabe: fünfundzwanzig geteilt durch fünf
Ausgabe: fünf
Eingabe: zwei plus zwei minus fünf mal fünf geteilt durch negativen Nullpunkt fünf
Ausgabe: zehn
Input eine Million mal tausend
Output: eine Milliarde
Input: eine Million mal tausend plus eins
Output: E
Input: zwei Millionen plus eine Million
Output: E
Input: eine Million plus eine Million plus eine Million
Output: E
two plus two minus five times five divided by negative zero point five
->2 + 2 - 5 * 5 / -0.5
->54
.one million one
am Eingang oderone billion one
am Ausgang? Gilt die 1e6-Grenze oder die 1e9-Grenze auch für Zwischenergebnisse?one hundred divided by three point nought
? (Auch, warum ist die Ausgabe des letzten BeispielsE
eher alsthree million
?)Antworten:
Zuallererst ist dies total betrügerisch und entspricht nicht den Spezifikationen.
erfordert die
--disable-web-security
Flagge auf Chrom, +22Javascript 509 + 22 = 531
Die erste von der Spezifikation ist auch die Ausgabe
der
two plus two minus five times five divided by negative zero point five
EingangsausgängeJeder andere Fall sollte (jetzt) gut behandelt werden, das ist noch ziemlich ungolfed, ich wollte nur, dass es behoben wird.
Oh, und wenn Sie es tatsächlich testen, kann es einige Sekunden dauern, da die gesamte Wolfram Alpha-Seite bis zu zweimal geladen wird.
Nun, es könnte jedoch eine Menge zu verbessern geben.
quelle
Python, 982
Ich denke, es funktioniert so, wie es laut Spezifikation sein sollte, aber es gibt wahrscheinlich noch ein paar Bugs. Bei Eingaben von> = einer Milliarde oder bei unerwarteten Wörtern, die falsch interpretiert werden, kann dies seltsam sein.
Hier ist eine etwas besser lesbare Version mit ein paar Änderungen:
quelle
Na, bitte. Das Golfen der Version bevor es kaputt ging, aber jetzt sind wir wieder online. Ich bin mir sicher, dass man weiter Golf spielen kann. Ich werde morgen weiter daran arbeiten. Es war schwer genug, es richtig zum Laufen zu bringen, ohne es zu spielen, und meine Augen haben es satt, es anzustarren. Haha
Java - 3220
Mit Zeilenumbrüchen und Tabulatoren
quelle