Krótki i słodki opis wyzwania:
Opierając się na pomysłach kilku innych pytań na tej stronie, Twoim wyzwaniem jest napisanie najbardziej kreatywnego kodu w dowolnym programie, który przyjmuje jako dane wejściowe liczbę zapisaną w języku angielskim i konwertuje ją na postać całkowitą.
Naprawdę suche, długie i dokładne specyfikacje:
- Twój program otrzyma jako dane wejściowe liczbę całkowitą pisaną małymi literami angielskimi pomiędzy
zero
inine hundred ninety-nine thousand nine hundred ninety-nine
włącznie. - Musi on tylko wyjście forma całkowitą liczbą pomiędzy
0
a999999
i nic innego (bez spacji). - Dane wejściowe NIE będą zawierać
,
luband
, jak wone thousand, two hundred
lubfive hundred and thirty-two
. - Kiedy miejsca dziesiątek i jedynek są niezerowe, a miejsce dziesiątek jest większe niż
1
, zostaną one rozdzielone znakiem HYPHEN-MINUS-
zamiast spacji. To samo dotyczy dziesięciu tysięcy miejsc. Na przykładsix hundred fifty-four thousand three hundred twenty-one
. - Program może mieć niezdefiniowane zachowanie dla innych danych wejściowych.
Kilka przykładów dobrze wychowanego programu:
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
źródło
źródło
Odpowiedzi:
Jabłkowy
Głupiutki, zuchwały mash-up, który może zdenerwować niektórych ludzi z Cupertino / Mountain View, ale myślę, że to kreatywny, głupiutki, zepsuty mash-up.
Używa tekstu na mowę OSX do wymawiania numeru tekstu i wyszukiwania dźwięku google, aby go wyszukać i przekonwertować na liczbę całkowitą.
Wymagania
Czasy opóźnień mogą wymagać dostosowania w zależności od czasu ładowania Chrome i czasu wyszukiwania w Google.
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
źródło
Bash,
936455 znaków *W fantastycznym
bsd-games
pakiecie, który jest dostępny w większości systemów operacyjnych Linux, znajduje się mała zabawka z linii poleceń o nazwienumber
. Zamienia liczby w tekst angielski, czyli robi dokładnie odwrotność tego pytania. Naprawdę jest dokładnie odwrotnie: przestrzegane są wszystkie reguły w pytaniunumber
. To prawie zbyt piękne, by być zbiegiem okoliczności.Oczywiście
number
nie odpowiada na pytanie. Chcemy tego na odwrót. Myślałem o tym przez chwilę, próbowałem parsować łańcuchy i tak dalej, a potem zdałem sobie sprawę, że mogę po prostu zadzwonićnumber
na wszystkie 999,999 numerów i sprawdzić, czy coś pasuje do danych wejściowych. Jeśli tak, to pierwsza linia, w której pasuje, ma dwukrotnie szukany numer linii (number
drukuje linię kropek po każdej liczbie). Proste. Więc bez zbędnych ceregieli, oto pełny kod mojego wpisu:Nawet powoduje zwarcie, więc konwersja „dwóch” jest dość szybka, a nawet wyższe liczby są zwykle dekodowane w ciągu sekundy na moim urządzeniu. Oto przykładowy przebieg:
Oczywiście musisz mieć
number
zainstalowany, aby to działało.*: Tak, wiem, to nie jest
code-golf
wyzwanie, ale krótkość jest właściwie jedyną wyróżniającą się cechą mojego zgłoszenia, więc ... :)źródło
number
odwrotności jest najbardziej kreatywną rzeczą w tej odpowiedzi. Golf jest też dobry :)JavaScript
Czy podoba Ci się jakiś
eval()
?Uruchom ten skrypt na konsoli przeglądarki.
Edycja: Dzięki za opinie. Naprawiono błędy (ponownie).
źródło
twelve
momencie powrotu23
."twenty"
.seven thousand three hundred thirty five
daj mi10335
Pyton
Tylko po to, żeby piłka się toczyła.
źródło
Perl + CPAN
Po co wymyślać koło, gdy już zostało zrobione?
Ten program odczytuje angielskie ciągi znaków ze standardowego wejścia (lub z jednego lub więcej plików określonych jako argumenty wiersza poleceń), po jednym w wierszu, i wypisuje odpowiednie liczby na standardowe wyjście.
Przetestowałem ten kod, używając zarówno przykładowych danych wejściowych z wyzwania, jak i wyczerpującego zestawu testów składającego się z liczb od 0 do 999999 przekonwertowanych na tekst za pomocą narzędzia bsd-games
number
(dzięki, Wander Nauta!), I poprawnie parsuje wszyscy. Jako bonus rozumie również takie dane wejściowe, jak np.minus seven
(−7),four and twenty
(24),four score and seven
(87),one gross
(144),a baker's dozen
(13),eleventy-one
(111) igoogol
(10 100 ).( Uwaga: Oprócz samego interpretera Perla, ten program wymaga również modułu CPAN Lingua :: EN :: Words2Nums . Oto kilka instrukcji instalowania modułów CPAN . Użytkownicy systemu Debian / Ubuntu Linux mogą również zainstalować ten moduł za pomocą menedżera pakietów APT as liblingua-en-words2nums-perl .)
źródło
Pyton
Ogólne rozwiązanie rekurencyjne z kontrolą poprawności. Można uprościć zakres wymaganych liczb, ale myślę, że chcę się pochwalić:
źródło
VBScript 474
To dość rutynowa odpowiedź ... niestety tak rutynowa, że @Snack opublikował prawie ten sam proces, ale przede mną.
źródło
Haskell
Przypuszczam, że podobne do innych rozwiązań rekurencyjnych, ale poświęciłem trochę czasu, aby je wyczyścić.
Oto pełne źródło ze wszystkimi objaśnieniami: http://ideone.com/fc8zcB
źródło
Common Lisp, 94
Konwersja liczb na tekst jest wbudowana w CL, ale nie na odwrót. Tworzy odwrotne odwzorowanie liczb i sprawdza na nim dane wejściowe.
źródło