Celem tego kodu golfa jest konwersja liczb całkowitych na angielskie słowa.
Program monituje o wprowadzenie danych. Jeśli to wejście nie jest liczbą całkowitą, wydrukuj NaN
. Jeśli jest to liczba całkowita, przekonwertuj ją na angielskie słowa i wydrukuj te słowa. Minimalne wejście: 0 (zero). Maksymalny wkład: 9000 (dziewięć tysięcy).
Tak więc 5
zwraca five
( wielkość liter nie ma znaczenia) i 500
zwraca five hundred
lub five-hundred
(myślniki nie mają znaczenia).
Kilka innych zasad:
A one
przed hundred
lub thousand
jest opcjonalne: one hundred
jest poprawne, ale hundred
też (jeśli dane wejściowe są 100
oczywiście).
Słowo and
na przykład one hundred and forty five
jest również opcjonalne.
Białe znaki mają znaczenie. Tak więc, na 500
, five-hundred
czy five hundred
jest poprawny, ale fivehundred
nie jest.
Powodzenia!
Odpowiedzi:
Perl 281 bajtów
Dodano nowe linie dla poziomego zdrowia psychicznego. Powyższe można wykorzystać interaktywnie lub poprzez przesłanie wartości przez stdin.
Działa poprawnie dla wszystkich wartości całkowitych w zakresie [0, 19999] , wartości poza tym zakresem wykazują niezdefiniowane zachowanie. Wartości niecałkowite zostaną obcięte w kierunku zera i jako takie będą zgłaszane tylko wartości, które są naprawdę nienumeryczne
NaN
.Przykładowe użycie:
Przykładowe dane wyjściowe:
źródło
NaN
.”JavaScript (375)
Prawdopodobnie okropna próba, ale tak czy inaczej ...
Całkiem drukowane (jako funkcja):
Przykładowa konwersja (pamiętaj, że wyprowadza nawet,
NaN
gdy jest poza zakresem, tj. Nieprawidłowe dane wejściowe):źródło
+1
dość trudno jest zrobić to lepiej w języku takim jak javascript. (możesz usunąć miejsce wN(s,z) {return
celu zaoszczędzenia 1 znaku)O
łańcuchu. Naprawię to ...Mathematica
6057Stosowanie:
Edytować:
źródło
Lisp,
7256 znakówZdaję sobie sprawę 1), że jest stary, i 2) że działa całkowicie w oparciu o standardową bibliotekę, ale fakt, że możesz uzyskać system drukowania c-lisp do tego rodzaju rzeczy, zawsze zachwycał mnie. Ponadto w rzeczywistości pobiera dane wejściowe od użytkownika, konwertuje je i drukuje.
Zawiera 72 znaki.
:junk-allowed
powoduje, że parsowanie liczb całkowitych zwraca zero w przypadku niepowodzenia zamiast zgłaszania błędu.~:[if-nil~;if-non-nill]
warunkowy przewidywany na zero, w razie potrzeby obsługuje NaN~:*
tworzy kopię zapasową interpretacji argumentów, aby ponownie wykorzystać dane wejściowe~r
wypisuje liczbę jako ciąg słów w języku angielskim, zgodnie z żądaniem, z wyjątkiem pełnej poprawionej interpunkcjiPróba:
Informacje Lisp głównie z Practical Common Lisp .
Edytuj, poprawnie zagrał w golfa do 56 znaków
Ta wersja działa raczej inaczej. Zamiast czytać wiersz i konwertować go, wywołuje on czytnik lisp do interpretacji danych wejściowych jako wyrażenia lisp s, próbuje użyć go jako liczby, a jeśli wystąpią jakiekolwiek błędy, ignoruje je, generując zero do warunkowego podania łańcucha formatu. To może być pierwszy przypadek, gdy widziałem seplenienie naprawdę zwięzłego programu ... Zabawa!
(read)
Wywołuje czytnik / analizator składni w celu odczytania jednego wyrażenia ze standardowego wejścia i przekształcenia go w odpowiedni obiekt(floor)
próby konwersji dowolnego typu liczbowego na najbliższą niższą liczbę całkowitą, typy nienumeryczne powodują zgłoszenie błędu(ignore-errors ...)
robi to, co jest napisane na puszce, wyłapuje i ignoruje wszelkie błędy w dołączonym wyrażeniu, zwracając zero, aby podać gałąź NaN ciągu formatuźródło
PHP,
327310308 bajtówprzyjmuje liczbę jako parametr, działa dla 0 <= n <= 12999
awaria
źródło
SAS, 70 znaków
Instrukcje
window
idisplay
otwierają wiersz polecenia SAS. Dane wejściowen
idą do wiersza 1. Wykorzystuje format SAS, wwords.
którym liczba jest wypisywana jako słowo lub seria słów z odpowiednio „i”, „” i „-”.źródło
PHP
777 znaków
To zdecydowanie okropna próba, ale nie możesz mnie oskarżyć o wykorzystywanie jakichkolwiek luk, a do tego to bardzo szczęśliwy wynik. Dzięki ProgramFOX za wskazówkę.
Długa ręka
źródło
array('zero','one','two')
.['zero','one','two']
(php 5.4+). A jeśli nie masz nic przeciwkoE_NOTICE
,[zero,one,two]
to też zadziała.Python 2.x - 378
Pochodna odpowiedzi Fireflys, chociaż zmieniając
P
na miliony lub tryliony itd., Można ją rekurencyjnie wykorzystać do dowolnego zakresu liczb dodatnich. Obsługuje to również wartości do 999,999Przykładowy test (wejście jest
<<<
, wyjście jest>>>
):Chociaż, jeśli ktoś może wyjaśnić ten dziwny problem z „przepełnieniem bufora”, mam go, to byłoby bardzo ...
źródło
print divmod(-2,1000) #-> (-1, 998)
-1*1000
i „reszta”998
.SmileBASIC,
365trzysta czterdzieści siedem bajtówJeśli ostatnia jedna lub dwie cyfry to 0, występuje spacja końcowa.
źródło
MOO - 55 znaków
player:tell($string_utils:english_number(read(player)))
Lub, jeśli nie muszę drukować do „standardowego” - 42 znaki:
$string_utils:english_number(read(player))
Uwaga: ten kod nie wyświetla żadnego monitu na standardowym wyjściu i drukuje
zero
zamiast,NaN
gdy dane wejściowe nie są liczbą.Jako bonus, ten kod może obsługiwać dowolną liczbę w granicach języka moo (
2147483647
--2147483648
).źródło
Wolfram Language
2740 bajtówWykorzystując natywną funkcję
IntegerName
,Powyższe monituje o wprowadzenie danych przez użytkownika. Obecna implementacja zwraca „NaN”, jeśli użytkownik wpisze coś innego niż liczba całkowita.
Niektóre przykłady (ze wstępnie ustawionymi wejściami) :
źródło
Python 2 , 333 bajty
Wypróbuj online!
To jest dobre dla 1 do 999,999 włącznie.
źródło
Pyth,
239242 bajtówDane wejściowe są liczbami całkowitymi z zakresu [0–999,999]. Wypróbuj online tutaj . Wyjaśnienie w toku.
Poprzednia wersja, bardzo podobna operacja, ale nie obsługuje 0:
Objaśnienie poprzedniej wersji:
źródło