Tarea
Un teatro tiene 10 filas, etiquetadas A
a J
de adelante hacia atrás, y 15 asientos en cada fila, numeradas del 1 al 15 de izquierda a derecha.
El programa utiliza las siguientes reglas para elegir los mejores asientos.
- Regla 1: Todos los asientos en una reserva deben estar en la misma fila, uno al lado del otro.
- Regla 2: Los asientos deben estar lo más cerca posible del frente, luego lo más cerca posible de la izquierda (letra más baja, luego el número más bajo)
Escriba una función que tome el número de tickets deseados como una entrada entera ( n
) y genere los mejores asientos disponibles en una lista de longitud n
.
Tu programa debe:
- Salida
-1
si 1> Entrada o Entrada> 15 * - Salida
-1
si los asientos no están disponibles * - Tiene una función
B(n)
que el usuario puede usar para ingresar el número deseado de asientos.
* Puede generar el -1 en una lista si lo hace más fácil
Ejemplos
I / O
Llamar B(5)
a una nueva matriz debería devolver [A1, A2, A3, A4, A5]
Llamar B(2)
después de eso debería devolver [A6, A7]
Llamar B(10)
después de eso debería regresar [B1, B2, ... B9, B10]
Llamar B(-1)
siempre debería regresar-1
Solución sin golf Python
Theatre = [ [False] * 16 ] * 11
def B(n):
if 0 <= n <= 15:
for i in range(10):
for j in range(15-n+1):
try:
if not Theatre[i][j]:
if not Theatre[i][j + n]:
row = i
start = j
List = []
for q in range(n):
List.append(chr(row + 65) + str(start + q + 1))
Theatre[row][start + q] = True
return List
except:
break
return -1
Respuestas:
JavaScript - 172
La función en sí es 172:
Entrada:
Salida:
fuente
Javascript ( ES6 ) -
13012710710198Demostración aquí: http://jsfiddle.net/tBu5G/
Algunas ideas tomadas de @ edc65
fuente
n=0
Haskell, 129
Hubo que hacer algunos ajustes para que esto funcionara en Haskell:
b
devuelve un par: las entradas (si es posible) y el nuevo estado del teatro.t
es el estado inicial del teatro, con todas las entradas sin vender. Además, regresar-1
no era natural para Haskell, por lo que si no se pueden emitir boletos para una solicitud, se devuelve la lista vacía para los boletos.fuente
APL (75)
Prueba:
Explicación:
T←10 15⍴0
:T
es una matriz de 15 por 10 que contiene el estado del teatro (0 = libre)B←{
...}
: la función(⍵∊⍳15)
: si⍵
es miembro del conjunto de enteros del 1 al 15,∨/Z←,T⍷⍨⍵/0
: yT
contiene⍵
ceros seguidos (almacenando posibles puntos de inicioZ
),:
: luego:(⊃Z/,⍳⍴T)
: seleccione las posibles coordenadas de inicio y tome la primera,∘+¨1-⍨⍳1⍵
: agrega⍵-1
más posiciones a la derecha de la coordenada de inicioP←
: almacenar las coordenadas enP
{⎕A[⍺],⍕⍵}/¨
: formatear las coordenadasT[P]←
: almacena las coordenadas formateadas en sus lugares enT
. (cualquier valor distinto de cero en T servirá)+
: devuelve el resultado, que son las coordenadas formateadas (el resultado de una asignación es tácito por defecto)⋄¯1
: de lo contrario, volver¯1
.fuente
Javascript (E6)
99103113121Realmente solo necesitas almacenar un número para cada fila
Prueba
Sin golf
fuente
JavaScript (borrador de ECMAScript 6) -
969591 caracteresUna solución recursiva:
Versión 1
Versión 2:
(Gracias a nderscore por la inspiración para guardar 1 personaje)
Versión 3:
(Gracias a nderscore )
Explicación:
fuente
B=(n,r=0)=>n>0&r<9?(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1):-1
B=(n,r=0)=>n<1|r>9?-1:(k=B[r]|0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+(B[r]=++k)):B(n,r+1)
debería funcionar.B=(n,r=0)=>n<1|r>9?-1:(B[r]^=0)+n<16?[...Array(n)].map(_=>'ABCDEFGHIJ'[r]+ ++B[r]):B(n,r+1)
GolfScript,
10382 bytesEjemplos
Cómo funciona
fuente
CoffeeScript -
171150149Sospecho que Ruby o Perl superarán esto en poco tiempo.
JavaScript equivalente / Explicación :
Para aquellos que no están familiarizados con CoffeeScript.
Pruébalo en línea .
fuente
All seats in one booking must be in the same row, next to each other.
Cobra - 309
Esto debería hacerlo, pero en realidad no puedo llegar a un compilador durante unas horas, así que lo actualizaré más tarde si es necesario.
fuente
C # - 289
Primer intento de golf de código.
Sin golf
fuente
K, 140
Indudablemente, hay numerosas mejoras para realizar aquí
fuente
C ++ - 257
También un primer intento de golf.
Como to_string no funcionaba con mi compilador, toS se define como
Y como una pequeña interfaz
fuente
vector<int> t(10,0);vector<string> b(int n){vector<string> o;for(int i=0,j;i<10&&16>n&&n>0;i++){if(15-t[i]<n)continue;char l='A'+i;for(j=0;j<n;j++)o.push_back(l+to_string(j+t[i]+1));t[i]+=n;n=0;}if(o.empty())o.push_back("-1");return o;}
C # - 268 bytes
Código de golf:
Código sin golf:
Hubiera escrito algunas anotaciones en un comentario sobre la solución de GoldenDragon en lugar de hacer la mía, pero mi reputación no lo permite.
fuente