Zainspirowany projektem Euler # 17 , to twoje wyzwanie. Napisz pełny program lub funkcję, która przyjmuje liczbę jako dane wejściowe, a następnie wydrukuj lub zwróć liczbę liter potrzebnych do policzenia tej liczby w języku angielskim (od jednej). Nie podajesz spacji, przecinków ani łączników, ale powinieneś dołączyć słowo and
. Na przykład. 342 jest opisana: Three Hundred and Forty-Two
. Ma 23 litery.
Twój wkład będzie dodatnią liczbą całkowitą. Nie musisz obsługiwać nieprawidłowych danych wejściowych. Wbudowane biblioteki lub biblioteki konwertujące liczby na angielski są niedozwolone.
Oto wszystkie zasady pisowni liczb. (Uwaga: zdaję sobie sprawę, że niektóre osoby stosują inny zestaw zasad do literowania liczb. To będą oficjalne zasady do celów tego wyzwania)
Od 1 do 20
jeden, dwa, trzy, cztery, pięć, sześć, siedem, osiem, dziewięć, dziesięć, jedenaście, dwanaście, trzynaście, czternaście, piętnaście, szesnaście, siedemnaście, osiemnaście, dziewiętnaście, dwadzieścia
21 do 99
Dołącz do tych:
Dwadzieścia, trzydzieści, czterdzieści, pięćdziesiąt, sześćdziesiąt, siedemdziesiąt, osiemdziesiąt, dziewięćdziesiąt
do tych:
-jeden, -dwóch, -trzy, -four, -five, -six, -seven, -eight, -nine,
Zauważ, że cztery mają u, ale czterdzieści nie!
Przykłady:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
Od 100 do 999
Napisz, ile setek (sto, dwieście, trzysta itd.), „ I ”, a resztę liczby jak wyżej. Liczby i liczą się do wyniku twojego listu.
Przykłady:
101: One hundred and one
116: One hundred and sixteen
144: One hundred and forty-four
212: Two hundred and twelve
621: Six Hundred and twenty-one
Od 1000 do 999,999
Napisz, ile tysięcy (tysiąc, dwa tysiące itd.), Przecinek, a następnie resztę liczby jak wyżej. Pamiętaj, że jeśli nie masz setek, nadal potrzebujesz i .
Przykłady:
1,101: One thousand, one hundred and one
15,016: Fifteen thousand and sixteen
362,928: Three hundred and sixty-two thousand, nine hundred and twenty-eight
Miliony
Napisz, ile milionów, a następnie resztę liczby jak wyżej. Zauważ, że „milion” to 6 zer „1 000 000”.
Przykłady:
191,232,891: One hundred and ninety-one million, two hundred and thirty-two thousand, eight hundred and ninety-one
1,006,101: One million, six thousand, one hundred and one
Ta sama zasada dotyczy miliardów, trylionów, biliardów i więcej, ale na potrzeby tego wyzwania nie musisz obsłużyć żadnej liczby powyżej 999,999,999 (dziewięćset dziewięćdziesiąt dziewięć milionów, dziewięćset dziewięćdziesiąt dziewięć tysięcy, dziewięćset dziewięćdziesiąt dziewięć.)
Solver Python
Oto krótki skrypt Pythona do weryfikacji odpowiedzi:
import en
def get_letter_num(s):
count = 0
for c in s:
if c.isalpha():
count += 1
return count
number = input()
count = 0
for i in xrange(1, number + 1):
count += get_letter_num(en.number.spoken(i))
print count
Zauważ, że używa to biblioteki językowej NodeBox do konwersji liczb na angielski. (tak, właśnie złamałem własne reguły, ale nie jest to konkurencyjne odpowiedź) To jest swobodnie dostępny tutaj .
Próbki we / wy
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174
Odpowiedzi:
Python 2,
266259236229228 bajtówDziała to dla wszystkich danych wejściowych poniżej miliarda. Działa to dla wszystkich przypadków testowych.
Aby zmodyfikować go, tak aby pasował do pytania, jak podano (np. Nie traktuj liczb kończących się na 100 specjalnych), po prostu zamień liczbę 101 na końcu pierwszego wiersza na 100.
Wyjaśnienie:
źródło