Una cadena de caracteres se repite si contiene dos subcadenas consecutivas que son equivalentes.
Por ejemplo, 2034384538452
repite ya que contiene 3845
dos veces, consecutivamente.
Por lo tanto, su desafío es decidir si una cadena contiene una subcadena repetida. Puede tomar la entrada como una cadena o una matriz de caracteres.
Nunca recibirá una entrada vacía, y la longitud de la subcadena (si existe) puede ser 1 o más.
Utilizo 1
y 0
aquí como mis valores de verdad y falsedad, pero puede usar valores diferentes, siempre que sean verdaderos y falsos en su idioma.
Ejemplos:
abcab -> 0
bdefdefg -> 1
Hello, World! -> 1
pp.pp/pp -> 1
q -> 0
21020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021012102012101202102012021012102012021020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120210121020120210201210120210201202101210201210120210121020120210201210120210121020121012021020120210121020121012021012102012021020121012021020120210121020120210201210120210121020121012021020120 -> 0
(El último ejemplo se generó a partir de la cantidad de unos entre cada cero en la secuencia Thue-Morse)
Respuestas:
Retina , 6 bytes
Pruébalo en línea!
Valor positivo para la verdad; cero para falsey.
Cómo funciona
Devuelve el número de coincidencias de la expresión regular
/(.+)\1/g
.fuente
Brachylog , 3 bytes
Pruébalo en línea!
fuente
Jalea ,
65 bytesEste es un programa completo. TIO no puede manejar el último caso de prueba sin truncarlo.
Pruébalo en línea!(último caso de prueba truncado a 250 dígitos)
Cómo funciona
fuente
Mathematica, 32 bytes
fuente
StringContainsQ[x__~~x__]
y!StringFreeQ[#,x__~~x__]&
son ambos más cortos.Java, 27 bytes
Prácticamente un duplicado de la respuesta de Retina , pero no hay forma de que Java se acorte.
fuente
05AB1E , 5 bytes
Pruébalo en línea!
Emite 1 como valor verdadero y 0 como valor falso
Explicación
fuente
Python , 38 bytes
Pruébalo en línea!
Bostezo, una expresión regular. Comprueba si la cadena contiene una cadena de uno o más caracteres
.+
seguidos de la misma cadena que se acaba de capturar. El objeto de búsqueda de salida es Verdad si hay al menos una coincidencia, como puede comprobarsebool
.Usar
compile
aquí ahorra sobre escribir una lambda:Python , 54 bytes
Pruébalo en línea!
Busca una subcadena que se compone de dos o más cadenas iguales concatenadas, como se verifica
s in(s*2)[1:-1]
en esta respuesta . Las subcadenas se generan de forma recursiva al elegir cortar el primer o el último carácter. Esto es exponencial, por lo que se agota el tiempo en el caso de prueba grande.Casi falla:
El primero no usa Python
in
para verificar subcadenas, por lo que podría adaptarse a otros idiomas.fuente
Pyth -
1098 bytesDevuelve una lista de todas las subcadenas repetidas (que si no hay ninguna, es una lista vacía, que es falsa)
Intentalo
Explicación:
fuente
f}+TTQ.:
funciona desde 1 Byte menos: enlaceCheddar , 60 bytes
Pruébalo en línea!
fuente
@.test(/(.+)\1/)
PHP , 32 bytes
Pruébalo en línea!
PHP , 38 bytes
Pruébalo en línea!
fuente
Python 3 ,
7366 bytes-7 bytes gracias a @LeakyNun
Pruébalo en línea!
fuente
f=lambda s:s and(any(s[:i]*2 in s for i in range(1,len(s)))or f(s[1:]))
lambda s:any(2*s[j:i]in s for i in range(len(s))for j in range(i))
Perl 6 , 11 bytes
Pruébalo
Expandido:
fuente
PHP, 32 bytes
Ejecutar como tubería con
-F
. Lo siento Jörg, no me había dado cuenta de que habías publicado lo mismo .versión no regex,
8482 bytessale con código de retorno
0
para una repetición, agota el tiempo de espera (y sale con error) para ninguno. Ejecutar como tubería con-nr
.asume entrada ASCII imprimible; reemplazar
~
cona&
cualquier ASCII.fuente
JavaScript (ES6), 19 bytes
fuente
/(.+)\1/.test
?/(.+)\1/.test
sí mismo como la presentación completa./(.+)\1/.test
está desatado (no tienethis
).f=/(.+)\1/.test;f('aa')
no funcionaría, por ejemplo. Necesitarías/./.test.bind(/(.+)\1/)
::/(.+)\1/.test
(15 bytes)Pyth, 15 bytes
¡Intentalo!
fuente
V , 6 bytes
Pruébalo en línea!
¡Banco de pruebas!
El programa genera
0
valores falsey y un número entero positivo para valores positivos.(Tenga en cuenta que hubo un pequeño error, así que tuve que ganar 1 byte. Ahora, después de la corrección del error, podré reemplazarlo
.«
por\x82
)Explicación
fuente
Japt, 8
+ 1=98 bytesPruébalo en línea . Salidas
null
para falsedad, y una matriz que contiene todas las cadenas repetidas para verdad.Explicación
fuente
è
para devolver el número de coincidencias y soltar la bandera.null
, lo cual es falso.00
, sale00
. ¿Estás seguro de que esto es verdad en Japt?"00"
es.-Q
bandera "imprime" la salida para que pueda ver que es una matriz que contiene una sola cadena.Cheddar, 16 bytes
Esta es una función. Pruébalo en línea!
fuente