Dada una serie de enteros no negativos, su tarea es mantener solo ciertos elementos, como se describe a continuación.
Digamos que la matriz es
[1, 3, 2, 4, 11, 5, 2, 0, 13, 10, 1]
.En primer lugar obtener el primer elemento de la matriz,
n
. Mantenga los primerosn
elementos y descarte el siguiente (descarte eln+1
th). La nueva matriz es[1, 2, 4, 11, 5, 2, 0, 13, 10, 1]
.Luego, agarras el elemento que sigue al eliminado y haces exactamente lo mismo. Volviendo a aplicar el proceso, obtenemos
[1, 2, 11, 5, 2, 0, 13, 10, 1]
Repite el proceso hasta llegar fuera de los límites de la matriz / no quedan elementos en la matriz. Nos detenemos porque
11
es mayor que la longitud de la matriz.Ahora deberías generar el resultado.
La entrada / salida se puede tomar / proporcionar en cualquier forma estándar. La matriz nunca estará vacía, y solo contendrá enteros no negativos. Todas las lagunas estándar están prohibidas.
Este es el código de golf, por lo que gana el código más corto en bytes.
Casos de prueba
Entrada -> Salida [1, 2, 3, 4, 5] -> [1, 3, 4] [6, 1, 0, 5, 6] -> [6, 1, 0, 5, 6] [1, 3, 2, 4, 11, 5, 2, 0, 13, 10, 1] -> [1, 2, 11, 5, 2, 0, 13, 10, 1] [2, 2, 2, 2, 2, 2] -> [2, 2] [1, 2, 3, 1, 2, 3, 1, 2, 3] -> [1, 2] [3, 1, 2, 4, 0] -> [] *
* El último caso de prueba implica 0
, así que decidí publicar el proceso de manera que sea más claro:
[3, 1, 2, 4, 0] --> [3, 1, 2, 0] --> [1, 2, 0] --> [1, 0] --> [0] --> [] )
2
elimina en el primer paso en lugar de3
?[1, 2, 3, 1, 2, 3, 1, 2, 3]
n
", ¿siempre comienzas desde el principio de la matriz para mantener losn
elementos? ¿No (como pensé a primera vista) mantenern
elementos donde el primer elemento es eln
que está evaluando?Respuestas:
Pyth, 18 bytes
Pruébalo aquí.
fuente
JavaScript (ES6), 45 bytes
Casos de prueba
Mostrar fragmento de código
fuente
Haskell , 50 bytes
g.pure.(0:)
es una función anónima que toma y devuelve una lista deInt
s, use as(g.pure.(0:))[1,2,3,4,5]
.Pruébalo en línea!
Cómo funciona
g
toma un argumento de tupla que representa una lista dividida.a
es la lista de elementos iniciales que se mantuvo en el paso anterior,_
es el elemento que se descartará,b
es el siguiente elemento que se utilizará como longitud yc
son los elementos restantes.b
, se realiza una nueva división y seg
repite. De lo contrario, se detienea
como resultado.g.pure.(0:)
comienza todo llamandog
con la tupla([],0:l)
, dondel
está la entrada y0
se descarta de inmediatog
.pure
aquí usa laApplicative
instancia para tuplas (binarias), y con el tipo de resultado([Int],[Int])
coloca convenientemente su argumento como el segundo elemento en una tupla con[]
como primer elemento.fuente
Python 3 , 59 bytes
Pruébalo en línea!
fuente
Haskell , 51 bytes
Pruébalo en línea! Ejemplo de uso:
f [1,2,3,4,5]
.fuente
Java 8, 68 bytes
Esta lambda acepta un mutable
List<Integer>
(soportaremove(int)
, por ejemploArrayList
). La salida es entrada mutada. Asignar aConsumer<List<Integer>>
.Pruébalo en línea
El flujo de control para este problema es muy molesto. Cada iteración tenemos que eliminar un elemento y colocar el elemento en la siguiente posición, y ambas operaciones requieren una verificación de rango (y cualquiera de ellas puede activar la finalización del programa). Una estrategia es llevar a cabo ambas operaciones en una iteración de bucle único, con la actualización del índice protegida por su propia verificación de rango. Otra estrategia, que resultó ser más corta, es alternar entre las operaciones de cada iteración de bucle, que es lo que hace esta solución.
fuente
APL (Dyalog Classic) , 32 bytes
Explicación
Pruébalo en línea!
fuente
Perl 5 , 38 + 1 (-a) = 39 bytes
Pruébalo en línea!
fuente
Haskell, 99 bytes (88 sin sangría)
fuente
VI,
3125 bytes<C-?>
corresponde aControl + ?
, y<Esc>
queEscape
obviamente. Cada uno de estos cuenta para 1 byte (ver meta ).Entrada
El archivo de entrada debe contener 1 entero por línea + 1 línea en blanco al final, por ejemplo:
Podemos ver cada línea del archivo de entrada como un elemento de matriz, como, por ejemplo
1 :: 2 :: 3 :: 4 :: 5 :: []
, en algunos idiomas (caml, por ejemplo).Lanzamiento
Puede iniciar vi con el siguiente comando y escribir la solución trazo a trazo:
También puedes usar este one-liner:
Esto debería producir un archivo
output
con el resultado correcto de un archivo de entradainput
.Explicaciones
Para presentar la solución, primero presentaré una solución de 19 bytes que funcione solo para matrices sin 0. Esta solución utiliza una macro recursiva, utilizada con poca modificación en la solución final:
Explicación de una solución parcial.
El truco aquí es usar el
"0
registro para almacenar el entero actual (y el salto de línea, muy importante). Por lo tanto, el comando@0
permite saltarn
líneas (llamarn
al valor de"0
). Si el salto excede el número de líneas en el archivo, la macro fallará, por lo que el programa se detendrá (fuera de los límites de la matriz, según sea necesario).Pero esta solución no funciona si la entrada contiene
0
. De hecho, si el"0
valor del registro es igual0
, entonces@0
saltará una línea (debido al salto de línea), no0
como nos gustó. Entonces, el siguiente comando (dd
) no eliminará el 0º entero, sino el primero (no es correcto).Una solución válida para manejar el
0
es incrementar siempre el número entero antes de tirarlo, y disminuirlo justo después. Por lo tanto, el@0
comando saltarán+1
líneas (n
es el número entero actual que se ha incrementado).k
Entonces se necesita un comando para ir a la línean
(línea anterior). Usando este truco, se necesita una línea en blanco al final del archivo de entrada, para evitar saltar fuera de la matriz (por lo tanto, terminar el programa), ya que ahora siempre saltamosn+1
líneas, antes de saltar a la línea anterior.Explicación de la solución final.
Escribir el contenido macro dentro del archivo antes de registrarlo permite guardar algunos bytes:
qa...q
y deshacer todos los cambios después de registrarse:let @a="..."
)Ediciones
# 1
fuente
Pyth, 32 bytes
Pruébalo en línea
fuente
#VlQ.(Q@QN;Q
hace el trabajo en 12 bytes, y estoy bastante seguro de que se puede jugar aún másW<Zl=Q+<Q@QZ>Qh@QZ=Z@QZ)Q
(25). Sin embargo, el enfoque de pizzakingme es mucho mejor.#VlQ .(Q@QN)%;Q
. Los comentarios de los golfistas de Pyth serían bienvenidos, ¡todavía estoy aprendiendo también!C # (.NET Core) , 74 bytes
Pruébalo en línea!
Esto toma una lista de entradas y la modifica. He visto algunas respuestas de Java que eluden las importaciones utilizando el nombre completo en la definición del argumento Lambda. Si esto no está permitido, puedo eliminar esta respuesta.
fuente
System.Collections.Generic.List<int>
lugar deusing System.Collections.Generic
agregarlo al conteo de bytes. Pero supongo que no es diferente de usar una matriz.using
si quieres; siempre que la lambda en sí misma no se base en la declaración, no debería incluirla en el recuento de bytes. Personalmente, siempre uso nombres totalmente calificados en el código de prueba solo para que sea claro y fácilmente verificable lo que importa el lambda.R ,
6453 bytesFunción recursiva. Tiene una entrada obligatoria
a
, la lista para omitir.i
es el índice de la cantidad de cosas sobre las que se debe saltar (valor predeterminado1
) yd
es el índice del siguiente elemento después de que se haya eliminado el valor requerido, que también es el índice del elemento que se eliminará. Devuelvenumeric(0)
, un vector vacío, para salida vacía.Pruébalo en línea!
Sin golf:
fuente