streszczenie
Nauczyciel został poproszony o przygotowanie problemów słownych dla uczniów. Dostaje listę równań i mówi, aby napisać je jako odpowiadające im zadanie słowne. Jest jednak bardzo leniwa, więc nie wkłada w to wiele kreatywności. Zamiast tego po prostu pisze to dosłownie. Na przykład, kiedy czyta 1+1
, pisze one plus one
, 47 * 2
zamienia się forty seven times two
i 56.2 / 7.4
staje fifty six point two divided by seven point four
.
Napisz kod, aby pomóc temu leniwemu nauczycielowi.
Detale
- Liczby mogą zawierać kropkę dziesiętną i znak ujemny.
- Liczby należy pisać w krótkiej skali. (tj.
1,000,000,000
jestone billion
) - Liczby mogą wzrosnąć do 999,999,999,999,999,999 (
nine hundred ninety nine quadrillion...nine hundred ninety nine
). - Grupy zer muszą zostać pominięte. np. nie
1,000,000
jestone million
one million zero thousand zero hundred
. . - Po przecinku może być dowolnie wiele cyfr.
- Cyfry po przecinku muszą być podawane cyfra po cyfrze. np . nie
12.34
jest .twelve point three four
twelve point thirty four
- Dwie liczby są zawsze oddzielone przez operatora.
- Poprawnymi operatorami są plus (
+
), minus (-
), times (*
) i podzielone przez (/
). - Nie ma nawiasów.
- Liczby takie, które
1234
mogą opcjonalnie zawierać naand
wyjściu, jak wone thousand two hundred *and* thirty four
. - Przecinki i białe znaki na wejściu mogą być ignorowane.
Przykłady
Wejście: 24 + 65
Wyjście:twenty four plus sixty five
Wejście: 3.33333 - 0
Wyjście:three point three three three three three minus zero
Wejście: 3.6 * 18.18 / 999.0
Wyjście:three point six times eighteen point one eight divided by nine hundred ninety nine point zero
Wejście: 1-1
Wyjście:one minus one
Wejście: 1+-1
Wyjście:one plus negative one
Wejście: 1,000,000,000 + 0.2
Wyjście:one billion plus zero point two
Wejście: 123,000,456,789,012,345.6789
Wyjście: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
Wejście: -4.3 * 7
Wyjście:negative four point three times seven
Wejście: -1-1--1
Wyjście:negative one minus one minus negative one
123,456,789,012,345.6789
do przykładów? Powinien obejmować wiele przypadków testowych.minus
zamiastnegative
?/
jestover
i jest liczbą ujemnąminus
, więc wymaga pewnej manipulacji.Odpowiedzi:
JavaScript (ES6),
552532 bajtówTen brudny potwór pochodzi prosto z głębin piekła golfowego.
Oczekuje ciągu wejściowego bez żadnych spacji.
Wypróbuj online!
źródło
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 bajtówWypróbuj online!
Zdecydowanie miejsce na ulepszenia tutaj. Mówię to, ale wciąż dostrzegam przypadki, których nie załatwiłem
:(
. Zakłada, że dane wejściowe mają operatory oddzielone spacjami, a ujemna liczba nie jest oddzielona.Wyjaśnienie:
źródło
Ruby + Swift 4,
283279270 bajtówWypróbuj online!
Muszę zwariować, aby zaproponować takie rozwiązanie Frankensteina, ale z jednej strony bardzo kuszące jest użycie wbudowanej funkcjonalności Swift do tego zadania, a z drugiej strony przetwarzanie ciągów za pomocą Regexes w Swift wygląda na katastrofę golfową.
Dlatego postanowiłem wykonać podstawowe przetwarzanie ciągów w Rubim, ale aby przeliterować liczby, przechowuję je w pliku źródłowym Swift, uruchamiam Swift w poleceniu powłoki i zbieram dane wyjściowe.
Okazuje się, że formatyzator liczb „spellOut” Swifta robi prawie dokładnie to, czego potrzebujemy, z wyjątkiem wstawiania niepotrzebnych łączników dla liczb dwucyfrowych, jak w
twenty-two
. W rzeczywistości nawet wynik zmiennoprzecinkowy w formacieinteger part point digit digit...
jest dobry, ale tutaj pojawia się zastrzeżenie - nie ma nieskończonej precyzji, a przy wystarczająco dużych liczbach lub dużej liczbie cyfr dziesiętnych wyniki są błędne. Dlatego musiałem oddzielić liczby całkowite i części ułamkowe i podać cyfrę po cyfrze.źródło
sfk , 853 bajtów
Wypróbuj online!
Wymaga, aby operatory i liczby były oddzielone co najmniej jednym znakiem spacji.
źródło
Czysty ,
766... 687 bajtówWypróbuj online!
Oczekuje łańcucha bez białych znaków.
źródło
05AB1E ,
315295282276 bajtówPobiera dane wejściowe bez spacji.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Zobacz ten 05AB1E końcówki kopalni (sekcje ? Jak korzystać ze słownika , ? Jak kompresować strun nie część słownika , a ? Jak skompresować dużych liczb całkowitych ) , aby zrozumieć, dlaczego:
'¢…
jest"negative"
;'¡×
jest"zero"
;“†ìˆÈŒšï¿Ÿ¯¥Š“
jest"four five six seven eight nine"
;'…§
jest"teen"
;…€µ‚•„í
jest"one two three"
;…—¿áÓÁÏ
jest"ten eleven twelve"
;'°¡
jest"hundred"
;'¾ß
jest"ion"
;…¡›‡È±°
jest"billion million thousand"
;'…®
jest"point"
; i“‰´Øè„ƺߓ
jest"plus minus times divided"
..•6b©•
jest"thir"
;.•4º»Ÿć'Rþн•
jest"twenthirforfif"
; i.•cG3₅¦„¥F•
jest"quadrilltrill"
.ŽH$
jest4433
.źródło
Python 2 ,
790774 bajtówWypróbuj online!
Tyle złych praktyk. To prawie boli pisać ....
Oczekuje, że ciąg znaków inny niż Unicode nie będzie zawierał spacji jako danych wejściowych.
Wyjaśnienie:
Podczas pisania objaśnienia zmniejszyłem się o około 150 bajtów. Niech nigdy nie zostanie powiedziane, że komentowanie / recenzowanie kodu nie jest pomocne!
źródło