A tarefa
Nesse desafio, sua entrada é uma lista não vazia de números inteiros positivos, fornecida no formato nativo do seu idioma. Sua saída é a mesma lista, no mesmo formato, com alguns elementos removidos. Você deve remover toda ocorrência 1
, toda segunda ocorrência 2
, toda terceira ocorrência 3
, e assim por diante. Em geral, para cada número inteiro positivo N
, você deve remover todas as N
ocorrências da N
lista, começando com a N
ocorrência.
Exemplo
Considere a lista de entrada
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2]
Primeiro, removemos todas as ocorrências de 1
:
[3,2,6, 6,2,3,2,6,6,6,6, 6,6,3,3,7,2]
Então, a cada segunda ocorrência de 2
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6,3,3,7 ]
Em seguida, cada terceira ocorrência de 3
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6, 3,7 ]
Os números 4
e 5
não ocorrem na entrada, para que possam ser ignorados. Em seguida, removemos a sexta ocorrência de 6
:
[3,2,6, 6, 3,2,6,6,6, 6,6, 3,7 ]
Há apenas uma ocorrência de 7
, para que também possa ser ignorada. Assim, a saída correta é
[3,2,6,6,3,2,6,6,6,6,6,3,7]
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
[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]
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma. Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você deseja incluir vários números no cabeçalho, verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
fonte
=
compara números inteiros. Por exemplo,[3,2,1]=;\
compara-se3
com o elemento de[3]
,2
com os de[3, 2]
e1
com os de[3, 2, 1]
, dando[1, [0, 1], [0, 0, 1]]
.awk, 10 bytes
A entrada é esperada no STDIN, um número por linha.
Explicação
Mantém um contador para cada número em uma matriz associativa, imprime apenas se o módulo do valor do contador
n
não for zero. A impressão está implícita. Versão longa:fonte
Pitão,
181514109 bytesEu acho que este é o primeiro código que escrevi que tem cinco referências consecutivas de variáveis em nove bytes.
Eu gostaria que a solução de manipulação de array (
u.DG%HgxHGH{QQ
14 bytes) não fosse tão longa.Experimente aqui .
fonte
Python, 57 bytes
fonte
Perl 6 , 28 bytes
Uso:
Verifique se os elementos corretos estão sendo jogados fora
fonte
Sério,
2217 bytesHex Dump:
Experimente Online
Explicação:
fonte
JavaScript ES6, 34 bytes
Acabou sendo o mesmo que o algoritmo Perl de Brad.
Editar: salvou 2 bytes graças a @ edc65.
fonte
a=>a.filter(v=>f[v]=-~f[v]%v,f=[])
Mathematica,
403836 bytesEsta é uma função sem nome, que recebe e retorna a
List
. Ele define uma função nomeadaf
quando executada (para acompanhar os números), mas cuida de redefinir as definições relevantes def
antemão.Explicação
O modo como as funções (ou definições de funções) funcionam no Mathematica é realmente poderoso. Como em Haskell (por exemplo), as funções não podem ser sobrecarregadas e definidas apenas para certos tipos, mas também para valores individuais (ou padrões arbitrários de argumentos, na verdade). Mas é ainda mais poderoso do que Haskell: a) esses valores podem ser definidos como efeitos colaterais durante o fluxo de controle eb) os valores também podem ser redefinidos a qualquer momento. Isso significa que as funções são, na verdade, tabelas de pesquisa bastante poderosas (que podem opcionalmente calcular o valor pesquisado em vez de apenas armazená-lo).
Se removermos a golfitude do código, ficaria assim:
Então, primeiro, passamos o mouse sobre a entrada e definimos
f[x] = x
, para todosx
na lista.f
será usado para acompanhar com que frequência cada número já apareceu na lista. Por que não contamos0
? O loop sobre a lista é aMap
. A expressãof[x] = y
retornay
(além de armazenar a definição da função). Portanto, configurandof[x]
parax
, o mapa será avaliado para a própria lista de entradas. Isso economiza dois bytes, porque não precisamos fornecerlist
explicitamente novamenteSelect
. Iniciar emx
vez de0
não afeta o cálculo, pois estamos apenas interessadosMod[f[x], x]
.(Normalmente, poderíamos simplesmente usar algo como
f[_] = 0
uma definição de fallback para evitar issoMap
, mas não sabemos se nossa função já foi usada antes, o que deixaria alguns valores anteriores definidos que atrapalhariam nossa contagem.)Em seguida,
Select
filtra a lista mantendo apenas os elementos em que a função sem nome passou como o segundo argumento geraTrue
. Essa função primeiro incrementa o valor def[x]
(ondex
está o elemento da lista atual), para contar as ocorrências e, em seguida, leva o módulo de contagem resultantex
. Queremos descartar todos os elementos onde isso produz0
.fonte
CJam, 17 bytes
Apenas bata ... J? Na verdade, não tenho certeza de quais são minhas expectativas para esse desafio. Observe que
""
é a representação do CJam de uma matriz vazia.Experimente online | Conjunto de testes (o último caso é muito longo para o link permanente)
Explicação
fonte
JavaScript ES6, 55 bytes
Explicação
fonte
J, 18 bytes
Uso:
Método bastante simples. Contamos as ocorrências de um número até ele e selecionamos o número apenas se o número dividir a contagem.
Mais explicações vêm depois.
Experimente online aqui.
fonte
PowerShell, 56 bytes
Usa um truque auxiliar-matriz semelhante à resposta de Rainer P , que desenvolvi independentemente, mas aparentemente recebi o FGITW.
Recebe entrada como uma matriz com
param($a)
. Em seguida, criamos nossa matriz auxiliar$b
como uma matriz preenchida com zeros usando o operador de vírgula juntamente com o operador de multiplicação sobrecarregado. Isso cria$b
para ser igual a@(0,0,0...0)
com$b.length
igual ao número máximo em$a
.(Plugue rápido para minha resposta "Mostre seu idioma", onde descrevo isso em detalhes)
Em seguida é a nossa saída. Passamos por todos os elementos de nossa matriz de entrada
$a|%{...}
e cada loop verifica umaif
instrução. O condicional pré-incrementa o valor em nossa matriz auxiliar que corresponde ao elemento atual e, em seguida, verifica se é um múltiplo do elemento atual com o operador módulo. Se for um múltiplo, a%
vontade será igual a0
qual é falsey, paraif
que não seja executada. Caso contrário, produzimos o elemento atual.Aproveita a conversão de texto implícita para economizar na formatação da saída. Se uma função ou programa retornar vários elementos e você salvar os resultados em uma variável, o PowerShell criará dinamicamente essa variável como uma matriz. Exemplo:
fonte
R,
110989992 BytesEdite erros de correção de reescrita completos com o caso de teste 2/3 Editar 2 Economize 7 bytes graças a @ Alex-A
fonte
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
Isso usa a versão atual (10.2.1) do idioma / compilador.
Experimente online!
Explicação
fonte
R, 63 bytes
fonte
C #, 224 bytes
Este código usa recursão. Com
using
instruções com 224 bytes (160 para o próprio código do método).Experimente online.
fonte
for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
System.Linq
,!l.Any()
é menor quel.Count<1
, que é menor quel.Count==0
.w != 0 && w !=1
comw > 1
.C # - 177 bytes
Ungolfed
fonte
Mathematica, 63 bytes
Muito interessante para o golfe! Ignore a mensagem ocasional que aparece.
fonte
Ruby, 120 bytes
fonte
TI-BASIC, 47 bytes
Isso usa o fato de que, em uma calculadora nova,
L₁
é inicializado e limpo. Observe que tentar exibir uma lista vazia no TI-BASIC gera um erro.fonte
APL, 16 caracteres
Em inglês:
,\⍵
: vetor do vetor prefixa até o enésimo elemento do argumento+/¨⍵=
: por vetor de prefixo, conte quantos são iguais ao n-ésimo elemento em si×⍵|
: sinais dos mods (ou seja: 0 se o restante da divisão for 0, 1 caso contrário)⍵/⍨
: do argumento mantém apenas o elemento em que o mod é 0fonte
Raquete 179 bytes
Ungolfed:
Teste:
Saída:
fonte