Dada una cadena s compuesta de letras minúsculas, como
aabaaababbbbaaba
y un entero positivo n , tal como 4
, genera una longitud n cadena t tal que cuando t se repite a la longitud de s , tienen tantos caracteres en común como sea posible. Para el ejemplo dado, la salida óptima sería aaba
, porque tiene trece caracteres en común con la cadena de destino:
s: aabaaababbbbaaba
t: aabaaabaaabaaaba (aaba)
^^^^^^^^ ^ ^^^^
y no es posible t tiene más. Sin embargo, para aaaaaab
, hay dos salidas posibles: aaaa
y aaba
, cada una de las cuales tiene 6 caracteres en común con la cadena de destino:
s: aaaaaab
t: aaaaaaaa (aaaa)
^^^^^^
s: aaaaaab
t: aabaaaba (aaba)
^^ ^^^^
Cualquiera aaaa
o aaba
puede ser emitido, o ambos si lo desea. Tenga en cuenta que s nunca se repite; el final a
en ambos valores repetidos de t simplemente se ignora.
Casos de prueba
Inputs -> Valid outputs
1 a -> a
1 aa -> a
2 aa -> aa
1 ab -> a b
2 ab -> ab
1 abb -> b
2 abb -> ab bb
2 ababa -> ab
2 abcba -> ab
2 aabbbbb -> bb (ab is not a valid output here)
3 aababba -> aab abb
3 aababbaa -> aab
3 asdasfadf -> asf
3 asdasfadfsdf -> asf adf
2 abcdefghijklmnopqrstuvwxyzyx -> yx
2 supercalifragilisticexpialidocious -> ic ii
3 supercalifragilisticexpialidocious -> iri ili ioi
4 supercalifragilisticexpialidocious -> scii
5 supercalifragilisticexpialidocious -> iapic
2 eeeebaadbaecaebbbbbebbbbeecacebdccaecadbbbaceebedbbbddadebeddedbcedeaadcabdeccceccaeaadbbaecbbcbcbea -> bb be
10 bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd -> ebbbdbeece ebdbdbeece
20 aabbbaaabaaabaaaabbbbabbbbabbbabbbbbabbaaaababbbaababbbaababaaaabbaaabbaabbbabaaabbabbaaabbaaaaaaaba -> aabbbbaaabbabbbaabba
Reglas
- Puede suponer que la entrada solo será una cadena no vacía de letras minúsculas y un entero positivo no mayor que la longitud de la cadena.
- Puede tomar las entradas en cualquier formato estándar y en cualquier orden.
- Puede generar una sola cadena, o más de una en forma de matriz, separadas por nuevas líneas o espacios, etc.
- Su código debe finalizar para cada caso de prueba en menos de 1 minuto en cualquier computadora bastante moderna.
- Este es el código de golf , así que haga su código lo más corto posible.
2 abb -> ba
donde se construye como(b)[ab]a
: los elementos principales(b)
se ignoran,[ab]
coinciden.Respuestas:
Jalea , 11 bytes
Pruébalo en línea!
No esperaba vencer a Dennis en este caso, así que traté de FGITW (después de probar varias posibilidades; hay más de una forma de hacer 11). Llegué más corto, para mi sorpresa.
Toma la cadena y luego la cuenta como argumentos de línea de comandos. Salidas en stdout.
Explicación
Esto utiliza la idea de que la letra en cada posición del patrón debe ser la letra más común correspondiente a esa posición. Podemos encontrar las letras correspondientes a un patrón particular dividiéndolo en grupos del tamaño de un patrón y transponiendo. La razón principal por la que esta solución es tan larga es que Jelly no parece tener un camino corto para encontrar el modo de una lista (hice varios intentos, pero todos tienen al menos seis bytes de longitud).
Jelly , 10 bytes, basado en la solución de @Dennis
Pruébalo en línea!
Esta es una combinación de la solución de @Dennis y la mía; había un modo de cinco bytes en esa solución, que robé para esta solución. (Ya tenía soluciones basadas en
⁸ċ
, pero no podía obtener menos de seis bytes; no había pensado en usarlasÞ
).Explicación
µ…µ€
yǀ
(con el…
de la línea anterior) tienen una longitud de tres bytes (este último necesita una nueva línea) y equivalentes. Normalmente uso el primero, pero el último es más flexible, ya que te permite usar⁸
para mencionar el argumento.Esto hace posible ordenar (
Þ
) por el número de ocurrencias en⁸
(⁸ċ
), luego tomar el último elemento (Ṫ
), para encontrar el modo en solo cinco caracteres.fuente
Mathematica, 51 bytes
La entrada y la salida son listas de caracteres.
También se basa en los modos de las líneas de la transposición. Creo que llamaron al modo incorporado de una lista
Commonest
únicamente para molestar a los golfistas de código.fuente
MostCommon
...Python 3,
99, 7361 bytes-12, gracias a @Rod
La misma idea, pero la reescribió para eliminar la declaración de importación.
Original
Explicación:
fuente
''.join()
para devolver una lista de cadenas''.join(...)
lo haría devolver un generador, no estoy seguro de si eso es salida permitida.Pitón 2, 106
¡Ahora es una respuesta diferente! Estaba pensando en un (casi) revestimiento desde el principio. Ahora incluso más corto, basado en el uso de zip por @Rod.
Gracias a @ L3viathan y @Rod por aclarar sobre el uso de lambdas como respuesta
Pruébalo en línea
Explicación:
combinations(S,N)
crea todas las combinaciones de longitud N a partir de caracteres de Smax()
tener un argumentokey
que toma como función de entrada para usar para comparar elementoslambda s:sum(x==y for x,y in zip(S,s*len(S)))
pasado como tal funciónEsta lambda cuenta el número de caracteres coincidentes en la lista de tuplas, producida por
zip(S,s*len(S))
s
- una de las combinaciones y se multiplica por lolen(S)
que crea una cadena que está garantizada por más tiempo que Szip
crea tuplas de caracteres de cada cadenaS
es*len(S)
ignora todos los caracteres que no pueden coincidir (en el caso de una cadena más larga que otra)Entonces
max
elige la combinación, que produce la suma máximafuente
[]
en la lista la comprensión dentro de las funciones, también lo está usando1 for ... if <cond>
, puede usarlo directamente,<cond> for ...
ya que se usará ensum
, python tomaráTrue
as1
yFalse
as0
f=
(a menos que sea recursiva)JavaScript (ES6),
10410194 bytesGuardado 3 bytes dos veces gracias a @Arnauld. Solución de 97 bytes que funciona con todos los caracteres que no son de nueva línea:
La solución anterior de 104 bytes también funciona con caracteres de nueva línea:
fuente
o
a un nuevo objeto, ¿podría simplemente reutilizar la matriz a la que se pasómap
utilizando su tercer parámetro?(n,s)=>s.replace(/./g,(_,i)=>i<n?[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=0)&&r:'')
debería guardar 3 bytes más. (O 4 bytes usando la sintaxis curry.)Jalea ,
1211 bytesPruébalo en línea!
Cómo funciona
fuente
Pyth, 11 bytes
Toma entradas como
s,n
y salidas como una lista de caracteres.Explicación
fuente
Japt ,
1615 bytesGuardado 1 byte gracias a @obarakon
14 bytes de código + 1 byte para la
-P
bandera. Pruébalo en línea!Sin golfos y explicación
fuente
gJ
cono
Python 2 , 132 bytes
Pruébalo en línea!
fuente
05AB1E , 17 bytes
Pruébalo en línea!
Explicación
fuente
PHP, 245 bytes
Versión en línea
Descompostura
fuente
Haskell, 84 bytes
Ejemplo de uso:
Divida la cadena de entrada en trozos de longitud
n
, transponga y encuentre para cada sublista el elemento más frecuente.fuente
Röda , 68 bytes
Pruébalo en línea!
Es una función que imprime la salida sin arrastrar la nueva línea.
Esto fue inspirado por esta respuesta .
fuente