Um monte de carros estão alinhados em um sinal de parada de 4 vias, esperando para prosseguir. Todo mundo está confuso sobre quem deve ir a seguir, quem está indo para o lado, etc. Claramente abaixo do ideal.
Seu trabalho é agendar o tráfego no sinal de parada da maneira ideal.
Você recebe como entrada 4 sequências de solicitações de turno, uma para cada uma das quatro direções principais. Cada solicitação é L
para esquerda, S
reta ou R
direita.
LLSLRLS
SSSRRSRLLR
LLRLSR
RRRLLLL
A primeira linha é a programação na entrada norte do cruzamento. O primeiro carro da fila deseja virar à esquerda (ou seja, sair para leste). As linhas subseqüentes são para as entradas Leste, Sul e Oeste de entrada. Assim, o primeiro carro vindo do oeste deseja sair do sul.
O tráfego se move em uma série de etapas. Em cada etapa, você deve escolher um subconjunto dos carros no início de suas linhas para continuar. Os carros escolhidos não devem interferir entre si. Dois carros interferem se eles saírem na mesma direção ou se precisarem atravessar o caminho um do outro (de acordo com as regras padrão de direção à direita). Portanto, dois carros opostos que desejam seguir em frente podem seguir o mesmo passo. O mesmo vale para 4 carros que desejam virar à direita. Dois carros opostos podem virar à esquerda simultaneamente.
Seu trabalho é agendar a interseção em uma série mínima de etapas. Para cada etapa, imprima uma linha com as direções da bússola dos carros recebidos listadas. Para o exemplo acima, o agendamento mínimo é de 14 etapas. Uma programação mínima é:
N [L from North]
E [S from East]
E [S from East]
E [S from East]
NESW [L from North, R from East, L from South, R from West]
NE [S from North]
EW [R from East]
NESW [L from North, R from East, L from South, R from West]
W [L from West]
EW [L from East, L from West]
NESW [R from North, L from East, R from South, L from West]
NES [L from North, R from East, L from West]
NS [S from North, S from South]
SW [R from South, L from West]
Seu programa deve ser capaz de lidar com 50 carros em cada linha em menos de 1 minuto. A entrada das quatro strings e a saída da programação podem ser de qualquer maneira conveniente para o seu idioma.
O programa mais curto vence.
Um exemplo maior:
RRLLSSRLSLLSSLRSLR
RLSLRLSLSSRLRLRRLLSSRLR
RLSLRLRRLSSLSLLRLSSL
LLLRRRSSRSLRSSSSLLRRRR
o que requer um mínimo de 38 rodadas. Uma solução possível:
E
EW
E
ESW
S
NS
ES
NESW
NSW
ESW
ES
NSW
NS
NS
NW
EW
NSW
NS
EW
NES
EW
NSW
NE
E
NE
EW
E
E
EW
EW
EW
W
ESW
NSW
NSW
NS
NSW
NEW