Dicen que hatees 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, hatey you. agatesigue siendo una palabra fuerte porque, aunque comienza con una vocal, a cada consonante todavía le sigue una vocal. youes 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
falsepara una palabra fuerte ytruepara 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 regresaFalsesi es fuerte oTrueno.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
Falseresultados 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,vde 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 devuelveTruelo que significa que nuez no es una palabra fuerte.fuente
Jalea ,
109 bytesUn enlace monádico que toma una lista de caracteres y regresa:
0si fuerte1si 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 de11inmediato).fuente
Ạen su código ... de lo contrario podría haber hechoe€ØY;1w11o 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
zal 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
Falsepara palabras fuertes, de loTruecontrariofuente
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
-pcommand 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Ȧ€ØCpara asegurarme de queYyse contara como una consonante porque de alguna manera recordaba al revés. ¡Gracias!Awk, 39 bytes
imprime
npara 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. (
falseif strong;trueif 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. (
trueif strong;falseif not)Uses regex to see if the input-String matches the 'strong'-regex. Note that
String#matchesin 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. (
falseif strong;trueif 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
0for true and1for 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
returnand!.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->/",strand[1]))) return->[1])))returnbut I don't know PHP too well so I can't be sure.[B-Z]?[B-Z]includes vowels.[^AEIOUY]works, though.ifstatement.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