Étant donné une chaîne dans laquelle la première ligne contient des espaces et un point ( .
, la "balle"), suivie de lignes contenant des espaces, des barres obliques ( /
) et des barres obliques inverses ( \
), déterminez dans quelle colonne la balle atterrira après être tombée de sa position de départ. . Chacun le /
déplace vers la gauche de 1 colonne et chacun le \
déplace vers la droite de 1 colonne.
Exemple d'entrée
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Exemple de sortie
La balle commence dans la colonne 5, frappe la /
ligne 3, puis les trois \
sur les lignes 5 à 7 pour une position finale de:
7
Notez que les colonnes sont indexées 1, principalement pour des raisons de cohérence avec les conventions de l'éditeur de texte.
Cas de bord
Si la balle frappe un /
dans la première colonne, elle est éternellement coincée dans la colonne 0 inexistante. Votre programme devrait gérer cela correctement en imprimant 0
.
Si la balle frappe l'un ou l'autre côté d'un \/
motif, le résultat n'est pas défini. Votre programme est autorisé à se terminer sans sortie, à boucler à l'infini ou à imprimer un message d'erreur (ma solution s'imprime -1
), mais il ne doit imprimer rien qui puisse être perçu comme une sortie valide.
Si le ballon frappe la barre oblique gauche selon un \\
schéma, il devrait se retrouver directement sous la barre oblique droite, pas à sa droite. La solution que j'avais envisagée à l'origine était susceptible de se tromper, alors n'allez pas dans cette voie!
Il peut y avoir ou non des espaces après la .
ou la dernière /
ou \
sur chaque ligne. Votre programme ne doit pas compter sur un tel rembourrage disponible. Sur une note similaire, il peut y avoir ou non des lignes après la première ligne.
Vous pouvez supposer que la première ligne aura zéro ou plusieurs espaces et exactement un .
. Les lignes suivantes, le cas échéant, auront zéro ou plusieurs espaces et zéro ou plusieurs barres obliques.
Détails d'implémentation
Votre programme peut lire à partir d'un fichier (spécifié comme argument de ligne de commande) ou lire à partir d'une entrée standard, à votre convenance.
Votre programme doit sortir un seul numéro en sortie standard. (Oui, une nouvelle ligne de fin convient. Oui, le numéro peut avoir plus d'un chiffre.)
Cas de test
Contribution:
.
Production:
1
Notez que l'entrée ici est exactement d'un octet. Il s'agit du plus petit cas que vous devriez pouvoir manipuler.
Contribution:
. \ \ \ \
Production:
6
Notez qu'il n'y a pas d'espace après ces barres obliques.
Contribution:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Production:
0
Contribution:
. / / / \\\ /\\ / \
Production:
1
Contribution:
. \ / / \
Production:
4
Contribution:
. \ \/\/\/
Production:
(anything but a nonnegative number)
Remarques de clôture
Cette question est similaire à Simuler un ordinateur de type boule de billard (basée sur la gravité) , mais beaucoup plus simple, donc j'espère qu'elle gagnera plus d'intérêt.
J'ai une solution à 169 caractères en Python. Je suis sûr que les golfeurs talentueux ici peuvent déchirer ce record. : ^)
Il s'agit de code-golf , donc la réponse la plus courte en caractères sera acceptée à la fin du mois!
la source
Réponses:
Python, 143B
Utilisation de l'astuce d'indentation espace / tabulation. Je n'ai rien fait de particulièrement intelligent ici.
F
est l'indice courant,l
est la ligne courante;z
n'est pas défini, donc il lève une exception, qui n'est certainement pas un entier positif, qui gère la\/
situation.la source
05AB1E , 37 octets
Entrée sous forme de chaîne multiligne. Sort
\/
si la balle est coincée.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
CJam, 61 octets
Si la règle concernant
\/
est levée (et nous ne sommes pas tenus de la gérer), cela peut être raccourci à 41 octets:la source
Java 10,
213208190 octetsLance une division par erreur zéro lorsque nous sommes coincés à l'intérieur de a
\/
.-5 octets grâce à @EdgyNerd .
Explication:
Essayez-le ici.
la source
Python 3 , 124 octets
Essayez-le en ligne!
Fonctionne également en Python 2.
Explication
la source
J , 95 octets
Essayez-le en ligne!
Renvoie l'infini
_
lorsque la balle se coince. Perte de nombreux octets pour gérer ce cas particulier. Sinon, c'est plus ou moins une simple réduction des lignes. Pourrait sûrement être joué au golf plus loin.la source