Ich würde gerne eine Zahl nehmen und wissen, wie viele Silben darin enthalten sind, wenn ich auf Englisch spreche.
Beschränken wir dies auf positive ganze Zahlen, die kleiner als eintausend sind.
Ich bin Brite, also werden wir der Hunderterspalte ein 'und' folgen, wenn sich dahinter Ziffern befinden, die nicht Null sind.
Die Herausforderung
- Schreiben Sie einen Code, der eine positive Ganzzahl kleiner als 1000 akzeptiert, und geben Sie die Anzahl der Silben in den Wörtern aus, die diese Zahl im britischen Englisch darstellen.
- Es müssen NICHT die Wörter generiert werden, um die Zahlen darzustellen, sondern nur die Anzahl der Silben, die sie enthalten.
- Es ist Codegolf, versuchen Sie dies in den wenigsten Bytes zu erreichen.
- Verwenden Sie eine beliebige Sprache.
- Die Standardlücken sind verboten.
Testfälle
| N | In words | Syllables |
| 1 | one | 1 |
| 2 | two | 1 |
| 3 | three | 1 |
| 4 | four | 1 |
| 5 | five | 1 |
| 6 | six | 1 |
| 7 | sev-en | 2 |
| 8 | eight | 1 |
| 9 | nine | 1 |
| 10 | ten | 1 |
| 11 | el-ev-en | 3 |
| 12 | twelve | 1 |
| 13 | thir-teen | 2 |
| 14 | four-teen | 2 |
| 17 | se-ven-teen | 3 |
| 20 | twen-ty | 2 |
| 21 | twen-ty one | 3 |
| 42 | four-ty two | 3 |
| 73 | sev-en-ty three | 4 |
| 77 | sev-en-ty sev-en | 5 |
| 100 | one hund-red | 3 |
| 110 | one hund-red and ten | 5 |
| 111 | one hund-red and el-ev-en | 7 |
| 555 | five hund-red and fif-ty five | 7 |
| 700 | sev-en hund-red | 4 |
| 770 | sev-en hund-red and sev-en-ty | 8 |
| 777 | sev-en hund-red and sev-en-ty sev-en | 10 |
| 999 | nine hund-red and nine-ty nine | 7 |
code-golf
natural-language
AJFaraday
quelle
quelle
Antworten:
Python 2 ,
84837467 BytesVielen Dank an @xnor für das Golfen mit
9 bis16 Bytes!Probieren Sie es online!
Python 2 , 79 Bytes
Einfach, aber länger.
Probieren Sie es online!
quelle
-10
auf~9
und Schalt um das letzte Stück zu+(0<n%100!=12)-(n%100!=11)
, aber das ist immer noch mehr als Ihre neue Lösung.lambda n:4*(n>99)+`n`.count('7')+cmp(n/10%10,1)-n%~9/9-min(n%100,13)%12/~9
min(n%100,13)%12/~9
könnte tatsächlich bei einer Annäherung helfen, die ich auch für meine Gelee-Antwort versuchte.Perl 5
-p
, 53 BytesProbieren Sie es online!
Wie
quelle
JavaScript (ES6), 89 Byte
Probieren Sie es online!
quelle
Python 2 ,
112108 BytesProbieren Sie es online!
-4 Bytes, danke an Shaggy
quelle
[2]*7
Teil wird scheitern17
, da dies 3 anstelle von 2 (sev-en-teen
) sein sollte.JavaScript,
8684 BytesEin optimierter Port von TFelds Python-Lösung .
Probieren Sie es online aus
2 Bytes gespart dank Arnauld
quelle
Wolfram Language
101115 BytesErläuterung
(Ersatz
StringSplit
fürs
)IntegerName
gibt die Zahl in amerikanischem Englisch wieder (dh ohne "und", die in Zahlen größer als 100 enthalten sind)777-> "seven hundred seventy-seven
.StringSplit[IntegerName@#,"-"]
Entfernt alle Bindestriche im Rendering.StringSplit/@
teilt das Rendering in Wörter auf.Join@@
Lässt eine einfache Liste mit Wörtern ohne eingebettete Liste (falls ein Bindestrich angezeigt wird).WordData[#,"Hyphenation"]
zerlegt ein einzelnes Wort in seine Silben.Join@@
hinterlässt eine einfache Liste von Silben in allen Wörtern.Length
zählt die Silben+Boole[#>100&&#~Mod~100!=0]
erhöht1
die Silbenanzahl für Zahlen über 100 (aufgrund des zusätzlichen "und" im britischen Englisch), wobei ganzzahlige Vielfache von 100 ausgenommen sind.quelle
Java 11,
105102 BytesEnthält viele nicht druckbare Zeichen.
-3 Bytes danke @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
quelle
.split("7",-1)
in.split("7",9)
und-6+(n>99?4:0)
in-(n>99?2:6)
.-(n>99?2:6)
, aber es ist so offensichtlich, dass Sie darauf hingewiesen haben. Und-1
auf9
Grund der begrenzten Input-Größe würde ich nicht gedacht haben, so danke!05AB1E ,
3431 BytesProbieren Sie es online aus oder überprüfen Sie alle
[1,999]
Testfälle .Erläuterung:
Bei allen genannten Prüfungen ergibt sich 1 für wahr und 0 für falsch.
quelle
I
(input) anstattX
(input mod 100) beim Prüfen ob es größer als 20 für die +1 von istty
.>
(Überprüfen Sie, ob die Eingabe größer als 100 ist) wurde durch@
(Überprüfen Sie, ob die Eingabe größer oder gleich 100 ist) ersetzt. Vielleicht hätte ich selbst einige weitere Testfälle vor dem Posten genauer prüfen sollen. Entschuldigung.Kohle ,
3931 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Berechnen Sie Anpassungen an der Anzahl der Silben und geben Sie das Ergebnis als String aus.
Beginnen Sie, indem Sie jede Ziffer ungleich Null in 1 ändern und dann als Basis 2 dekodieren. Dies gibt die richtige Antwort für die meisten Eingaben.
Addiere 1 für jede
7
.Nehmen Sie die Literalzeichenfolge,
10000000001021111111
fügen Sie 80 Nullen hinzu, indexieren Sie sie zyklisch nach der Eingabe und subtrahieren Sie diese Ziffer.quelle
Jelly ,
282523 BytesProbieren Sie es online!
Wie es funktioniert
quelle
PHP ,
190158145141137 BytesProbieren Sie es online!
Eine Portierung von Kevin Cruijssens Lösung (leider hat sie in PHP nicht die gleiche Kürze :))
-
3245 danke an Shaggy!-3 Danke an Kevin Crujissen!
quelle
>99
und>19
anstelle von>=100
und verwendet werden>=20
.05AB1E , 24 Byte
Port of Dennis Gelee Antwort
Probieren Sie es online! oder als Testsuite
Erläuterung
quelle
05AB1E , 26 Bytes
Port of @Neils Charcoal-Antwort , also stelle sicher, dass du ihn auch positiv bewertest, wenn dir diese Antwort gefällt!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Komprimierte Ganzzahlen
•Ž¢Γ}Þ±6u•
können alternativ•8JA•b2TÌǝ
für die gleiche Bytezahl verwendet werden.Erläuterung:
Lesen Sie meine Antwort 05AB1E (Abschnitt Wie komprimiere ich große ganze Zahlen? ) , Um zu verstehen, warum dies so
•Ž¢Γ}Þ±6u•
ist10000000001021111111
.quelle