Sei responsabile della costruzione di una nuova autostrada senza pedaggio. Tuttavia, conduce attraverso terre montuose e quindi ha bisogno di numerosi ponti e tunnel. L'autostrada stessa dovrebbe rimanere a un solo livello.
Ingresso
Viene fornita una descrizione ASCII approssimativa dell'aspetto delle montagne sull'input standard, come la seguente:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
Il _
nella prima colonna indica l'inizio e il livello della strada. La catena montuosa è contigua e se l'ultimo segmento sarà un ponte, avrà un numero pari di caratteri.
Si può presumere che una riga di input non sia mai più lunga di 100 caratteri e che non ci siano più di 15 righe. Ogni linea ha la stessa lunghezza che può essere eventualmente imbottita alla fine. La strada non inizia mai all'interno di una montagna o come un ponte. La prima cosa che segue il riquadro della strada nell'input è una pendenza verso il basso o verso l'alto.
Produzione
La produzione è la stessa catena montuosa, tranne per il fatto che ora esiste una strada in cui in precedenza era solo l'inizio. L'output è dato su output standard.
Per questo ci sono numerose regole:
La strada deve iniziare nel punto indicato nell'input e rimanere allo stesso livello per tutto. Per semplificare, abbiamo preparato una serie di tessere stradali premade che assomigliano a questo
_
:_______ \ / \/\/
La strada deve estendersi fino all'estremità della catena montuosa (vale a dire che la lunghezza delle linee di ingresso determina la distanza percorsa dalla strada).
I tunnel devono essere perforati ogni volta che una montagna è dove la strada deve andare. I tunnel attraversano direttamente la montagna e lasciano buchi all'inizio e alla fine (ovvero un tunnel sostituisce il pendio della montagna con una parentesi di chiusura all'inizio e una parentesi di apertura alla fine).
I tunnel lasciano, beh, un tunnel nella montagna che di solito ha un soffitto. Per fortuna, le nostre piastrelle stradali premade possono essere utilizzate per rinforzare il soffitto in modo che il tunnel non collassi (la linea sopra il tunnel deve usare
_
per rinforzare il tunnel):/\ / \ /____\ ___)______(__ \/ \/
Non è necessario rinforzare il tunnel quando la montagna non è abbastanza alta sopra di essa. Mi sembra strano anche per me, ma mi è stato detto che le tessere stradali premade sono abbastanza forti da resistere anche quando sono distanziate in quel caso (nessun soffitto del tunnel viene disegnato quando c'è una pendenza direttamente sopra il tunnel):
/\ /\/__\ ___)______(__ \/ \/
I ponti sono necessari ogni volta che la strada deve attraversare un abisso. Per i ponti corti le tessere stradali premade sono abbastanza forti ma necessitano ancora di un po 'di supporto all'inizio e alla fine del ponte (la prima pendenza verso il basso sotto il ponte e l'ultima pendenza verso l'alto sono sostituite in
Y
modo che vi sia una trave di supporto per il ponte ):_____ Y Y \/
I ponti più lunghi richiedono un supporto aggiuntivo. Un lungo ponte è uno che ha più di sei tessere stradali non supportate di fila. I ponti lunghi hanno bisogno di un pilastro al loro centro. I pilastri sono facilmente costruiti con le nostre travi pilastro predefiniti che assomigliano a questo:
|
. Ogni pilastro ha bisogno di due di questi e si estendono fino al fondo dell'abisso:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Poiché l'ingresso rappresenta solo una parte dell'intera catena montuosa attraverso la quale deve essere costruita l'autostrada senza pedaggio, può terminare bruscamente nel mezzo di un ponte o tunnel. La regola del bridge lungo si applica ancora per il segmento finale e si può presumere che la prima parte oltre l'input dato supporti nuovamente il bridge.
Seguendo le regole sopra otteniamo quanto segue per il nostro input:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
Vince il codice più breve per numero di caratteri. Lo spazio bianco finale nelle righe viene ignorato per la convalida.
Esempio di input 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Uscita campione 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Esempio di input 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Uscita campione 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Nota
Gli spazi finali nell'output vengono ignorati per il confronto con le soluzioni di riferimento.
Condizioni vincenti
Vince il codice più corto, come è consuetudine nel golf. In caso di pareggio, vince la soluzione precedente.
Casi test
Esistono due script di test, contenenti casi di test identici:
Invocazione è in entrambi i casi: <test script> <my program> [arguments]
ad esempio ./test ruby bridges.rb
o ./test.ps1 ./bridges.exe
.
Un'altra nota
Questo compito faceva parte di una gara di golf tenutasi nella mia università durante il 2011-W24. I punteggi e le lingue dei nostri concorrenti erano i seguenti:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
La nostra soluzione (grazie a Ventero) era
- 262 - Rubino