Ecrivez un programme ou une fonction qui reçoit en entrée une chaîne représentant un mot gallois (UTF-8, sauf indication contraire de votre part).
Ce qui suit sont toutes des lettres simples en gallois:
a, b, c, ch, d, jj, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, th, u, w, y
Pour citer Wikipedia ,
Bien que les digraphes ch , dd , ff , ng , ll , ph , rh , th soient chacun écrits avec deux symboles, ils sont tous considérés comme des lettres simples. Cela signifie, par exemple, que Llanelli (une ville du sud du Pays de Galles) n’a que six lettres en gallois, contre huit en anglais.
Ces lettres existent également en gallois, bien qu’elles soient limitées au vocabulaire technique emprunté à d’autres langues:
k, q, v, x, z
Les lettres avec signes diacritiques ne sont pas considérées comme des lettres séparées, mais votre fonction doit les accepter et pouvoir les compter. Les lettres possibles sont:
â, ê, î, ô, û,, ŵ, á, é, í, ó, ú, ý, ä, ä, ë, ï, ï, ö, ü,,, à, è, è, ò, ò, ù, ẁ
(Cela signifie que l'ASCII n'est pas un codage d'entrée acceptable, car il ne peut pas coder ces caractères.)
Remarques:
- C'est du code golf.
- Vous ne devez pas tenir compte des mots comme llongyfarch , dans lequel le ng est pas un digraphe, mais deux lettres distinctes. Ce mot a neuf lettres, mais vous pouvez le dénombrer comme huit. (Si vous pouvez rendre compte de tels mots, c'est génial, mais sort du cadre de ce défi.)
- Il est garanti que l’entrée n’a pas d’espace (sauf si vous le préférez avec un retour à la ligne simple (ou quelque chose de plus ésotérique), auquel cas cela peut être fourni). Il n'y aura certainement pas d'espaces internes.
Cas de test:
- Llandudno, 8
- Llanelli, 6
- Rhyl, 3
- Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogogoch, 50 (vraiment 51, mais nous compterons 50)
- Tŷr, 3
- Cymru, 5
- Glyndŵr, 7
la source
Réponses:
05AB1E ,
242321 octetsCode:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne!
la source
Retina , 23 octets
Essayez-le en ligne!
Même regex moar.
la source
JavaScript (ES6), 44 octets
La réponse triviale peut être la plus courte.
la source
BASH
52 50(sed + wc) 41-9 grâce à la Jordanie
Si une lettre majuscule est requise, une commande
i
à la fin de la commande sed est nécessaire . (Je l'ai laissé de côté car toutes les "lettres simples" de la question sont en minuscule, même si certains exemples ne le sont pas).la source
grep -o .|wc -l
au lieu dewc -c
?wc
vous pouvez utiliser-m
pour compter les caractères au lieu d'octets.c
dech
dans avec le[prt]
?sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
([dfl])\1
serait plus long quedd|ff|ll
. Une seule consonne doublée favoriserait la version intelligente.Straw ,
30583533 octetsRemplacez chaque occurrence de l'expression rationnelle par
0
et convertissez unaire en décimal.Malheureusement, Straw ne peut pas passer les drapeaux aux regex.J'oublie la?flags:
constructionEssayez-le en ligne! (Le code ajouté est destiné à vérifier tous les cas de test)
la source
Python 3, 64 octets
Utilise regex à nouveau
Ideone ça!
la source
PowerShell v2 +,
525048 octetsEffectue une commande
-replace
sur toutes les lettres à une seule lettre avec deux symboles, les remplace par0
(effectuée car le passage à une valeur non numérique nécessiterait des guillemets), puis récupère la.length
chaîne résultante.Cas de test
la source
[prtc]h
?V , 31 octets
Essayez-le en ligne ou vérifiez tous les cas de test!
Cela contient des caractères non imprimables, donc voici un hexdump:
la source
PHP, 56 octets
la source
[dfl]{2}
matchsdf
,ld
etc., ainsi que ses matchs prévus.dd|ff|ll
est la même longueur.echo
(espace à la fin), utilisez<?=
, ce qui économise 2 octets. En outre, le$t
n'est pas nécessaire là-bas, vous économisant 3 octets de plus.Java 7,
15673 octetsCharges d'octets enregistrés grâce à @ OlivierGrégoire .
Ungolfed & cas de test:
Essayez ici.
Sortie:
la source
Matcher
directement? : o En outre,Matcher
peut être défini dans la boucle for.return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
c'est beaucoup, beaucoup plus court. Cela ne peut pas fonctionner?int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}
). Et seulement 51 pour la version Java 8 (s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
).Matcher
était un accident. Je l'ai eu correctement dans le code de test, mais pas dans le code de golf.>.> VosreplaceAll
travaux fonctionnent mieux, merci.R, 54 octets
Très similaire aux autres réponses. Correspond à n'importe laquelle des lettres de caractères et les remplace par
@
, puis compte le nombre de caractères. Lit les entrées de stdin. Utilise l'optionignore.case = TRUE
(troisième argument degsub
) pour faire correspondre les majuscules et les minuscules.Prime
Les deux
gsub
etnchar
sont vectorisés, ce qui signifie que cela fonctionne également sur un vecteur de caractère, par exemple:produit:
la source
Perl 6 , 36 octets
Essayez-le en ligne!
la source
XQuery, 77 octets
la source
tcl, 71
démo
la source
Perl 5 , 35 + 1 (
-p
) = 36 octetsEssayez-le en ligne!
la source