Data una stringa in cui la prima riga contiene spazi e un punto ( .
, la "palla"), seguita da linee contenenti spazi, barre ( /
) e barre rovesciate ( \
), determinare in quale colonna la palla atterrerà dopo essere caduta dalla sua posizione iniziale . Ciascuno lo /
sposta a sinistra di 1 colonna e ciascuno lo \
sposta a destra di 1 colonna.
Input di esempio
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Uscita campione
La palla inizia nella colonna 5, colpisce la /
linea 3, quindi i tre \
sulle linee da 5 a 7 per una posizione finale di:
7
Si noti che le colonne sono 1 indicizzate, principalmente per coerenza con le convenzioni dell'editor di testo.
Custodie per bordi
Se la palla colpisce a /
nella prima colonna, è eternamente bloccata nella colonna inesistente 0. Il tuo programma dovrebbe gestirlo correttamente stampando 0
.
Se la palla colpisce entrambi i lati di un \/
modello, il risultato non è definito. Il tuo programma è autorizzato a terminare senza output, eseguire il loop all'infinito o stampare un messaggio di errore (la mia soluzione -1
viene stampata), ma non deve stampare nulla che possa essere percepito come output valido.
Se la palla colpisce la barra sinistra in uno \\
schema, dovrebbe finire direttamente sotto la barra destra, non alla sua destra. La soluzione che inizialmente immaginavo era incline a sbagliare, quindi non seguire questa strada!
Potrebbero esserci o meno spazi dopo .
l'ultimo /
o l'ultimo o \
su ciascuna riga. Il tuo programma non dovrebbe fare affidamento sul fatto che tale imbottitura sia disponibile. In una nota simile, potrebbero esserci o meno righe che seguono la prima riga.
Puoi presumere che la prima riga avrà zero o più spazi ed esattamente uno .
. Le righe successive, se presenti, avranno zero o più spazi e zero o più barre.
Dettagli di implementazione
Il programma può leggere da un file (specificato come argomento della riga di comando) o leggere dall'input standard, per comodità.
Il tuo programma deve generare un singolo numero sull'output standard. (Sì, una nuova riga finale va bene. Sì, il numero può contenere più di una cifra.)
Casi test
Ingresso:
.
Produzione:
1
Si noti che qui l'ingresso è esattamente un byte. Questo è il caso più piccolo che dovresti essere in grado di gestire.
Ingresso:
. \ \ \ \
Produzione:
6
Si noti che non ci sono spazi dopo queste barre.
Ingresso:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Produzione:
0
Ingresso:
. / / / \\\ /\\ / \
Produzione:
1
Ingresso:
. \ / / \
Produzione:
4
Ingresso:
. \ \/\/\/
Produzione:
(anything but a nonnegative number)
Commenti finali
Questa domanda è simile a quella di Simulare un computer a biliardo (basato sulla gravità) , ma significativamente più semplice, quindi speriamo che possa guadagnare più interesse.
Ho una soluzione di 169 caratteri in Python. Sono sicuro che i talentuosi giocatori di golf qui possono fare a pezzi quel disco. : ^)
Questo è code-golf , quindi la risposta più breve in caratteri sarà accettata alla fine del mese!