Seja uma lista de números inteiros positivos sem nenhuma ordem específica e que possa conter duplicatas. Escreva um programa ou função que produza uma lista de números inteiros positivos M (cuja ordem não é importante), de modo que a combinação de L e M resulte na menor lista que pode ser totalmente dividida em intervalos idênticos de números inteiros [ 1 .. i ] , onde i é o maior elemento em L
Exemplo
Let L = [5,3,3,2,7]
. O elemento máximo de L
é 7
. A maioria das vezes que um número inteiro específico ocorre é 2
( 3
aparece 2 vezes). Portanto, precisamos gerar a lista M
que permitirá concluir L
para que possamos construir 2
intervalos de números inteiros de 1
até 7
.
Portanto, precisamos produzir M = [1,1,2,4,4,5,6,6,7]
, para que cada número inteiro de 1
a 7
apareça 2
vezes.
Entradas e saídas
- Use qualquer coisa no seu idioma que seja semelhante às listas. A estrutura de dados usada para a entrada e a saída deve ser a mesma.
- A lista de entrada conterá apenas números inteiros positivos.
- A lista de entrada não estará vazia.
- Você não pode assumir que a lista de entrada está classificada.
- A ordem na lista de saída não é importante.
Casos de teste
Input Output
[1] []
[7] [1, 2, 3, 4, 5, 6]
[1, 1, 1] []
[1, 8] [2, 3, 4, 5, 6, 7]
[3, 3, 3, 3] [1, 1, 1, 1, 2, 2, 2, 2]
[5, 2, 4, 5, 2] [1, 1, 3, 3, 4]
[5, 2, 4, 5, 5] [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]
[5, 3, 3, 2, 7] [1, 1, 2, 4, 4, 5, 6, 6, 7]
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
fonte
i
o maior elemento deL
ouM
?i
é o maior elemento deL
, foi um erro de digitação nas especificações.M=[1,1,2,2,3]
porL=[3]
enquanto "mesclar L e M resulta em uma lista que pode ser totalmente dividida em intervalos idênticos de números inteiros [1..i]"?[1,2]
. Vou esclarecer para que fique claro que deve resultar no número mínimo de intervalos.Respostas:
Geléia , 9 bytes
Guardado 1 byte graças a Jonathan Allan . O rodapé chama o link principal, classifica o resultado para corresponder aos casos de teste e formata a saída como uma grade.
Experimente online! ou Confira uma suíte de testes!
Alternativas
Experimente um deles online!
Explicação
fonte
Perl 6 ,
3733 bytes-4 bytes graças ao nwellnhof!
Experimente online!
Bloco de código anônimo que pega um saco e retorna um saco de valores.
Explicação:
fonte
{^.max+1 xx.Bag.values.max∖.Bag}
{^.keys.max+1 xx.values.max∖$_}
salva outro byte.R ,
594948 bytesExperimente online!
fonte
rep
diferente, mas é o mesmo que o seu. Eu mesmo poderia publicá-lo, mas acho que não pensaria nisso a menos que tivesse visto o seu primeiro. Eu desafio você a encontrá-lo!split
mastabulate
é muito melhor!x=max(L<-scan());rep(1:x,1:x-lengths(split(L,c(L,1:x))))
que após mais testes não funciona para casos de teste como7
...Python 2 ,
86838072 bytesExperimente online!
fonte
05AB1E ,
171617 bytes-1 byte graças a @ Mr.Xcoder .
+1 byte após a correção da solução alternativa.
Talvez eu pareço completamente, mas 05AB1E ainda remove todos os elementos da lista b da lista a .. (EDIT: Realmente não ...) Eu sei como remover todas as várias vezes, mas não uma a cada .. (diferença de vários conjuntos)
Definitivamente pode ser jogado. Não estou muito feliz com isso, tbh ..
Vou ver se consigo jogar mais um pouco antes de adicionar uma explicação.EDIT: Adicionado uma explicação ..Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
K a,b Push a without b's
:? Oh, espere, "uma vez cada" ... hmm[1,2,3,4,5,6,7,1,2,3,4,5,6,7]
e[5,3,3,2,7]
comK
resultados[1,4,6,1,4,6]
infelizmente. Ele remove todos os itens em vez de fazer uma diferença de vários conjuntos.¢ZIZLŠŠи
deve salvar 1 byteR ,
5955 bytesUsando o
vecsets
pacote, podemos diminuir o tamanho da resposta. Comgl
podemos obter a saída ordenada. Isso não funciona no TIO. Seguindo o estilo de solução (bastante inteligente) do @ digEmAll sem uma definição de função, isso pode ser considerado uma solução de 55 bytes.fonte
f(c(5,3,3,2,7))
JavaScript (ES6), 98 bytes
Isso acabou sendo muito difícil de jogar abaixo de 100 bytes. Pode haver uma abordagem melhor.
Experimente online!
Quão?
Primeiro, percorremos a matriz de entrada
a[]
para reunir os seguintes dados:M
= elemento mais alto encontrado na matriz de entradam
= maior número de ocorrências do mesmo elementoo[n]
= número de ocorrências den
Observe que isso
o
é definido principalmente como uma função, mas o objeto subjacente também é usado para armazenar o número de ocorrências.Em seguida, usamos a função recursiva
g()
para criar a saída.fonte
Haskell, 72 bytes
Experimente online!
fonte
Braquilog ,
1817 bytesExperimente online!
Guardou 1 byte graças a @Kroppeb.
Explicação
fonte
⌉
vez deot
Java 10, 186 bytes
Experimente online.
Explicação:
fonte
Casca , 12 bytes
Economizou 1 byte graças ao BWO .
Experimente online!
fonte
MATL ,
2421 bytesExperimente online!
fonte
MATL , 14 bytes
Entrada é um vetor de coluna, com
;
como separador.Experimente online! Ou verifique todos os casos de teste (isso exibe
--
após cada saída para que a saída vazia possa ser identificada).Explicação
Considere a entrada
[5; 2; 4; 5; 5]
como um exemplo.fonte
Pitão , 13 bytes
Experimente aqui! ou Confira uma suíte de testes!
fonte
Carvão , 19 bytes
Experimente online! Link é a versão detalhada do código. Seriam 16 bytes se os números inteiros não fossem negativos em vez de positivos. Explicação:
fonte
APL (Dyalog Classic) ,
1817 bytesExperimente online!
usa
⎕io←1
fonte
Prolog (SWI), 211 bytes
Já faz um tempo desde que eu programei no Prolog. Definitivamente pode ser ainda mais jogado, mas eu tenho um exame para estudar hahaha.
Código
Experimente online!
Versão ungolfed
fonte
Clojure, 94 bytes
fonte
C ++, 234 bytes
(As novas linhas no corpo da função são para facilitar a leitura).
A função pega e retorna um vetor de ints. Utiliza
std::map
for finding the max element of the input list and also for counting the occurrences of each distinct element.Explicação:
fonte
Gaia , 12 bytes
Experimente online!
fonte
C (gcc) , 177 bytes
A entrada e a saída são feitas através de stdin e stdout. Ambas as matrizes têm um limite de 2 ^ 15 elementos, mas podem ter até 2 ^ 99 elementos.
Com alguma formatação:
Experimente online!
fonte