Wyzwanie
Napisz kalkulator, który przyjmuje dane wejściowe w formie werbalnej (jak ktoś może wypowiedzieć równanie), a także dane wyjściowe w formie werbalnej (jak ktoś może wypowiedzieć liczbę).
Zasady
Kalkulator powinien być w stanie:
- dodawaj, odejmuj, mnoż i dziel
- obsługiwać operandy od ujemnego miliona do miliona
- obsługiwać wyniki od ujemnego jednego miliarda do jednego miliarda
- obsługiwać kropki dziesiętne na wejściu i umieszczać je poprawnie na wyjściu
- obsługiwać dane dziesiętne do setnych miejsc, zaokrąglając w razie potrzeby
Wszystkie operacje dające wyniki ułamkowe powinny być zaokrąglane do najbliższej setnej pozycji (identycznie jak formatowanie wyjściowe).
Raportuj z wyjściem „E” (w przypadku błędu), kiedy wejście spowoduje awarię programu z powodu nieprawidłowego sformatowania lub podzielenia przez 0; w zasadzie program nie powinien ulec awarii przy złych danych wejściowych, ponieważ byłby to kiepski kalkulator.
Kalkulator jest dozwolony , ale nie jest wymagany do zgłaszania błędów, gdy operandy lub dane wyjściowe przekraczają swoje granice. Ma to na celu uproszczenie problemu, ale jeśli się ze mną nie zgadzasz, nie krępuj się, aby kalkulator był w stanie poprawnie obsługiwać większe operandy i wyjścia bez zgłaszania błędów.
Wyjście „E” w przypadku, gdy operand dla operacji przekracza granice zdefiniowane dla operandów.
Wyjście „E” w przypadku, gdy wyjście przekroczy granice opisane dla wyjść
To, jak program obsługuje rozróżnianie wielkości liter i białych znaków, zależy od golfisty, podobnie jak wybór brytyjskiego lub amerykańskiego angielskiego. 1
Programy, które omijają implementację kalkulatora za pomocą języka lub biblioteki, która już zaimplementowała opisaną powyżej funkcjonalność, nie będą mogły wygrać.
Zwycięzca
Program z najmniejszą liczbą znaków wygrywa.
Przykłady
Wejście: dwa plus dwa
Wyjście: cztery
Wejście: dwadzieścia jeden punkt pięć minus jeden punkt pięć
Wyjście: dwadzieścia
Wejście: jeden minus dwa
Wyjście: jeden ujemny
Wejście: pięć razy pięć
Wyjście: dwadzieścia pięć
Dane wejściowe: dwadzieścia pięć podzielone przez pięć Dane
wyjściowe: pięć
Wejście: dwa plus dwa minus pięć razy pięć podzielone przez ujemny punkt zero pięć
Wyjście: dziesięć
Wejście milion razy tysiąc
Wyjście: jeden miliard
Wkład: milion razy tysiąc plus jeden
wyjściowe: E
Wkład: dwa miliony plus jeden milion
wyjściowe: E
Dane wejściowe: jeden milion plus jeden milion plus jeden milion Dane
wyjściowe: E
two plus two minus five times five divided by negative zero point five
->2 + 2 - 5 * 5 / -0.5
->54
.one million one
na wejściu lubone billion one
na wyjściu? Czy limit 1e6 lub limit 1e9 dotyczy również wyników pośrednich?one hundred divided by three point nought
? (Ponadto, dlaczego jest to wynik ostatniego przykładu,E
a niethree million
?)Odpowiedzi:
Przede wszystkim jest to całkowicie oszukańcze i niekompletne do specyfikacji.
wymaga
--disable-web-security
flagi na chrome, +22JavaScript 509 + 22 = 531
Pierwszą ze specyfikacji jest również przykładowe wyjście Wyjścia
wejściowe
two plus two minus five times five divided by negative zero point five
Jakikolwiek inny przypadek powinien być załatwiony dobrze (teraz), to jest jeszcze całkiem nierozwinięte, po prostu chciałem, aby to naprawić.
Aha, a jeśli rzeczywiście go przetestujesz, może to potrwać kilka sekund, ponieważ ładuje całą stronę Wolfram Alpha nawet dwa razy.
Cóż, może być wiele do ulepszenia.
źródło
Python, 982
Myślę, że działa zgodnie ze specyfikacją, ale prawdopodobnie jest jeszcze kilka błędów. Może działać dziwnie w przypadku wprowadzania> = miliard lub nieprzewidzianych słów, które nieprawidłowo interpretuje.
Oto nieco bardziej czytelna wersja z kilkoma zmianami:
źródło
No to jedziemy. Gra w golfa w wersji wcześniej ją zepsuła, ale teraz wróciliśmy online. Jestem pewien, że można dalej grać w golfa. Popracuję nad tym jutro. Wystarczająco trudno było, aby działał poprawnie BEZ gry w golfa, a moje oczy są zmęczone gapieniem się na niego. Ha ha
Java - 3220
Z podziałami i tabulatorami
źródło