Tarefa
Um teatro tem 10 linhas, marcadas A
para J
de frente para trás, e 15 assentos em cada linha, numerados de 1 a 15 da esquerda para a direita.
O programa usa as seguintes regras para escolher os melhores assentos.
- Regra 1: Todos os assentos em uma reserva devem estar na mesma fila, próximos um do outro.
- Regra 2: Os assentos devem estar o mais próximo possível da frente e, depois, o mais próximo possível da esquerda (letra mais baixa e número mais baixo)
Escreva uma função que considere o número de tickets desejados como uma entrada inteira ( n
) e produz os melhores assentos disponíveis em uma lista de comprimento n
.
Seu programa deve:
- Saída
-1
se 1> Entrada ou Entrada> 15 * - Saída
-1
se os assentos não estiverem disponíveis * - Tem uma função
B(n)
que o usuário pode usar para inserir o número desejado de assentos.
* Você pode imprimir o -1 em uma lista se isso facilitar
Exemplos
I / O
A chamada B(5)
em uma nova matriz deve retornar A [A1, A2, A3, A4, A5]
chamada B(2)
depois disso deve retornar A [A6, A7]
chamada B(10)
depois disso deve retornar A [B1, B2, ... B9, B10]
chamada B(-1)
sempre deve retornar-1
Solução sem golfe 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
Respostas:
JavaScript - 172
A função em si é 172:
Entrada:
Resultado:
fonte
Javascript ( ES6 ) -
13012710710198Demonstração aqui: http://jsfiddle.net/tBu5G/
Algumas idéias retiradas de @ edc65
fonte
n=0
Haskell, 129
Alguns ajustes tiveram que ser feitos para tornar isso uma função em Haskell:
b
retorna um par: os ingressos (se possível) e o novo estado do teatro.t
é o estado inicial do teatro, com todos os tickets não vendidos. Além disso, o retorno-1
não era natural para Haskell, portanto, se nenhum ticket puder ser emitido para uma solicitação, a lista vazia será retornada para os tickets.fonte
APL (75)
Teste:
Explicação:
T←10 15⍴0
:T
é uma matriz de 15 por 10 que mantém o estado do teatro (0 = livre)B←{
...}
: a função(⍵∊⍳15)
: if⍵
é um membro do conjunto de números inteiros de 1 a 15,∨/Z←,T⍷⍨⍵/0
: eT
contém⍵
zeros em uma linha (armazenando possíveis pontos de partida emZ
),:
: então:(⊃Z/,⍳⍴T)
: selecione possíveis coordenadas de início e escolha a primeira,∘+¨1-⍨⍳1⍵
: adicione⍵-1
mais posições à direita da coordenada inicialP←
: armazene as coordenadas emP
{⎕A[⍺],⍕⍵}/¨
: formata as coordenadasT[P]←
: armazene as coordenadas formatadas em seus locais emT
. (quaisquer valores diferentes de zero em T serão suficientes)+
: retorna o resultado, que é as coordenadas formatadas (o resultado de uma atribuição é tácito por padrão)⋄¯1
: caso contrário, retorne¯1
.fonte
Javascript (E6) 99
103 113 121Na verdade, você só precisa armazenar um número para cada linha
Teste
Ungolfed
fonte
JavaScript (ECMAScript 6 Draft) -
969591 caracteresUma solução recursiva:
Versão 1
Versão 2:
(Obrigado a nderscore pela inspiração para salvar 1 caractere)
Versão 3:
(Graças a nderscore )
Explicação:
fonte
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)
deve 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 bytesExemplos
Como funciona
fonte
CoffeeScript -
171150149Suspeito que Ruby ou Perl superem isso logo.
JavaScript equivalente / explicação :
Para quem não conhece o CoffeeScript.
Experimente online .
fonte
All seats in one booking must be in the same row, next to each other.
Cobra - 309
Isso deve ser feito, mas na verdade não consigo acessar um compilador por algumas horas; portanto, atualizarei mais tarde, se necessário.
fonte
C # - 289
Primeira tentativa de código de golfe.
Sem golfe
fonte
K, 140
Sem dúvida, existem inúmeras melhorias a serem feitas aqui
fonte
C ++ - 257
Também uma primeira tentativa de golfe.
Como to_string não estava funcionando com meu compilador, toS é definido como
E como uma pequena interface
fonte
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 golfe:
Código não destruído:
Eu teria escrito algumas anotações em um comentário sobre a solução da GoldenDragon em vez de criar a minha, mas minha reputação não permite.
fonte