Dicen que hate
es una palabra fuerte. Quería saber por qué, así que eché un buen vistazo a la palabra.
Noté que cada consonante tenía una vocal después. Eso me hizo parecer bastante fuerte, así que decidí que eso es lo que hace que una palabra sea fuerte.
Quiero encontrar palabras más fuertes, ¡así que necesitaré un programa para ello!
Encontrar palabras fuertes
Las palabras fuertes son palabras donde cada consonante (letras en el conjunto BCDFGHJKLMNPQRSTVWXZ
) es seguida por una vocal (letras en el conjunto AEIOUY
). Eso es. Nada más importa.
Si la palabra comienza con una vocal, no tiene que preocuparse por ninguna de las letras antes de la primera consonante. Si la palabra no tiene consonantes, ¡es automáticamente una palabra fuerte!
Algunos ejemplos de palabras fuertes son agate
, hate
y you
. agate
sigue siendo una palabra fuerte porque, aunque comienza con una vocal, a cada consonante todavía le sigue una vocal. you
es una palabra fuerte porque no tiene consonantes.
No hay restricción de longitud para palabras fuertes.
El reto
Escriba un programa o función que tome una cadena no vacía como entrada y genere un valor verdadero si es una palabra fuerte o un valor falso si no lo es.
Aclaraciones
- Puede decidir tomar la entrada en minúsculas o mayúsculas. Especifique cuál en su respuesta.
- Las palabras no contendrán signos de puntuación de ningún tipo. Solo contendrán letras simples en el conjunto
ABCDEFGHIJKLMNOPQRSTUVWXYZ
. - En lugar de valores de verdad y falsedad, puede elegir dos valores distintos y consistentes para obtener verdadero y falso. Si hace esto, especifique los valores que ha elegido en su respuesta.
- Alternativamente, puede generar un valor falso para una palabra fuerte y uno verdadero para una palabra no fuerte.
Casos de prueba
Input -> Output
hate -> true
love -> true
popularize -> true
academy -> true
you -> true
mouse -> true
acorn -> false
nut -> false
ah -> false
strong -> false
false -> false
parakeet -> false
Tanteo
Como se trata de código de golf , ¡la respuesta con la menor cantidad de bytes gana!
fuente
""
una posible entrada?Respuestas:
JavaScript (ES6),
362827 bytesSe guardó 1 byte invirtiendo el resultado, como lo sugiere LarsW
Toma entrada en minúsculas. Devuelve
false
para una palabra fuerte ytrue
para una palabra no fuerte.¿Cómo?
Agregamos un
0
(sin vocal) al final de la cadena de entrada y buscamos dos caracteres consecutivos sin vocal. Esto nos permite cubrir ambos casos que hacen que una palabra no sea fuerte:Casos de prueba
Mostrar fragmento de código
fuente
+0
, sin embargo? Parece funcionar bien sin él+0
, devolvería falsos positivos en las palabras que terminan con una consonante.!
(dos valores distintos)Python 2 , 48 bytes
Una función sin nombre que toma una cadena (minúscula),
s
, y regresaFalse
si es fuerte oTrue
no.Pruébalo en línea! (invierte los resultados para que coincidan con el OP)
¿Cómo?
Las palabras no fuertes tienen una consonante seguida de una consonante o terminan en una consonante.
El código agrega una consonante al final (
s+'b'
) para que la prueba requerida sea solo para dos consonantes seguidas.Descubre si cada letra en la palabra alterada es una vocal con la comprensión de la lista
[v in'aeiouy'for v in s+'b']
.Ahora necesita verificar dos
False
resultados seguidos (indicando una palabra no fuerte), lo hace obteniendo una representación de cadena (usando`...`
) de esta lista y buscando la existencia de'se, F'
. Esta es la cadena más corta encontrada'False, False'
pero ninguna de'True, True'
:;'False, True'
; o'True, False'
.Como un ejemplo
'nut'
, considere , la comprensión de la lista evalúa cada letra,v
de la'nutb'
existencia en el'aeiouy'
rendimiento de la lista[False, True, False, False]
, la representación de cadena de esta lista es la'[False, True, False, False]'
que contiene'e, F'
aquí:'[False, True, Fals>>e, F<<alse]'
por lo tanto, la función devuelveTrue
lo que significa que nuez no es una palabra fuerte.fuente
Jalea ,
109 bytesUn enlace monádico que toma una lista de caracteres y regresa:
0
si fuerte1
si noPruébalo en línea! o ver el conjunto de pruebas .
¿Cómo?
Nota: La razón para usar
Ạ
es solo para guardar un byte sobre el uso1
(ya que luego queremos usarlo de11
inmediato).fuente
Ạ
en su código ... de lo contrario podría haber hechoe€ØY;1w11
o algo asíẇ
tiene un argumento izquierdo que es un número, se convierte implícitamente en una lista decimal de dígitos, por lo que el once se convierte[1,1]
.05AB1E , 8 bytes
Código
Utiliza la codificación 05AB1E .Pruébalo en línea!
Explicación
Ejemplo
fuente
R , 43 bytes
Pruébalo en línea!
Un puerto de la respuesta JavaScript de Arnauld; devuelve 1 para palabras débiles y
integer(0)
para fuertes; agrega un(espacio) al final de la cadena.
Esto en realidad está vectorizado; con un vector de cadenas, devuelve los índices (basados en 1) de las palabras débiles.
fuente
$
, ¿te gustaría explicarlo más?paste0(s,0)
, pero eso es solo una objeción. Creo que @Charlie hace referencia a algo como esto:grep("[^aeiouy]([^aeiouy]|$)",s)
Dyalog APL, 20 bytes
Pruébalo en línea!
fuente
⎕←
.Haskell ,
6154 bytesPruébalo en línea!
Tuve que agregar un
z
al final de la cadena para manejar el caso de una consonante final.fuente
Java (OpenJDK 8) ,
9381 bytesPruébalo en línea!
fuente
s->{int w=0,p=w,l;for(char c:s){l="aeiouy".indexOf(c)>>31;w|=p&l;p=l;}return w+p>=0;}
.s->{int w=0,p=w,l;for(char c:s)w|=p&(p=l="aeiouy".indexOf(c)>>31);return w+p>=0;}
[a-z&&[^aeiouy]]
una respuesta anterior mía . ;)Casco , 12 bytes
Pruébalo en línea!
Gracias a H.PWiz por su ayuda con -4.
Devuelve valores inconsistentes pero apropiadamente verdaderos o falsos.Gracias a Leo por -1, ahora devuelve un valor verdadero / falso constante.
fuente
Pyth , 18 bytes
Verifique todos los casos de prueba.
"Prestó" la expresión regular de la respuesta de JS . Esto vuelve
False
para palabras fuertes, de loTrue
contrariofuente
13 ISO-8859-1 bytes, 13 chars
. Creo que debería estar bienBrachylog ,
181110 bytesPruébalo en línea!
Limpio y simple (excepto tal vez por los 2 bytes iniciales adicionales para manejar el caso de la consonante final, como "periquito").
Es falsey para palabras fuertes y verdadero para palabras no fuertes.
fuente
Python 2 , 58 bytes
-30 bytes al darse cuenta de que puede ser tan simple como la respuesta JS de Arnauld .
Pruébalo en línea!
fuente
f=lambda s...
f=\
un encabezado).'[^aeiouy]([^aeiouy]|$)'
(24 bytes) con"[^aeiouy]("*2+")|$)"
(21 bytes) para guardar 3 bytes, ya que el grupo vacío()
no cambia el comportamiento de búsqueda ( TIO ).Perl 5, 31 bytes (30 + 1)
+1 byte for
-p
command line flag. Prints the word if it's a strong word, or the empty string if it is not.fuente
$_=$/if/[^aeiouy]{2}/
.Jalea , 11 bytes
Pruébalo en línea!
Sí, sé que Jonathan Allan me ha golpeado mucho, pero de todos modos quería compartir mi enfoque: P
-4 bytes al robar un poco de la respuesta de Jonathan Allan (en lugar de agregar una consonante para verificar el caso del borde de la última letra, solo agregue 1)
-1 byte gracias a millas
fuente
a2\
o enȦ2Ƥ
lugar deṡ2Ȧ€
ØC
para asegurarme de queYy
se contara como una consonante porque de alguna manera recordaba al revés. ¡Gracias!Awk, 39 bytes
imprime
n
para palabras no seguras, nada (o simplemente una nueva línea) para palabras fuertessiguiendo el paquete y buscando dos no vocales consecutivas en minúsculas
pruebas
fuente
Kotlin , 49 bytes
Verdadero y falso se intercambian
Embellecido
Prueba
TryItOnline
Basado en la respuesta de @ Arnauld
fuente
Retina,
2318 bytesTry it online! Outputs 0 for strong, 1 if not. Add 1 byte to support mixed case. Edit: Saved 5 bytes thanks to @ovs.
fuente
Java 8,
5342 bytes-11 bytes by using the same regex as in @jrtapsell's Kotlin answer instead.
Try it here. (
false
if strong;true
if not)Explanation:
So it basically checks if we can find two adjacent consonants, or if the String ends with a consonant.
Old answer (53 bytes):
Try it here. (
true
if strong;false
if not)Uses regex to see if the input-String matches the 'strong'-regex. Note that
String#matches
in Java automatically adds^...$
to check if the String entirely matches the given regex.Explanation":
A search instead of matches (like a lot of other answers use) is actually longer in Java:
70 bytes:
Try it here. (
false
if strong;true
if not)fuente
Ruby, 25 bytes
Try it online!
Everybody else is doing it, so why can't Ruby?
fuente
SOGL V0.12,
1918 bytesTry it Here!
Explanation:
fuente
05AB1E, 11 bytes
Try it online!
Uses Jonathan's algorithm, returns
0
for true and1
for false.fuente
Swift 3.1, 85 bytes
Try it here!
This borrows Arnauld's regex.
fuente
Lua, 41 bytes
Reads from standard input
Lua (loadstring'ed), 37 bytes
Reads from function parameter(s)
Input is lowercase
Sees if there is a string of length 2 or more, consisting only of not vowels (consonants) or if the string ends with a non-vowel
Returns true/false
fuente
C++,
195194 bytes-1 bytes thanks to Zacharý
Uppercase, return true if input is a strong word, false otherwise ( C++ have simple int to bool implicit cast rules, 0 => false, true otherwise )
Code to test :
fuente
return
and!
.C, 107 Bytes
Returns 1 for strong word and 0 for weak word. Tested with the words given in the main post.
fuente
C (gcc), 59 bytes
Try it online!
fuente
PHP, 69 bytes
Returns 1 is the word is not strong.
fuente
/", str
->/",str
and[1]))) return
->[1])))return
but I don't know PHP too well so I can't be sure.[B-Z]
?[B-Z]
includes vowels.[^AEIOUY]
works, though.if
statement.CJam, 57 bytes
Try it online!
Reads input, converts to 1s for consonants, 0s for vowels. For every consonant, AND predefined variable X (predefined to 1) with next character's value. Output X
fuente