La tarea
En este desafío, su entrada es una lista no vacía de enteros positivos, dada en el formato nativo de su idioma. Su salida es esa misma lista, en el mismo formato, con algunos elementos eliminados. Deberá eliminar cada aparición de 1
, cada segunda aparición de 2
, cada tercera aparición 3
, y así sucesivamente. En general, por cada entero positivo N
, deberá eliminar cada N
aparición de N
la lista, comenzando por la N
aparición.
Ejemplo
Considere la lista de entrada
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2]
Primero, eliminamos cada aparición de 1
:
[3,2,6, 6,2,3,2,6,6,6,6, 6,6,3,3,7,2]
Luego, cada segundo caso de 2
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6,3,3,7 ]
Luego, cada tercer caso de 3
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6, 3,7 ]
Los números 4
y 5
no aparecen en la entrada, por lo que se pueden omitir. A continuación, eliminamos cada sexta aparición de 6
:
[3,2,6, 6, 3,2,6,6,6, 6,6, 3,7 ]
Solo hay una aparición de 7
, por lo que también se puede omitir. Por lo tanto, la salida correcta es
[3,2,6,6,3,2,6,6,6,6,6,3,7]
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
[1] -> []
[2] -> [2]
[1,1,1] -> []
[2,2,2] -> [2,2]
[1,1,2,2,2,3,3,3,3] -> [2,2,3,3,3]
[1,2,3,1,2,3,1,2,3,1,2,3] -> [2,3,3,2,3]
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2] -> [3,2,6,6,3,2,6,6,6,6,6,3,7]
[5,4,5,4,3,5,4,5,4,5,4,3,5,4,5,3,3,3,4,5,4,5,4,5,4,3,3,3,5,4] -> [5,4,5,4,3,5,4,5,4,3,5,4,5,3,3,4,5,5,4,4,3,3,5,4]
[6,4,5,8,2,9,3,1,8,5,3,5,5,6,3,5,1,2,3,9,3,5,8,7,5,9,1,3,4,8,2,3,4,7,8,5,8,5,3,1] -> [6,4,5,8,2,9,3,8,5,3,5,5,6,3,9,3,5,8,7,5,9,4,8,2,3,4,7,8,5,8,5,3]
[4,4,9,12,9,4,4,4,12,9,12,9,12,4,12,4,4,9,4,9,12,4,12,4,4,12,4,4,9,12,9,12,9,4,9,12,4,9,12,9,12,9,4,9,12,12,4,4,12,4] -> [4,4,9,12,9,4,4,12,9,12,9,12,4,12,4,9,4,9,12,4,12,4,12,4,4,9,12,9,12,4,9,12,9,9,12,9,4,9,12,12,4,4,12]
[2,2,11,11,11,11,6,2,2,6,6,2,2,2,2,6,11,6,11,11,2,11,2,6,6,11,2,11,6,2,6,6,6,6,6,11,2,11,11,6,6,6,11,6,2,6,2,6,6,2,11,2,2,11,11,11,11,2,6,2] -> [2,11,11,11,11,6,2,6,6,2,2,6,11,6,11,11,2,11,6,11,2,11,6,6,6,6,6,2,11,11,6,6,6,11,6,2,6,6,11,2,11,11,11,11,2,6]
[20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102] -> [20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,101,102,20,21,22,100,102,20,21,22,100,101,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102]
Tabla de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma. Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado, asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
=
compara enteros. Por ejemplo, se[3,2,1]=;\
compara3
con el elemento de[3]
,2
con los de[3, 2]
y1
con los de[3, 2, 1]
dar[1, [0, 1], [0, 0, 1]]
.awk, 10 bytes
Se espera la entrada en STDIN, un número por línea.
Explicación
Mantiene un contador para cada número en una matriz asociativa, imprime solo si el módulo del valor del contador
n
no es cero. La impresión es implícita. Versión larga:fuente
Pyth,
181514109 bytesCreo que este es el primer código que he escrito que tiene cinco referencias variables consecutivas en nueve bytes.
Desearía que la solución de manipulación de matriz (
u.DG%HgxHGH{QQ
14 bytes) no fuera tan larga.Probarlo aquí .
fuente
Python, 57 bytes
fuente
Perl 6 , 28 bytes
Uso:
Verifique que los elementos correctos estén siendo desechados
fuente
En serio,
2217 bytesHex Dump:
Pruébalo en línea
Explicación:
fuente
JavaScript ES6, 34 bytes
Resultó ser lo mismo que el algoritmo Perl de Brad.
Editar: Guardado 2 bytes gracias a @ edc65.
fuente
a=>a.filter(v=>f[v]=-~f[v]%v,f=[])
Mathematica,
403836 bytesEsta es una función sin nombre que toma y devuelve a
List
. Define una función con nombref
cuando se ejecuta (para realizar un seguimiento de los números), pero se encarga de restablecer las definiciones relevantes def
antemano.Explicación
La forma en que funcionan las funciones (o definiciones de funciones) en Mathematica es realmente poderosa. Como en Haskell (por ejemplo), las funciones no solo se pueden sobrecargar y definir para ciertos tipos, sino también para valores individuales (o patrones arbitrarios de argumentos, en realidad). Pero es aún más poderoso que Haskell en que a) estos valores pueden definirse como efectos secundarios durante el flujo de control yb) los valores también pueden redefinirse en cualquier momento. Eso significa que las funciones son en realidad tablas de búsqueda bastante potentes (que opcionalmente pueden calcular el valor buscado en lugar de simplemente almacenarlo).
Si eliminamos la golfitude del código, se vería un poco así:
Entonces, primero, recorremos la entrada y definimos
f[x] = x
, para todosx
en la lista.f
finalmente se usará para realizar un seguimiento de la frecuencia con la que cada número ya ha aparecido en la lista. ¿Por qué no contamos desde0
? El ciclo sobre la lista es aMap
. La expresiónf[x] = y
regresay
(además de almacenar la definición de la función). Por lo tanto, al establecerf[x]
enx
, el mapa evaluará la lista de entrada en sí. Eso ahorra dos bytes porque entonces no necesitamos proporcionarlist
nuevamente explícitamenteSelect
. Comenzar enx
lugar de0
no afecta el cálculo en absoluto, ya que solo nos interesaMod[f[x], x]
.(Normalmente podríamos simplemente usar algo
f[_] = 0
como una definición alternativa para evitar elMap
, pero no sabemos si nuestra función se ha usado antes, lo que dejaría algunos valores previos definidos que interferirían con nuestro conteo).Luego
Select
filtra la lista manteniendo solo aquellos elementos donde la función sin nombre pasó a medida que el segundo argumento produceTrue
. Esa función primero incrementa el valor def[x]
(dondex
está el elemento de la lista actual), para contar las ocurrencias, y luego toma el módulo de conteo resultantex
. Queremos descartar todos los elementos donde esto rinda0
.fuente
CJam, 17 bytes
Solo venció ... J? No estoy seguro de cuáles son mis expectativas para este desafío, de verdad. Tenga en cuenta que
""
es la representación de CJam de una matriz vacía.Pruébalo en línea | Conjunto de pruebas (el último caso es demasiado largo para el enlace permanente)
Explicación
fuente
JavaScript ES6, 55 bytes
Explicación
fuente
J, 18 bytes
Uso:
Método bastante sencillo. Contamos las ocurrencias de un número hasta él y seleccionamos el número solo si el número divide el recuento.
Más explicación viene más tarde.
Pruébelo en línea aquí.
fuente
PowerShell, 56 bytes
Utiliza un truco de matriz de ayuda similar al la respuesta de Rainer P , que desarrollé independientemente pero aparentemente obtuve FGITW'd.
Toma la entrada como una matriz con
param($a)
. Luego creamos nuestra matriz auxiliar$b
como una matriz poblada con ceros utilizando el operador de coma junto con el operador de multiplicación sobrecargado. Esto crea$b
para que sea igual@(0,0,0...0)
a$b.length
igual al número máximo en$a
.(Enchufe rápido para mi respuesta "Muestra tu idioma" donde describo esto en detalle)
El siguiente es nuestro resultado. Realizamos un ciclo sobre cada elemento de nuestra matriz de entrada
$a|%{...}
y cada ciclo verifica unaif
declaración. El condicional incrementa previamente el valor en nuestra matriz auxiliar que corresponde con el elemento actual, luego verifica si es un múltiplo del elemento actual con el operador de módulo. Si es un múltiplo, la%
voluntad es igual a0
falsey, entonces elif
que no se ejecuta. De lo contrario, sacamos el elemento actual.Aprovecha la conversión de texto implícita para ahorrar en el formato de salida. Si una función o programa devuelve varios elementos y guarda los resultados en una variable, PowerShell creará dinámicamente esa variable como una matriz. Ejemplo:
fuente
R,
110989992 BytesEdite la reescritura completa corrige el error con el caso de prueba 2/3 Edite 2 Ahorre 7 bytes gracias a @ Alex-A
fuente
function(a){for(i in 1:max(a))for(j in seq_along(b<-which(a==i)))if(j%%i<1)a[b[j]]=0;a[a>0]}
MATL , 20 bytes
Esto usa la versión actual (10.2.1) del lenguaje / compilador.
Pruébalo en línea!
Explicación
fuente
R, 63 bytes
fuente
C #, 224 bytes
Este código usa la recursividad. Con
using
declaraciones de 224 bytes (160 para el código del método en sí).Pruébalo en línea.
fuente
for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
System.Linq
entonces!l.Any()
es más corto quel.Count<1
, que es más corto quel.Count==0
.w != 0 && w !=1
conw > 1
.C # - 177 bytes
Sin golf
fuente
Mathematica, 63 bytes
Muy interesante para el golf! Ignora el mensaje ocasional que aparece.
fuente
Ruby, 120 bytes
fuente
TI-BASIC, 47 bytes
Esto utiliza el hecho de que, en una calculadora nueva,
L₁
se inicializa y borra. Tenga en cuenta que intentar mostrar una lista vacía en TI-BASIC arroja un error.fuente
APL, 16 caracteres
En inglés:
,\⍵
: vector del vector prefijos hasta el enésimo elemento del argumento+/¨⍵=
: por vector de prefijo, cuente cuántos son iguales al elemento n-ésimo×⍵|
: signos de los mods (es decir: 0 si el resto de la división es 0, 1 de lo contrario)⍵/⍨
: del argumento mantenga solo el elemento donde el mod es 0fuente
Raqueta 179 bytes
Sin golf:
Pruebas:
Salida:
fuente