Trudno było przekonwertować liczbę na liczbę w języku angielskim , ale było to zbyt proste. Biorąc pod uwagę liczbę 0–100, Twoim zadaniem jest wyprowadzenie odpowiedniej cyfry w języku francuskim. Francuski system liczb ma za sobą bardziej złożoną logikę w porównaniu z angielskim:
Liczba Liczebnik --------------- 0 zéro (zauważ akcent) 1 un 2 deux 3 trois 4 quatre 5 cinq 6 sześć 7 września 8 huit 9 neuf 10 dix 11 onze 12 douze 13 treize 14 quatorze 15 quinze 16 chwytaj 17 dix-sept (dosłownie dziesięć siedem) 18 dix-huit 19 dix-neuf 20 vingt 21 vingt et un (bez łączników) 22 vingt-deux ... 30 trente ... 40 kwarantann ... 50 cinquante ... 60 soixante ... 70 soixante-dix (dosłownie sześćdziesiąt dziesięć) 71 soixante et onze ... 80 quatre-vingts (zwróć uwagę na s; dosłownie cztery lata dwudzieste) 81 quatre-vingt-un (zwróć uwagę na łączniki) ... 90 quatre-vingt-dix 91 quatre-vingt-onze ... 99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9) 100 centów
Pełna lista znajduje się na stronie http://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 ).
Dalsze zasady / objaśnienia
- Zawsze będzie myślnik między słowami Z WYJĄTKIEM, gdy liczba kończy się na 1.
- Kiedy końce Ilość w 1, słowo i (czyli a ) dodaje się przed un lub onze . (31 = trente et un)
- Jednak 81 i 91 są sformatowane tak samo jak inne liczby. (81 = quatre-vingt-un)
- Przy 60 system przełącza się z bazy 10 na bazę 20.
- Istnieją pewne niewielkie rozbieżności w tym zakresie w sieci; pytania znajdują się na powyższej liście.
- Luki, które są domyślnie zabronione, nie są dozwolone.
- Używanie zewnętrznego źródła, takiego jak strona internetowa, a także dowolnych bibliotek, interfejsów API, funkcji itp., Które konwertują liczby na cyfry lub tłumaczą na francuski, jest niedozwolone.
- To jest golf golfowy , więc wygrywa odpowiedź z najmniejszą liczbą bajtów.
- Jeśli to możliwe, proszę połączyć się z kompilatorem online, aby umożliwić łatwe testowanie kodu.
Wkład
- Dane należy pobierać z dowolnego języka. (STDIN, wiersz poleceń itp.)
- Dane wejściowe będą pojedynczym ciągiem, składającym się z liczby całkowitej od 0 do 100 włącznie (opcjonalnie zera wiodącego).
- Możesz założyć, że dane wejściowe zawsze będą dobrze sformułowane.
Wydajność
- Wynik zostanie wysłany do najwygodniejszej metody dla twojego języka. (STDOUT, okno dialogowe itp.)
- Wielkość liter nie ma znaczenia na wyjściu.
Przykłady
Przetestuj swój kod w stosunku do tych:
Wejście wyjście ------------- 0 zéro 18 dix-huit 51 cinquante et un 80 quatre-vingts 91 quatre-vingt-onze 99 quatre-vingt-dix-neuf
code-golf
number
kolmogorov-complexity
NinjaBearMonkey
źródło
źródło
Odpowiedzi:
JavaScript (ES6) 318
321Edytuj błąd (zarządzanie wiodącymi zerami) i graj w golfa więcej
Kredyt za sztuczkę w etui na wielbłądy @ Core1024
Z wejściem / wyjściem przez wyskakujące okienko
Jako funkcja do przetestowania
Aby przetestować w konsoli FireFox lub FireBug
Wyjście testowe
źródło
Haskell, 390 bajtów
Bez golfa
Funkcjonalne języki programowania są odpowiednie do tego zadania.
źródło
main=interact$f.read
i zapisać kilka znaków.interact
. ZaktualizowanoRubinowy, 333 bajty
Przeważnie są to tylko dwie tabele przeglądowe i grupa operatorów trójskładnikowych, które kodują wszystkie dziwne reguły i mówią, której tabeli przeglądowej użyć, kiedy. Daj mi znać, jeśli chcesz dowiedzieć się więcej. ;)
źródło
80
powinien generować quaters-vingts, z s na końcu.Python - 344
(348) (380) (445) (537)bajtówDzięki grc, Ray i isaacg za pomoc w procesie gry w golfa.
Kod składa się z początkowej definicji słownika i zrozumienia listy, która wypełnia puste miejsca połączeniem elementów słownika.
Możesz sprawdzić kod online na repl.it
Moje ostatnie próby gry w ten kod w golfa polegały na rezygnacji z procesu generowania i dzięki tej redukcji udoskonaliłem funkcję generowania żądanego numeru na miejscu. Ponieważ jednak liczby z lat 60. i 80. wymagają elementów nieobliczonych, problemem było stworzenie takiej funkcji przy jednoczesnym zmniejszeniu kodu.
źródło
r=range
, ten trick na liniach 2 i 3, a tylko jeden przestrzeń dla wcięcia. I możesz zapisać 65 bajtów za pomocąd=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
r=range
Trik byłem świadomy, ale zapomniał dodać, kiedy pisałem 1st rewizji. Wszystko inne było dla mnie stosunkowo nowe, więc dzięki są w porządku. Należy jednak pamiętać, że kod nie działa w języku Python 3.x, chyba żeprint
instrukcja zostanie przekształcona w funkcję, ar
funkcje w słowie zostaną przekształcone w listy.int(input())
,input()
wystarczy.b=a/60*10+10
wf(a)
to można użyća-a%b
ia%b
do słownika kluczy. Nie potrzebujesz też miejsca1 or
, a czwartą linię można skrócić[f(v)for v in r(100)if v not in d]
. Jednak tego nie próbowałem.if v not in d
->if(v in d)<1
zapisuje postać. Jeśli średnik oddzielisz dwie części funkcji, możesz umieścić wszystko w jednym wierszu.Python - 392 bajty
Ma listę z numerami podstawowymi, których używa do generowania innych liczb. Większość logiki generowania znajduje się w zestawieniu listy w wierszu 2, z wykorzystaniem indeksowania listy dla warunków warunkowych. Po wygenerowaniu lista wyszukuje wprowadzony numer i drukuje go.
Edycja: Skrócono z 426 bajtów za pomocą końcówki grc.
źródło
a='_un_deux_trois ... quinze_seize'.split('_')
Python 3, (503 bajty)
Skompresuj tabelę za pomocą bzip2, a następnie użyj kodowania ascii85 do zapisania wyniku. Tabela jest:
Bardzo naiwna metoda, ale nie jest taka zła.
Grał w golfa
Bez golfa
Premia
Czy możesz znaleźć słowo „Vim” w skompresowanym ciągu?
źródło
Sh0W
. Nie mogłem znaleźć Vima, ty też nie możesz.Grzmotnąć,
456 440 421408Przyjmuje prawidłowe dane wejściowe (liczba całkowita od 0 do 100 z dowolną liczbą zer wiodących).
źródło
JavaScript 459 (bez obudowy wielbłąda)
@ edc65 nie może ci tego odebrać ...;)
A="0un0deux0trois0quatre0cinq0six0sept0huit0neuf0dix0onze0douze0treize0quatorze0quinze0seize0dix-sept0dix-huit0dix-neuf".split(0);S="soixante";Q=A[4]+"-vingt";T=10;V=20;N=59;for(b=5;1<b--;)for(c=V;c--;)X=b*V+c,A[X]=[,["vingt","trente"],["quarante","cinquante"],[S,S],[Q,Q]][b][c/T|0]+(X%T?X>N?X%V==T?"-dix":"":"":"")+(1>X%T?"":(1==X%(X>N?V:T)|71==X)&81!=X?" et ":"-")+(X>N&X%V==T?"-dix":A[c%(X>N?V:T)]);A[0]="zéro";A[80]+="s";A[100]="cent";alert(A[prompt()])
źródło