Esto se toma de esta pregunta (con permiso del curso). Citaré:
Cree una función que tome una cadena, y debería devolver verdadero o falso en función de si la entrada consiste solo en una secuencia de caracteres repetida. La longitud de la cadena dada siempre es mayor que 1 y la secuencia de caracteres debe tener al menos una repetición.
Algunos ejemplos:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
Específicamente, la comprobación de una cadena estrictamente compuesta de subcadenas repetidas ( Actualización ) puede generar cualquier representación verdadera o falsa, pero no se genera ningún error. Cuerdas estrictamente alfanuméricas. De lo contrario, el código estándar de las reglas de golf. Este es Code Golf, por lo que gana la respuesta más corta en bytes para cada idioma.
code-golf
decision-problem
ouflak
fuente
fuente
Respuestas:
Brachylog ,
43 bytesPruébalo en línea!
Explicación
El programa imprime
true.
si se pueden satisfacer las restricciones, yfalse.
si no.fuente
~j↙
o=Ṁc
trabajar antes de notar que publicaste esto hace una horaġ=Ṁ
Ṁ
es una variable restringida a ser una lista de dos o más elementos)JavaScript (ES6), 22 bytes
Devuelve un valor booleano.
Pruébalo en línea!
Sin una expresión regular,
3329 bytesDevuelve
null
(falso) o un objeto (verdadero).Pruébalo en línea!
NB: Técnicamente,s se convierte en una expresión regular para match () , por lo que el título anterior es una mentira.
fuente
grep, 19
Prueba
Salida:
fuente
Japt , 6 bytes
Guardado un byte gracias a @Shaggy
Pruébalo en línea!
fuente
p<space>
por²
para guardar un byte.Java,
2524 bytes-1 byte gracias a Olivier Grégoire!
Respuesta aburrida de la expresión regular
Pruébalo en línea!
Es solo 1 byte más largo que la respuesta de Python aaaaaestoy atado ahora :)fuente
$
ya que elmatches
método es una coincidencia exacta, no una coincidencia de subcadena de forma predeterminada.matches
agrega el suyo$
a la expresión regular. ¡Gracias!Excel, 26 bytes
Entradas de A1, salidas a cualquier celda que ponga esta fórmula.
fuente
A
) y lo configuró como su entrada.A1
también una "variable" ya que contiene el valor de entrada? :)R , 28 bytes
Pruébalo en línea!
Versión simple de Regex. R es (a veces) muy similar a Python, por lo que es similar a la respuesta regex de Python 2 de TFeld, ¡aunque más corta!
Pregunta (si alguien sabe la respuesta)
Todavía estoy confundido por qué esto funciona, ya que la subcadena puede ser de cualquier longitud y siempre funcionará, y aún funciona cuando agrego una letra al frente de una cadena válida, como "cABABABABAB". Si personalmente leo la expresión regular, veo
(.+)
, que captura cualquier grupo de cualquier longitud. Y entonces\\1+$
que repite el grupo capturado varias veces hasta el final.Entonces, ¿por qué no captura solo "AB" y descubre que se repite hasta el final de la cadena, especialmente porque no hay ninguna restricción especificada sobre dónde puede comenzar la subcadena?
fuente
perl=TRUE
hace que coincida con cABABAB, como era de esperar. Ejecutargrep -E '(.*)\1+$'
en bash también coincide con cABABAB, aunquegrep -E
usa ERE, se supone que admite el mismo sabor regex R..+
al comienzo de un patrón a^.+
es una optimización importante, pero si.+
está dentro de capturar parens deja de ser válido.Retina 0.8.2 , 9 bytes
Pruébalo en línea! El enlace incluye casos de prueba.
fuente
Jalea ,
54 bytes¡Ahora veo que la forma óptima es seguir el método de xnor !
Un enlace monádico que acepta una lista de caracteres y genera un número entero: la longitud más corta posible de un segmento repetido o cero si no existe ninguno. Tenga en cuenta que cero es falsey mientras que los números que no son cero son verdaderos en Jelly.
Pruébalo en línea!
¿Cómo?
fuente
Perl 5
-p
, 14 bytesPruébalo en línea!
fuente
Python 2 , 24 bytes
Pruébalo en línea!
Descaradamente robado de la respuesta de xnor a la pregunta original.
Versión más intuitiva:
Python 2 ,
595553 bytesPruébalo en línea!
Versión aburrida de la expresión regular:
Python 2 , 44 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
2423 bytesPruébalo en línea!
fuente
Pyke , 4 bytes
Pruébalo aquí!
fuente
J ,
26 25 1514 bytesUsando el método xnor
Pruébalo en línea!
original (dos enfoques diferentes)
J , 25 bytes
Pruébalo en línea!
J 26 bytes
Pruébalo en línea!
fuente
PowerShell,
2324 bytes+1 byte para coincidir completamente con las reglas
Pruébalo en línea!
Bastante aburrido. Basado en las otras respuestas de Regex. ¡Afortunadamente, PowerShell no se usa
\
como personaje de escape!fuente
true
paraaabcabc
C # (compilador interactivo de Visual C #) , 70 bytes
Adaptación descarada de xnor ( 46 bytes )
Mi solución no Regex:
Explicación:
Reemplace cada posible subcadena que comience en el índice 0 con una cadena vacía. Si el resultado es una cadena vacía, la cadena está hecha completamente de esa subcadena. Como esto incluye evaluar toda la cadena consigo mismo, la cantidad de resultados esperados debe ser mayor que 1.
Ejemplo: abcabc
Posibles subcadenas que comienzan en el índice 0:
Si los reemplazamos con cadenas vacías
Dado que hay una subcadena distinta de 'abcabc' que devuelve una cadena vacía, la cadena está hecha completamente de otra subcadena ('abc')
Pruébalo en línea!
fuente
Python 3 ,
62605654 bytes-4 bytes gracias a ArBo
Pruébalo en línea!
fuente
f=
puede ser dejado caer; Generalmente se permiten funciones anónimas. Además, al cambiar a Python 2 y verificar la membresía de una lista en lugar de laany
construcción, puede obtener 55 bytesJapt , 10 bytes
Devuelve un número positivo si es verdadero y 0 si es falso. Si desea una salida bool, simplemente agregue la
-¡
banderaPruébalo en línea!
fuente
Casco , 6 bytes
Pruébalo en línea!
Siento que este es un byte más que óptimo, pero no pude encontrar un arreglo que hiciera la composición explícita
ȯ
innecesaria la .Explicación
fuente
€htD¹
evita elȯ
.λ€htD¹
pero no me di cuenta de que las lambdas se agregarían implícitamenteMathematica 11.x, 74 bytes
donde, en todo momento,
#
representa la cadena de entrada yencuentra subcadenas de la cadena de entrada que coinciden con el patrón
Este patrón requiere coincidencias,
x
debe comenzar al comienzo de la cadena y debe cumplir la condición de que (1) la coincidencia no sea la cadena de entrada completa y (2) si reemplazamos las ocurrencias de la coincidencia en la cadena de entrada con la cadena vacía obtenemos la cadena vacía. Finalmente, comparando la lista de coincidencias con la lista vacía,es
True
si la lista de coincidencias no está vacía yFalse
si la lista de coincidencias está vacía.Casos de prueba:
y
fuente
Python 3, 84 bytes
Usa
textwrap.wrap
(gracias a esta respuesta ) para dividir la cadena en trozos de longitudn
para probar cada posible longitud de subcadena repetida. Las piezas divididas se comparan entre sí agregándolas a un conjunto. Si todas las piezas son iguales, y el conjunto es de longitud 1, entonces la cadena debe ser una cadena repetitiva. Utilicé en<2
lugar de==1
porque guarda un byte, y se garantizó que la longitud de la cadena de entrada sería mayor que cero.Si no hay
n
para qué subcadenas repetidas de longitudn
componen la cadena completa, entonces devuelve falso para toda la función.fuente
05AB1E , 5 bytes
El método de xnor de la pregunta anterior también parece ser óptimo en 05AB1E.
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Limpio , 73 bytes
No usa expresiones regulares.
Pruébalo en línea!
Define
$ :: [Char] -> Bool
.Comprueba si la cadena dada es un prefijo de la repetición de cualquier subcadena tomada desde el final.
fuente
C ++ (gcc) , 36 bytes
Pruébalo en línea!
Otro puerto de la solución de xnor. Utiliza una macro para expandir el argumento en la expresión. Se supone que el argumento es de tipo
std::string
.fuente
QlikView Variable, 27 bytes
Esto debe definirse como una variable, que luego le permite pasar parámetros, por ejemplo,
$1
como su valor de entrada.Devuelve
0
o-1
(equivalente a laTRUE()
función de QlikView ).fuente
Rápido, 196 bytes
Pruébalo en línea!
fuente
Icono , 46 bytes
Pruébalo en línea!
Otro puerto de la solución de xnor.
fuente
K (oK) , 29 bytes
Pruébalo en línea!
fuente
Rojo , 72 bytes
Pruébalo en línea!
Devoluciones
1
paraTrue
fuente
T-SQL, 47 bytes
Usando el método de @ Xnor :
Mantener la respuesta anterior, ya que contiene un buen golf (67 bytes)
Explicación: Este script intenta repetidamente reemplazar la entrada '@y' con los primeros caracteres '@' de la entrada '@y' con nada, mientras aumenta '@'.
Finalmente, el resultado estará vacío. Si esto sucede cuando la variable del bucle es igual a la longitud del varchar, el criterio es falso / 0 porque '@' = len (@y) (no hubo varchar repetido).
se puede jugar golf en esto
porque la longitud de '@y' no puede ser 0 y '@' nunca excederá la longitud de @y.
Pruébalo en línea
fuente