Explicación
Se pueden barajar dos cadenas intercalando sus letras para formar una nueva cadena, al igual que dos pilas de cartas se pueden barajar para formar una sola pila.
Por ejemplo, las cadenas HELLOy WORLDse pueden mezclar para formar HWEOLRLLOD, o HEWORLLLDO, o quizás simplemente HELLOWORLD.
Es no una reproducción aleatoria si la orden original de las cartas no se conserva. Por ejemplo, la Dde WORLDque no puede aparecer siempre antes del Rdespués de haber sido barajadas. Esto significa que EHLLOWRDLO, por ejemplo, no es una mezcla de , HELLOy WORLDaunque contiene todas las letras originales.
Una cadena es una mezcla de gemelos si se puede formar barajando dos cadenas idénticas. Por ejemplo, ABACBDECDEes una mezcla de gemelos porque puede formarse barajando ABCDEy ABCDE. DBEACBCADEno es una mezcla de gemelos porque no se puede formar mezclando dos cadenas idénticas.
Detalles del programa
Dada una cadena de entrada, salida 0si no es una combinación aleatoria de gemelos, y salida de una de las cadenas gemelas si es una combinación aleatoria de gemelos.
Puede suponer que la cadena de entrada tiene una longitud inclusive entre cuatro y veinte caracteres y está compuesta completamente por caracteres alfabéticos en mayúsculas. Debería poder ejecutarse en un tiempo razonable, digamos, menos de 10 minutos.
Este es el código de golf, por lo que gana la solución más corta.
Ejemplo de E / S
> ABACBDECDE
ABCDE
> DBEACBCADE
0
> FFFFFF
FFF
> FFGGG
0
> ABBA
0
> AABB
AB
> AABAAB
AAB
Tengo un ejemplo (no golfizado) de implementación .
fuente

that the input string has a length inclusively between four and twenty characters, y no me digas "¡nunca confíes en la entrada del usuario!", "¡Nunca confíes en las especificaciones!"FFGGGpara que sea consistente.Respuestas:
Haskell, 114
Sin golf:
Explicación:
La mayor parte del trabajo se realiza en la
partitionsfunción. Funciona generando recursivamente todas las particiones(a, b)de la cola de la lista, y luego usando la mónada de la lista para anteponer el elemento inicialxa cada una de ellas y reunir todos los resultados.findMatchfunciona filtrando esta lista para que solo permanezcan las particiones donde las subsecuencias son iguales. Luego devuelve la primera subsecuencia en la primera partición. Si no queda ninguno, la lista está vacía, por lo que"0"se devuelve el agregado al final.mainsolo lee la entrada, la alimenta a través de estas dos funciones y la imprime.fuente
R, 113 caracteres
Sin golf (y en su lugar, una función que toma la cadena):
La solución se basa en la
combnfunción que genera todas las combinaciones de índices como columnas en una matriz.applyluego aplica una función a cada columna (dimensión2) en la matriz y devuelve un vector de cadenas o ceros.maxluego encuentre la cadena más grande (que triunfa 0).Una característica interesante en R es la capacidad de seleccionar un subconjunto de un vector dado un vector de índices, y luego seleccionar el complemento de ese subconjunto negando los índices:
x[i] == x[-i]fuente
Mathematica, 87
Esto se basa directamente en la publicación de hammar, pero es de esperar que sea lo suficientemente distinto como para merecer publicación.
Prueba:
{"ABCDE", 0, "FFF", 0, 0, "AB", "AAB"}fuente
re
usando la búsqueda recursiva en profundidad primero
Puedo hacerlo más rápido con una
int i = min(a.length,b.length);if(a[0..i]!=b[0..i])return "0";cláusula de guardiafuente
void main(){writeln(c("ABCADABCAD"));}, solo una versión diferente de D, mi culpa, ¿algo más? ¿Qué pasa con "ABCABCA"?Ruby, 89 caracteres
Este código implementa un algoritmo de búsqueda recursiva simple. La entrada debe darse en STDIN.
fuente
Perl, 68 caracteres
Se supone que la cadena de entrada está en el
$_variable, la salida es el valor de la expresión. Las nuevas líneas finales en la entrada se ignoran. Puede ejecutar esto desde la línea de comando de esta manera:Este código utiliza el motor regexp de Perl (y específicamente su función de ejecución de código incrustada ) para realizar el seguimiento. Básicamente, hace coincidir la cadena de entrada con la expresión regular
^((.+))+$, haciendo un seguimiento de las coincidencias pares e impares en$xy$,, y rechazando la coincidencia al final si las dos no son iguales.fuente
AABAAB?AABAABes un caso fácil para esta solución, ya que el grupo externo solo necesita coincidir dos veces. Me tomó mucho más tiempo lograr que se manejeAABBbien).Python, 168 caracteres
fuente