Escriba un programa o función que reciba como entrada una cadena que representa una palabra galesa (UTF-8 a menos que usted especifique lo contrario).
Las siguientes son todas letras individuales en galés:
a, b, c, ch, d, dd, e, f, ff, g, ng, h, i, j, l, ll, m, n, o, p, ph, r, rh, s, t, th, u, w, y
Para citar Wikipedia ,
Si bien los dígrafos ch , dd , ff , ng , ll , ph , rh , th están escritos con dos símbolos, todos se consideran letras individuales. Esto significa, por ejemplo, que Llanelli (una ciudad en el sur de Gales) solo tiene seis letras en galés, en comparación con ocho letras en inglés.
Estas letras también existen en galés, aunque están restringidas al vocabulario técnico prestado de otros idiomas:
k, q, v, x, z
Las letras con signos diacríticos no se consideran letras separadas, pero su función debe aceptarlas y poder contarlas. Posibles tales letras son:
â, ê, î, ô, û, ŷ, ŵ, á, é, í, ó, ú, ý, ẃ, ä, ë, ï, ö, ü, ÿ, ẅ, à, è, ì, ò, ù, ẁ
(Esto significa que ASCII no es una codificación de entrada aceptable, ya que no puede codificar estos caracteres).
Notas:
- Este es el código de golf.
- No tiene que dar cuenta de palabras como llongyfarch , en las que ng no es un dígrafo, sino dos letras separadas. Esta palabra tiene nueve letras, pero puedes contarla erróneamente como ocho. (Si puede explicar esas palabras, es algo increíble, pero está fuera del alcance de este desafío).
- Se garantiza que la entrada no tendrá espacios en blanco (a menos que lo prefiera con una nueva línea final (o algo más esotérico), en cuyo caso puede proporcionarse). Ciertamente no habrá espacios en blanco internos.
Casos de prueba:
- Llandudno, 8
- Llanelli, 6
- Rhyl, 3
- Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (realmente 51, pero contaremos 50)
- Tŷr, 3
- Cymru, 5
- Glyndŵr, 7
fuente
Respuestas:
05AB1E ,
242321 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Retina , 23 bytes
Pruébalo en línea!
Incluso lloro regex.
fuente
JavaScript (ES6), 44 bytes
La respuesta trivial puede ser la más corta.
fuente
BASH
52 50(sed + wc) 41-9 gracias a Jordan
Si se requieren letras mayúsculas, esto necesita un
i
al final del comando sed. (Lo dejé fuera porque todas las "letras simples" en la pregunta son minúsculas, aunque algunos ejemplos no lo son).fuente
grep -o .|wc -l
lugar dewc -c
?wc
, puede usar-m
para contar caracteres en lugar de bytes.c
dech
adentro con el[prt]
?sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
([dfl])\1
más tiempo quedd|ff|ll
. Solo una consonante doble más favorecería la versión inteligente.Paja ,
30583533 bytesReemplaza cada ocurrencia de la expresión regular por
0
, y convierte de unario a decimal.Lamentablemente, Straw no puede pasar banderas a expresiones regulares.Me olvido de la?flags:
construcciónPruébalo en línea!(El código agregado es para verificar todos los casos de prueba)
fuente
Python 3, 64 bytes
Usa regex nuevamente
Ideone it!
fuente
PowerShell v2 +,
525048 bytes¿Hace una
-replace
en todas las letras de una sola letra de dos símbolos, las cambia a0
(hecho porque cambiar a una no numérica requeriría comillas), luego obtiene el.length
de la cadena resultante.Casos de prueba
fuente
[prtc]h
?V , 31 bytes
¡Pruébelo en línea o verifique todos los casos de prueba!
Contiene algunos caracteres no imprimibles, así que aquí hay un hexdump:
fuente
PHP, 56 bytes
fuente
[dfl]{2}
coincidenciasdf
,ld
etc., así como sus coincidencias previstas.dd|ff|ll
es de la misma longitudecho
(espacio al final), use<?=
, que ahorra 2 bytes. Además,$t
no es necesario allí, lo que le ahorra 3 bytes más.Java 7,
15673 bytesUn montón de bytes guardados gracias a @ OlivierGrégoire .
Sin golf y casos de prueba:
Pruébalo aquí
Salida:
fuente
Matcher
directamente? : o Además,Matcher
se puede definir en el bucle for.return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
es mucho más corto. ¿No puede funcionar esto?int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}
). Y solo 51 para la versión Java 8 (s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()
).Matcher
fue un accidente. Lo tenía correctamente en el código de prueba, pero no en el código de golf ..>.> SinreplaceAll
embargo, funciona mejor, gracias.R, 54 bytes
Muy similar a las otras respuestas. Coincide con cualquiera de las letras de dos caracteres y las reemplaza por,
@
y posteriormente cuenta el número de caracteres. Lee la entrada de stdin. Utiliza la opciónignore.case = TRUE
(tercer argumento paragsub
) para que coincida con los caracteres en mayúscula y minúscula.Prima
Ambos
gsub
ynchar
están vectorizados, lo que significa que esto también funciona en un vector de caracteres, por ejemplo:produce:
fuente
Perl 6 , 36 bytes
Pruébalo en línea!
fuente
XQuery, 77 bytes
fuente
tcl, 71
manifestación
fuente
Perl 5 , 35 + 1 (
-p
) = 36 bytesPruébalo en línea!
fuente