Es war eine Herausforderung , eine Zahl in ihre englische Zahl umzuwandeln , aber das war zu einfach. Bei einer Zahl von 0 bis 100 müssen Sie die entsprechende Zahl auf Französisch ausgeben. Das französische Zahlensystem hat eine komplexere Logik als das englische:
Nummer Ziffer --------------- 0 zéro (Akzent beachten) 1 un 2 deux 3 trois 4 Quatre 5 cinq 6 sechs 7. September 8 huit 9 neuf 10 dix 11 onze 12 verdoppeln 13 treize 14 quatorze 15 quinze 16 ergreifen 17 dix-sept (wörtlich zehn sieben) 18 Dix-Huit 19 Dix-Neuf 20 vingt 21 vingt et un (keine Bindestriche) 22 vingt-deux ... 30 trente ... 40 Quarantäne ... 50 cinquante ... 60 Soixante ... 70 Soixante-Dix (buchstäblich zehnundsechzig) 71 soixante et onze ... 80 Quatre-Vingts (beachten Sie die s; buchstäblich vier zwanziger Jahre) 81 quatre-vingt-un (beachten Sie die Bindestriche) ... 90 Quatre-Vingt-Dix 91 quatre-vingt-onze ... 99 quatre-vingt-dix-neuf (4 * 20 + 10 + 9) 100 cent
Eine vollständige Liste finden Sie unter http://quizlet.com/996950/ ( http://www.webcitation.org/6RNppaJx0 ).
Weitere Regeln / Erläuterungen
- Zwischen den Wörtern wird immer ein Bindestrich stehen, AUSSER wenn die Zahl auf 1 endet.
- Wenn die Zahl auf 1 endet, wird das Wort et (Bedeutung und ) vor dem un oder onze hinzugefügt . (31 = trente et un)
- 81 und 91 sind jedoch genauso formatiert wie die anderen Zahlen. (81 = quatre-vingt-un)
- Bei 60 schaltet das System von der Basis 10 auf die Basis 20 um.
- Es gibt einige kleinere Unstimmigkeiten im Internet. Beziehen Sie sich bei Fragen auf die oben verlinkte Liste.
- Lücken, die standardmäßig verboten sind, sind nicht erlaubt.
- Die Verwendung einer externen Quelle wie einer Website sowie von Bibliotheken, APIs, Funktionen oder Ähnlichem, die Zahlen in Ziffern umwandeln oder ins Französische übersetzen, ist nicht zulässig.
- Das ist Code-Golf , also gewinnt die Antwort mit den wenigsten Bytes.
- Wenn verfügbar, verlinken Sie bitte zu einem Online-Compiler, um Ihren Code einfach testen zu können.
Eingang
- Die Eingabe erfolgt nach Maßgabe Ihrer Sprache. (STDIN, Befehlszeile usw.)
- Die Eingabe ist eine einzelne Zeichenfolge, die aus einer ganzen Zahl zwischen einschließlich 0 und 100 besteht (führende Nullen optional).
- Sie können davon ausgehen, dass die Eingabe immer wohlgeformt ist.
Ausgabe
- Das Ergebnis wird in der für Ihre Sprache am besten geeigneten Methode ausgegeben. (STDOUT, Dialogfeld usw.)
- Groß- / Kleinschreibung spielt in der Ausgabe keine Rolle.
Beispiele
Testen Sie Ihren Code anhand folgender Kriterien:
Input-Output ------------- 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
quelle
quelle
Antworten:
JavaScript (ES6) 318
321Bearbeiten Sie Bugfixes (Verwalten führender Nullen) und spielen Sie mehr Golf
Gutschrift für den Kamelfalltrick @ Core1024
Mit Ein- / Ausgabe über Popup
Als testbare Funktion
So testen Sie in der FireFox-Konsole oder in FireBug
Ausgang testen
quelle
Haskell, 390 Bytes
Ungolfed
Funktionale Programmiersprachen sind für diesen Job durchaus geeignet.
quelle
main=interact$f.read
ein paar Zeichen ersetzen und diese speichern.interact
. Aktualisiert.Ruby, 333 Bytes
Meist sind es nur zwei Nachschlagetabellen und eine Reihe von ternären Operatoren, die alle seltsamen Regeln codieren und Ihnen sagen, welche Nachschlagetabelle wann verwendet werden soll. Lass es mich wissen, wenn du mehr wissen willst. ;)
quelle
80
sollte aber Quatre-Vingts mit einem s am Ende ausgeben.Python - 344
(348) (380) (445) (537)BytesDank an grc, Ray und isaacg für ihre Hilfe im Golfprozess.
Der Code besteht aus der anfänglichen Wörterbuchdefinition und einem Listenverständnis, das die Lücken mit der Verknüpfung der Wörterbuchelemente ausfüllt.
Sie können den Code online unter repl.it überprüfen
Meine letzten Versuche, diesen Code zu spielen, bestanden darin, auf den Generierungsprozess zu verzichten und mit dieser Reduzierung die Funktion zu verfeinern, um nur die angeforderte Nummer vor Ort zu generieren. Da die Zahlen der 60er und 80er Jahre jedoch nicht berechnete Elemente benötigen, bestand der Kampf darin, eine solche Funktion zu erstellen und dabei den Code zu verringern.
quelle
r=range
, um diesen Trick für die Linien 2 und 3, und nur einen Raum für Vertiefung. Und Sie können 65 Bytes mitd=dict(zip(r(17)+r(20,70,10)+[80,100],'zéro un deux ... quatre-vingt cent'.split()))
r=range
Trick, den ich kannte, aber vergessen habe, ihn hinzuzufügen, als ich die 1. Revision schrieb. Alles andere war für mich relativ neu, also danke schön. Allerdings funktioniert der Code unter Python 3.x nur, wenn dieprint
Anweisung in eine Funktion umgewandelt wird und dier
Funktionen im Diktat in Listen umgewandelt werden.int(input())
,input()
reicht.b=a/60*10+10
inf(a)
dann könnten Siea-a%b
unda%b
für Ihre Dictionary - Schlüssel. Außerdem brauchen Sie kein Leerzeichen1 or
, und die vierte Zeile kann auf gekürzt werden[f(v)for v in r(100)if v not in d]
. Ich habe nichts davon ausprobiert.if v not in d
->if(v in d)<1
speichert einen Charakter. Wenn Sie die beiden Teile Ihrer Funktion durch ein Semikolon trennen, können Sie alles in eine Zeile setzen.Python - 392 Bytes
Es hat eine Liste mit Basisnummern, aus denen die anderen Nummern generiert werden. Der größte Teil der Generierungslogik befindet sich im Listenverständnis in Zeile 2 und verwendet die Listenindizierung für Bedingungen. Sobald die Liste erstellt ist, schlägt sie die eingegebene Nummer nach und druckt sie aus.
Edit: Ab 426 Bytes mit grcs Spitze gekürzt.
quelle
a='_un_deux_trois ... quinze_seize'.split('_')
Python 3 (503 Byte)
Komprimieren Sie die Tabelle mit bzip2 und verwenden Sie dann die ASCII85-Codierung, um das Ergebnis zu speichern. Die Tabelle ist:
Sehr naive Methode, aber so schlimm ist es nicht.
Golf gespielt
Ungolfed
Bonus
Kannst du das Wort "Vim" in der komprimierten Zeichenfolge finden?
quelle
Sh0W
. Konnte Vim nicht finden, und du kannst es auch nicht.Bash,
456 440 421408Nimmt eine gültige Eingabe an (Ganzzahl von 0 bis 100 mit einer beliebigen Anzahl führender Nullen).
quelle
JavaScript 459 (kein Kamelgehäuse)
@ edc65 kann dir das nicht nehmen ...;)
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()])
quelle