Schreiben Sie ein Programm oder eine Funktion, die als Eingabe eine Zeichenfolge empfängt, die ein walisisches Wort darstellt (UTF-8, sofern von Ihnen nicht anders angegeben).
Folgendes sind alle Einzelbuchstaben auf Walisisch:
a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, ll, m, n, o, p, ph, r, rh, s, t, th, u, w, y
Wikipedia zitieren ,
Während die Digraphen ch , dd , ff , ng , ll , ph , rh , th jeweils mit zwei Symbolen geschrieben sind, werden sie alle als einzelne Buchstaben betrachtet. Dies bedeutet zum Beispiel, dass Llanelli (eine Stadt in Südwales) nur sechs Buchstaben auf Walisisch hat, verglichen mit acht Buchstaben auf Englisch.
Diese Buchstaben gibt es auch auf Walisisch, sie sind jedoch auf Fachwörterbücher beschränkt, die aus anderen Sprachen entlehnt wurden:
k, q, v, x, z
Buchstaben mit diakritischen Zeichen werden nicht als separate Buchstaben betrachtet, aber Ihre Funktion muss sie akzeptieren und zählen können. Mögliche solche Buchstaben sind:
â, ê, î, ô, û, ŷ, á, á, é, í, ó, ú, ý, ä, ä, ë, ï, ö, ÿ, ẅ, à, è, ì, ò, ù, ẁ
(Dies bedeutet, dass ASCII keine akzeptable Eingabecodierung ist, da diese Zeichen nicht codiert werden können.)
Anmerkungen:
- Das ist Code Golf.
- Sie müssen Wörter wie llongyfarch nicht berücksichtigen , in denen das ng kein Digraph ist, sondern zwei separate Buchstaben. Dieses Wort hat neun Buchstaben, aber Sie können es als acht falsch zählen. (Wenn Sie solche Wörter erklären können , ist das ziemlich beeindruckend, aber außerhalb des Rahmens dieser Herausforderung.)
- Die Eingabe darf garantiert kein Leerzeichen enthalten (es sei denn, Sie bevorzugen es mit einer einzelnen nachgestellten Zeile (oder etwas Esoterischerem). In diesem Fall kann dies angegeben werden). Es wird sicher kein internes Leerzeichen geben.
Testfälle:
- Llandudno, 8
- Llanelli, 6
- Rhyl, 3
- Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (wirklich 51, aber wir werden 50 zählen)
- Tŷr, 3
- Cymru, 5
- Glyndŵr, 7
Antworten:
05AB1E ,
242321 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Netzhaut , 23 Bytes
Probieren Sie es online!
Sogar Regex.
quelle
JavaScript (ES6), 44 Byte
Die triviale Antwort kann die kürzeste sein.
quelle
BASH
52 50(sed + wc) 41-9 Danke an Jordan
Wenn Großbuchstaben erforderlich sind, muss dies
i
am Ende des sed-Befehls erfolgen. (Ich habe es weggelassen, weil alle "Einzelbuchstaben" in der Frage Kleinbuchstaben sind, obwohl einige Beispiele dies nicht tun).quelle
grep -o .|wc -l
stattwc -c
?wc
, können Sie-m
anstelle von Bytes Zeichen zählen.c
vonch
innen mit bewegen[prt]
?sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
([dfl])\1
würde länger dauern alsdd|ff|ll
. Nur ein weiterer Doppelkonsonant würde die clevere Version bevorzugen.Stroh ,
30583533 BytesErsetzen Sie jedes Vorkommen des regulären Ausdrucks durch
0
und konvertieren Sie von unär zu dezimal.Leider kann Straw keine Flaggen an Regex übergeben.Ich vergesse das?flags:
KonstruktProbieren Sie es online! (Der hinzugefügte Code dient zur Überprüfung aller Testfälle.)
quelle
Python 3, 64 Bytes
Verwendet wieder Regex
Ideone es!
quelle
PowerShell v2 +,
525048 BytesTut ein
-replace
auf alle Zwei-Symbol-Einzelbuchstaben, ändert sie in0
(getan, weil das Ändern zu einer Nicht-Ziffer Anführungszeichen erfordern würde), dann erhält.length
die sich ergebende Zeichenfolge.Testfälle
quelle
[prtc]h
?V , 31 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle!
Dies enthält einige nicht druckbare Zeichen, daher hier ein Hexdump:
quelle
PHP, 56 Bytes
quelle
[dfl]{2}
Streichhölzerdf
,ld
etc. sowie die beabsichtigten Ergebnisse geführt .dd|ff|ll
ist die gleiche Länge.echo
(Leerzeichen am Ende) wird verwendet<?=
, was 2 Bytes spart. Außerdem ist das$t
dort nicht nötig, wodurch Sie 3 weitere Bytes sparen.Java 7,
15673 BytesDank @ OlivierGrégoire werden viele Bytes gespeichert .
Ungolfed & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
Matcher
direkt? : oMatcher
Kann auch in der for-Schleife definiert werden.return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
es viel, viel kürzer ist. Kann das nicht funktionieren?int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}
). Und nur 51 für die Java 8-Version (s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
).Matcher
war ein Unfall. Ich hatte es richtig im Testcode, aber nicht im Golf-Code.>.> DeinreplaceAll
funktioniert aber besser, danke.R, 54 Bytes
Sehr ähnlich zu den anderen Antworten. Stimmt mit einem der beiden Buchstaben überein und ersetzt sie durch
@
und zählt anschließend die Anzahl der Zeichen. Liest die Eingabe von stdin. Verwendet die Optionignore.case = TRUE
(drittes Argument bisgsub
), um sowohl Groß- als auch Kleinbuchstaben zu finden.Bonus
Beide
gsub
undnchar
sind vektorisiert, was bedeutet, dass dies auch für einen Zeichenvektor funktioniert, zB:produziert:
quelle
Perl 6 , 36 Bytes
Probieren Sie es online!
quelle
XQuery, 77 Bytes
quelle
tcl, 71
Demo
quelle
Perl 5 , 35 + 1 (
-p
) = 36 BytesProbieren Sie es online!
quelle