Introdução
Alguns de vocês já devem ter ouvido falar do Hilbert's Grand Hotel . O gerente perdeu sua lista de onde os hóspedes estão hospedados, mas ainda tem a ordem em que fizeram o check-in. Cada hóspede não pode ficar em um quarto com um número de quarto menor que o valor e se um convidado for adicionado a um valor menor. quarto, todos os hóspedes em quartos superiores, sem espaço vazio entre eles e o novo hóspede, mudam para um quarto. Você pode ajudá-lo a encontrar onde cada um dos convidados está hospedado?
Exigências
Escreva um programa que receba uma lista ordenada de números naturais como entrada e os coloque em seu índice. Se já houver um valor nesse índice, ele será deslocado para a próxima entrada na lista. Esse processo se repete até que o primeiro espaço vazio (0 ou indefinido) seja encontrado. Quaisquer espaços indefinidos entre o índice mais alto atual e qualquer nova entrada serão preenchidos adicionando 0s. Como este é o Grand Hotel de Hilbert, não existem quartos maiores que o atual índice ocupado mais alto.
Entrada e saída
A entrada será uma lista ordenada de números naturais (permitida a leitura através de qualquer forma de entrada aceita).
Cada número na entrada é considerado um hóspede que chega ao hotel e está em ordem de chegada.
A saída será o arranjo final dos convidados (números)
Exemplos
Entrada: 1 3 1
Saída: 1 1 3
Passo a passo:
1
Crie uma sala no índice 1 e coloque 1 nela
1 0 3
Crie salas até o índice 3 e coloque 3 na sala 3
1 1 3
Desloque o conteúdo da sala 1 para cima um quarto e coloque 1 no quarto 1Entrada: 1 4 3 1 2 1
Saída : 1 1 2 1 3 4
Passo a passo:
1
Crie uma sala no índice 1 e coloque 1 nela
1 0 0 4
Crie salas até o índice 4 e coloque 4 na sala 4
1 0 3 4
Coloque 3 na sala 3
1 1 3 4
Desloque o conteúdo da sala 1 para cima um quarto e coloque 1 na sala 1
1 2 1 3 4
Desloque o conteúdo das salas 2 para 4 para cima um quarto e coloque 2 na sala 2
1 1 2 1 3 4
Desloque o conteúdo dos quartos 1 para 5 em um quarto e coloque 1 no quarto 1Entrada: 10
Saída: 0 0 0 0 0 0 0 0 0 0 10
Passo a passo:
0 0 0 0 0 0 0 0 0 10 10
Crie salas até a sala 10 e coloque 10 na sala 10Notas:
Trabalhar com 0 indexado é bom e, nesse caso, você pode inserir um 0 na frente da saída
As brechas padrão são proibidas, o código mais curto em bytes ganha
fonte
PHP 93 bytes
0 indexado. Usa um loop 2 em 1 que procura o próximo convidado depois de obter um 0 (ou um formulário nulo que vai além da sala final atual). Use como:
Ungolfed:
fonte
Haskell , 107 bytes
Experimente online!
fonte
JavaScript (ES6),
144120 bytesEconomizou 20B graças a Arnauld e 11B graças a Neil
Uso
Você pode atribuir a função à variável
f
e a lista deve ser fornecida como uma matriz. Exemplo:Saída
A saída também está em uma matriz. Como o Javascript funciona com indexação zero, há um 0 extra na frente.
fonte
(c+'').split`,`.map(Number)
fazer o trabalho?c.map(n=>n|0)
e não(c+'').split`,`.map(Number)
.map()
não itera em valores indefinidos na matriz. (Dito isto, eu tenho certeza que há uma maneira mais curta do que a que eu sugeri.)JavaScript (ES6), 86 bytes
Zero à esquerda no resultado porque o JavaScript é indexado em 0.
fonte
Mathematica, 98 bytes
Função sem nome, obtendo uma lista de números inteiros positivos e retornando uma lista de números inteiros indexada em 0. A
If
função inteira pega uma lista parcialmente concluída e o próximo número inteiro a ser inserido como argumentos. Se o próximo número inteiro exceder o comprimento da lista parcial,PadRight@##~Append~#2
aumentará a lista parcial de acordo; caso contrário,Join[Take@##,{#2},Drop@##/.{a___,0,b__}->{a,b}]]
insere o próximo número inteiro em sua posição e joga fora o primeiro0
encontrado depois dele.Fold[...,{0},#]
aplica essa função repetidamente à lista original, começando com o hotel vazio{0}
e produz a lista final de hotéis.fonte
JavaScript (ES6), 81
Usando 0 indexação
Menos golfe
Teste
fonte
R, 133 bytes
Para evitar problemas com a indexação incorreta, preencho alguns zeros e depois os removo no final. Talvez essa não seja a melhor solução, mas funciona.
fonte
Python,
134125116 bytesVálido para o Python 2.7.13 e 3.6.0. Esse código funciona por meio da troca do valor retido pelo valor contido em cada índice até que o valor retido seja 0. Se atingir um índice ainda não presente na matriz, ele adiciona zeros ao final da matriz até que a matriz contenha esse valor. índice. Agradecimentos ao Wheat Wizard e ao xnor por jogar 9 bytes cada
fonte
while
eif
não precisam de parênteses. Você pode colocar várias instruções em uma linha separadas por;
iguais, aif(i<d):r.extend([0]*(d-i));i=d
menos que haja fluxo de controle nas instruções posteriores.