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 primerosnelementos y descarte el siguiente (descarte eln+1th). 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
11es 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] --> [] )

2elimina 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 losnelementos? ¿No (como pensé a primera vista) mantenernelementos donde el primer elemento es elnque 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 deInts, use as(g.pure.(0:))[1,2,3,4,5].Pruébalo en línea!
Cómo funciona
gtoma un argumento de tupla que representa una lista dividida.aes la lista de elementos iniciales que se mantuvo en el paso anterior,_es el elemento que se descartará,bes el siguiente elemento que se utilizará como longitud ycson los elementos restantes.b, se realiza una nueva división y segrepite. De lo contrario, se detieneacomo resultado.g.pure.(0:)comienza todo llamandogcon la tupla([],0:l), dondelestá la entrada y0se descarta de inmediatog.pureaquí usa laApplicativeinstancia 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>queEscapeobviamente. 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
outputcon 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
"0registro para almacenar el entero actual (y el salto de línea, muy importante). Por lo tanto, el comando@0permite saltarnlíneas (llamarnal 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"0valor del registro es igual0, entonces@0saltará una línea (debido al salto de línea), no0como 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
0es incrementar siempre el número entero antes de tirarlo, y disminuirlo justo después. Por lo tanto, el@0comando saltarán+1líneas (nes el número entero actual que se ha incrementado).kEntonces 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+1lí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...qy 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;Qhace 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.Genericagregarlo al conteo de bytes. Pero supongo que no es diferente de usar una matriz.usingsi 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.ies el índice de la cantidad de cosas sobre las que se debe saltar (valor predeterminado1) ydes 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