Introducción
Algunos de ustedes habrán oído hablar del Hilbert's Grand Hotel . El gerente allí ha perdido su lista de dónde se hospedan los invitados, pero aún tiene el orden en el que se registraron. Cada huésped no puede permanecer en una habitación con un número de habitación inferior a su valor y si un invitado se agrega a una tarifa inferior habitación, todos los huéspedes en habitaciones superiores sin espacio vacío entre ellos y el nuevo huésped se desplazan una habitación. ¿Puedes ayudarlo a encontrar dónde se hospedan cada uno de los invitados?
Requisitos
Escriba un programa que reciba una lista ordenada de números naturales como entrada y los coloque en su índice. Si ya hay un valor en ese índice, se desplaza a la siguiente entrada de la lista. Este proceso se repite hasta que se encuentra el primer espacio vacío (0 o indefinido). Cualquier espacio indefinido entre el índice más alto actual y cualquier entrada nueva se llenará agregando 0s. Como se trata del Grand Hotel de Hilbert, no existen habitaciones más altas que el índice ocupado más alto actual.
Entrada y salida
La entrada será una lista ordenada de números naturales (se permite leer a través de cualquier forma de entrada aceptada)
Cada número en la entrada se considera un huésped que llega al hotel y está en orden de llegada
La salida será la disposición final de los invitados (números)
Ejemplos
Entrada: 1 3 1
Salida: 1 1 3
Paso a paso:
1
Cree una habitación en el índice 1 y coloque 1 en ella
1 0 3
Cree habitaciones hasta el índice 3 y coloque 3 en la habitación 3
1 1 3
Cambie el contenido de la habitación 1 hacia arriba una habitación y lugar 1 en la habitación 1Entrada: 1 4 3 1 2 1
Salida : 1 1 2 1 3 4
Paso a paso:
1
Crear habitación en el índice 1 y colocar 1 en ella
1 0 0 4
Crear habitaciones hasta el índice 4 y colocar 4 en la habitación 4
1 0 3 4
Coloque 3 en la habitación 3
1 1 3 4
Cambie el contenido de la habitación 1 hacia arriba una habitación y coloque 1 en la habitación 1
1 2 1 3 4
Cambie el contenido de las habitaciones 2 a 4 hasta una habitación y coloque 2 en la habitación 2
1 1 2 1 3 4
Cambie el contenido de las habitaciones 1 a 5 hacia arriba una habitación y coloque 1 en la habitación 1Entrada: 10
Salida: 0 0 0 0 0 0 0 0 0 0 10
Paso a paso:
0 0 0 0 0 0 0 0 0 10
Crea habitaciones hasta la habitación 10 y coloca 10 en la habitación 10Notas:
Trabajar con 0 indexado está bien y puede insertar un 0 al frente de la salida en ese caso
Las lagunas estándar están prohibidas, el código más corto en bytes gana
fuente
PHP 93 bytes
0 indexado. Utiliza un bucle 2 en 1 que busca al siguiente invitado después de que obtiene un 0 (o una forma nula que va más allá de la sala final actual). Usar como:
Sin golf:
fuente
Haskell , 107 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
144120 bytesAhorró 20B gracias a Arnauld y 11B gracias a Neil
Uso
Puede asignar la función a la variable
f
y la lista debe darse como una matriz. Ejemplo:Salida
La salida también está en una matriz. Dado que Javascript funciona indexado a cero, hay un 0 adicional por adelantado.
fuente
(c+'').split`,`.map(Number)
hacer el trabajo?c.map(n=>n|0)
más que(c+'').split`,`.map(Number)
.map()
no se repite en absoluto en valores indefinidos en la matriz. (Dicho esto, estoy bastante seguro de que hay un camino más corto que el que sugerí).JavaScript (ES6), 86 bytes
El cero inicial en el resultado porque JavaScript está indexado en 0.
fuente
Mathematica, 98 bytes
Función sin nombre que toma una lista de enteros positivos y devuelve una lista de enteros indexados en 0. Toda la
If
función toma una lista parcialmente completada y el siguiente entero para insertar como argumentos. Si el siguiente entero excede la longitud de la lista parcial,PadRight@##~Append~#2
aumenta la lista parcial en consecuencia; de lo contrario,Join[Take@##,{#2},Drop@##/.{a___,0,b__}->{a,b}]]
inserta el siguiente entero en su posición, luego tira el primero que se0
encuentra después de él.Fold[...,{0},#]
aplica esta función repetidamente a la lista original, comenzando con el hotel vacío{0}
, y genera la lista final de hoteles.fuente
JavaScript (ES6), 81
Usando 0 indexación
Menos golf
Prueba
fuente
R, 133 bytes
Para evitar problemas con una mala indexación, relleno con algunos ceros y luego los elimino al final. Quizás esta no sea la mejor solución, pero funciona.
fuente
Pitón,
134125116 bytesVálido para Python 2.7.13 y 3.6.0. Este código funciona mediante el intercambio del valor retenido con el valor contenido en cada índice hasta que el valor retenido sea 0. Si alcanza un índice que aún no está en la matriz, agrega ceros al final de la matriz hasta que la matriz contenga índice. Gracias a Wheat Wizard y xnor por jugar 9 bytes cada uno
fuente
while
yif
no necesitan padres. Puede poner varias declaraciones en una línea separadas por me;
gusta aif(i<d):r.extend([0]*(d-i));i=d
menos que haya un flujo de control en las declaraciones posteriores.