¡Ayuda! Parece que tengo un eco molesto en algunos de mis arreglos, y me gustaría deshacerme de él. Cuando esto ocurre, la matriz original se repite en algún lugar en el medio, lo que hace que los valores se agreguen entre sí.
Por ejemplo, la matriz [ 422, 375, 527, 375, 859, 451, 754, 451 ]
contiene un eco de sí mismo así:
[ 422, 375, 527, 375, 859, 451, 754, 451 ] <-- array with echo (input)
[ 422, 375, 105, 0, 754, 451 ] <-- original array (output)
[ 422, 375, 105, 0, 754, 451 ] <-- echo of original array
Ejemplo 2
[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ] <-- input
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ] <-- output
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]
También es posible que no haya eco en la matriz, en cuyo caso devolverá la matriz original:
Ejemplo 3:
[ 623, 533, 494, 382 ] <-- input
[ 623, 533, 494, 382 ] <-- output
Reto:
Dado un conjunto que puede contener un eco, elimínelo y devuelva el conjunto sin un eco.
Entrada:
- Una matriz, lista, cadena delimitada, tarjetas perforadas o su equivalente adecuado para la plataforma, que contiene tres o más enteros, en el rango de con al menos un elemento .
- El eco no puede comenzar en el primero o después del último elemento.
- El eco solo se producirá una vez o nada en la entrada.
Salida:
- Una matriz, lista, etc. de enteros , con el eco eliminado.
- Si no hay eco, devuelva la matriz original.
Reglas y puntuación:
- Este es el código de golf , por lo que gana la respuesta más corta en bytes para cada idioma.
- Se aplican las reglas estándar y las reglas de E / S predeterminadas .
- Lagunas prohibidas (por supuesto).
- Proporcione un enlace con una prueba para su código ( TIO.run , etc.).
- Se recomienda encarecidamente una explicación clara de su respuesta.
Casos de prueba:
Con eco:
[ 422, 375, 527, 375, 859, 451, 754, 451 ]
[ 422, 375, 105, 0, 754, 451 ]
[ 321, 526, 1072, 899, 6563, 798, 7038, 3302, 3032, 3478, 1806, 601 ]
[ 321, 526, 751, 373, 5812, 425, 1226, 2877, 1806, 601 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 7109, 4171, 5349, 2675, 3056, 4702, 4229, 1726, 5423, 6039, 8076, 6047, 7088, 9437, 4894, 1946, 7501, 5331, 3625, 5810, 6289, 2858, 6610, 4063, 5565, 2200, 3493, 4573, 4906, 3585, 4147, 3748, 3488, 5625, 6173, 3842, 5671, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 4330, 3748, 363, 135, 2758, 3299, 1674, 1336, 4834, 2486, 4087, 1099, 4098, 4942, 2159, 460, 4400, 4106, 1216, 3257, 1638, 2848, 3616, 3554, 1605, 490, 1308, 2773, 3322, 3284, 4037, 2779, 423, 4986, 2540, 298, 1403, 2555, 390, 589, 3553, 3989, 4948, 2990, 4495, 2735, 1486, 3101, 1225, 2409, 2553, 4651, 10, 2994, 509, 3960, 1710, 2185, 1800, 1584, 301, 110, 969, 3065, 639, 3633, 3544, 4268 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 49, 382, 53, 911, 166, 18, 635, 213, 113, 718, 56, 811, 67, 94, 80, 241, 343, 548, 68, 481, 96, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 24, 12, 52, 125, 154, 3, 567, 198, 25, 370, 1, 786, 12, 15, 68, 15, 88, 348, 55, 25, 55, 79, 12, 226, 255, 200, 13, 456, 41 ]
[ 1, 3, 2 ]
[ 1, 2 ]
[ 0, 1, 3, 2, 0 ]
[ 0, 1, 2, 0 ]
Sin eco:
[ 623, 533, 494, 382 ]
[ 623, 533, 494, 382 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 1141, 1198, 3106, 538, 3442, 4597, 4380, 3653, 1370, 3987, 1964, 4615, 1844, 5035, 2463, 6345, 4964, 4111, 5192, 8555, 5331, 3331, 4875, 6586, 5728, 4532, 5972, 2305, 3491, 6317, 2256, 2415, 5788, 4873, 6480, 2080, 5319, 4551, 6527, 5267, 4315, 2178, 2615, 5735, 5950, 6220, 7114, 6259, 5000, 4183, 6822, 6927, 7150, 8003, 5603, 3154, 8231, 5005, 5743, 6779, 4530, 4029, 5336, 6105, 4777, 6183, 6838, 5725, 6819, 8584, 3142, 3840, 3291, 4284, 2933, 4859, 2906, 5176, 2853, 2110, 2048, 4389, 4501, 2267, 2704, 431, 1495, 2712, 3008, 187, 3487, 630 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 4791, 1647, 480, 3994, 1507, 99, 61, 3245, 2932, 8358, 6618, 1083, 5391, 3498, 4865, 1441, 3729, 5322, 5371, 6271, 2392, 1649, 5553, 9126, 3945, 2179, 3672, 2201, 4433, 5473, 4924, 6585, 6407, 3862, 6505, 1530, 5293, 4792, 6419, 6739, 3258, 3839, 3891, 7599, 2576, 5969, 5659, 6077, 5189, 1325, 4490, 5694, 6567, 6367, 5724, 5756, 6450, 5863, 4360, 2697, 3100, 3779, 4040, 4653, 1755, 3109, 2741, 3269 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 235, 121, 52, 1249, 154, 26, 5672, 1975, 482, 3817, 532, 9104, 1661, 171, 6347, 2124, 1122, 7175, 558, 8101, 667, 934, 798, 2404, 3424, 5479, 672, 4808, 956, 789, 123, 2255, 2549, 200, 126, 4562, 41 ]
[ 1, 1, 1, 1, 1 ]
[ 1, 1, 1, 1, 1 ]
[1, 2, 2, 2, 1]
:; Salida:[1, 1, 1, 1]
vs.[1, 2, 1]
[1, 2, 3, 1, 2, 3]
,[1, 2, 3, 0, 1, 2, 3]
,[0, 1, 3, 2, 0]
? Las respuestas actuales no están de acuerdo con todas estas entradas.[1, 1, 1, 1]
vs.[1, 2, 1]
) son aceptables. Originalmente tenía una regla sobre cuál elegir, pero la quité en el cajón de arena porque parecía aplicarse solo a un pequeño número de casos extremos.[0, 1, 3, 2, 0]
debería ser[0, 1, 2, 0]
- He agregado a los casos de prueba. Una respuesta esperada en los otros dos podría ser[1, 2, 3]
que no consideraría esos casos de prueba válidos ya que de acuerdo con las reglasthe original array repeats itself somewhere in the middle
.[0,0,0]
(o cualquier0
matriz de todos los tamaños ) representa un eco de algo o si[0,0,0]
(sin eco) también sería una respuesta válida para este caso especial, ya que simplemente no hay suficiente información para determinar qué está. Actualizaré las reglas para restringir que esto sea una entrada válida, ya que eso no invalidará ni alterará ninguna respuesta existente.Respuestas:
MATL , 16 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
División polinómica para la victoria!
fuente
Haskell , 167 bytes
Primero es importante notar que si hay un eco presente, entonces la matriz de entrada es una convolución de otra matriz con alguna matriz de la forma
[1,1],[1,0,1],[1,0,0,1],...
.Esto significa que solo tenemos que verificar esto para todas estas matrices. Pero la convolución / deconvolución discreta es lo mismo que la multiplicación polinómica / división larga, por lo que esta es solo una implementación que usa polinomios, cada vez que devuelve el cociente si es posible.
Un truco que acortó todo un poco fue, además de las matrices anteriores, también verificar
[1]
como un caso base, porque si ninguna otra matriz funciona, la deconvolución[1]
funcionará y devolverá el polinomio original.Pruébalo en línea!
fuente
JavaScript ,
211171145 bytesPruébalo en línea
40 bytes de Kevin Cruijssen
Otros 26 bytes de Arnauld
Mi primera respuesta de golf de código, invalida las posibles compensaciones y devuelve la matriz original o la nueva dependiendo de lo que encuentre. Si alguien sabe cómo hacerlo más corto, por favor hágamelo saber, parece un juego divertido.
fuente
++
, cambiando&&
a&
en el primer control, cambiando tanto.toString()
a+''
, etc.) Tengo el código de abajo a 181 bytes . Si aún no los ha visto, puede ser interesante leer los Consejos para jugar golf en JavaScript y los Consejos para jugar golf en todos los idiomas . :)function q(s)
puede sers=>
): 171 bytes . ¡Disfruta tu estancia! :)Haskell,
112111110 bytesPruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
13112912011910298979695 bytesPruébalo en línea!
-1 byte gracias a attinat : podemos escribir en
L=Tr[1^#]
lugar deL=Length@#
cuando el argumento es una lista de números.Explicación del código: iterar a través de la contracción
d
(diferencia entre las longitudes de entrada y salida). Para cada longitud de la lista de salida, construya una lista de incógnitasv={x[1],x[2],...,x[L-d]}
y agréguela a sí misma con relleno izquierdo y relleno derecho con longitudL
(PadLeft[v,L]+PadRight[v,L]
), luego establezca esta suma igual a la lista de entrada y resuelva las incógnitasx[1]...x[L-d]
. Elija la solución más corta, que es la última generada: solo siga sobrescribiendo la variablew
cada vez que encuentre una solución.Versión sin golf:
fuente
Tr[1^#]
lugar deLength@#
Jalea ,
2524 bytesPruébalo en línea!
Un enlace monádico que toma y devuelve una lista de enteros. Técnicamente, los resultados exitosos se anidan en otras dos listas, pero cuando se ejecuta como un programa completo, la salida implícita a stdout ignora las listas redundantes.
fuente
Python 2 ,
113123128127123122 bytesPruébalo en línea!
1 byte thx a TFeld ; y 1 byte gracias a Sebastian Kreft .
En cada llamada a
f
, construimos un eco potencial de longitudlen(a)-i
. La primera parte son solo los primerosi
bytes de a; el resto se calcula de modo que la 'suma de eco' sea correcta para la sección 'superpuesta' de la suma de eco (es decir, la suma de eco es correcta hastaa[:-i]
).Luego, la comparación muy corta, sin golf, da:
fuente
e+=[v-e[-i]]
puede sere+=v-e[-i],
i<=len(a)/2
Wolfram Language (Mathematica) , 93 bytes
Pruébalo en línea!
Devuelve el eco más corto presente en la lista.
fuente
{1,1,1}
y otra vez{1,0,1}
.{1,1,1}
no hay eco, debe devolver la matriz original. Porque{1,0,1}
diría que el eco es{1}
pero admito que no está claro cuáles son las reglas.PHP , 124 bytes
Pruébalo en línea!
Explicación:
fuente
Python 3 , 111 bytes
Pruébalo en línea!
La solución toma algunas ideas de la solución de @Chas Brown , como la estructura recursiva y la construcción de la matriz de salida. Mientras tanto, también realiza algunos cambios en los criterios de evaluación, así como poner el bucle for en una expresión generadora para permitir una solución de una sola línea. La versión sin golf se muestra a continuación. Aquí, la matriz
out
se calcula hasta el final de la matriz de entrada y luego verificamos si sus últimosl
elementos son todos cero. Si es así, los primeroslen(arr)-l
elementos se devuelven como respuesta si todos ellos no son negativos.Versión no recursiva, sin golf
Pruébalo en línea!
fuente
Carbón , 62 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Supongamos que no hay eco.
Pruebe todos los puntos de inicio posibles de eco. Nota: es posible que haya leído mal la pregunta y no esté probando suficientes tamaños de eco, en cuyo caso
⊘
no sería necesario.Comience con una matriz de ceros del mismo tamaño que el punto de inicio del eco.
Para cada elemento en la matriz original, reste el elemento en la matriz de eco cíclicamente. Cada elemento en la matriz de eco genera así la suma alterna de los elementos que se distancian.
Si todas las sumas alternas son cero, guárdelo como un posible punto de inicio. (Entonces, si hay más de una posibilidad, se usa el punto de inicio más grande posible).
Construya la matriz de eco restando elementos después del punto de inicio del elemento apropiado previamente calculado.
Transmitir a cadena para salida implícita en líneas separadas.
fuente