Un gruppo di macchine è allineato a un segnale di stop a 4 vie in attesa di procedere. Tutti sono confusi su chi deve andare dopo, chi sta andando in quale direzione, ecc. Chiaramente non ottimale.
Il tuo compito è pianificare il traffico allo stop in modo ottimale.
Ricevi come input 4 stringhe di richieste di svolta, una per ciascuna delle quattro direzioni cardinali. Ogni richiesta è Lper sinistra, Sper diritto o Rper destra.
LLSLRLS
SSSRRSRLLR
LLRLSR
RRRLLLL
La prima fila è la formazione all'ingresso nord dell'intersezione. La prima auto in linea desidera svoltare a sinistra (ovvero uscita est). Le righe successive sono per gli ingressi East, South e West in arrivo. Quindi la prima macchina proveniente da ovest desidera uscire a sud.
Il traffico si sposta in una serie di passaggi. Ad ogni passo, è necessario scegliere un sottoinsieme delle macchine in testa alle loro linee per procedere. Le auto scelte non devono interferire tra loro. Due auto interferiscono se escono nella stessa direzione o se devono incrociarsi reciprocamente (date le normali regole di guida a destra). Quindi due macchine opposte che desiderano entrambe andare dritte possono fare lo stesso passo. Quindi possono 4 macchine che desiderano girare a destra. Due macchine opposte possono entrambe girare contemporaneamente a sinistra.
Il tuo compito è pianificare l'intersezione in una serie minima di passaggi. Per ogni passaggio, emettere una linea con le direzioni della bussola delle auto in arrivo elencate. Per l'esempio sopra, la pianificazione minima è di 14 passaggi. Un programma minimo è:
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]
Il tuo programma dovrebbe essere in grado di gestire 50 auto in ogni linea in meno di 1 minuto. L'immissione delle 4 stringhe e l'output del programma possono essere in qualsiasi modo conveniente per la tua lingua.
Vince il programma più breve.
Un esempio più ampio:
RRLLSSRLSLLSSLRSLR
RLSLRLSLSSRLRLRRLLSSRLR
RLSLRLRRLSSLSLLRLSSL
LLLRRRSSRSLRSSSSLLRRRR
che richiede un minimo di 38 colpi. Una possibile soluzione:
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