Если задана строка, в которой первая строка содержит пробелы и один период ( .
«шар»), за которыми следуют строки, содержащие пробелы, косую /
черту ( \
) и обратную косую черту ( ), определите, в какой столбец попадет мяч после падения из своей исходной позиции. , Каждый /
перемещает его влево на 1 столбец, а каждый \
перемещает вправо на 1 столбец.
Пример ввода
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Образец вывода
Мяч начинается в столбце 5, попадает в /
строку 3, а затем в тройки \
в строки 5-7 для конечной позиции:
7
Обратите внимание, что столбцы индексируются 1, в основном для соответствия соглашениям текстового редактора.
Краевые случаи
Если мяч попадает /
в первый столбец, он навсегда застрял в несуществующем столбце 0. Ваша программа должна правильно обработать это, печатая 0
.
Если мяч попадает в любую сторону \/
шаблона, результат не определен. Ваша программа может завершиться без вывода, выполнить бесконечный цикл или напечатать сообщение об ошибке (печатает мое решение -1
), но она не должна печатать что-либо, что может считаться допустимым выводом.
Если мяч попадает в левый слэш по \\
шаблону, он должен оказаться прямо под правым, а не справа от него. Решение, которое я первоначально предполагал, было склонно ошибиться, поэтому не идите по этому пути!
Могут или не могут быть пробелы после .
или последней /
или \
на каждой строке. Ваша программа не должна полагаться на доступность такого дополнения. На аналогичном примечании могут быть или не быть какие-либо строки после первой строки.
Вы можете предположить, что в первой строке будет ноль или более пробелов и ровно один .
. Последующие строки, если таковые имеются, будут иметь ноль или более пробелов и ноль или более косых черт.
Детали реализации
Ваша программа может читать из файла (указанного в качестве аргумента командной строки) или читать из стандартного ввода, для вашего удобства.
Ваша программа должна вывести одно число на стандартный вывод. (Да, завершающий перевод новой строки в порядке. Да, номер может содержать более одной цифры.)
Контрольные примеры
Входные данные:
.
Выход:
1
Обратите внимание, что здесь вводится ровно один байт. Это наименьший случай, с которым вы сможете справиться.
Входные данные:
. \ \ \ \
Выход:
6
Обратите внимание, что после этих слешей нет пробелов.
Входные данные:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Выход:
0
Входные данные:
. / / / \\\ /\\ / \
Выход:
1
Входные данные:
. \ / / \
Выход:
4
Входные данные:
. \ \/\/\/
Выход:
(anything but a nonnegative number)
Заключительные замечания
Этот вопрос аналогичен моделированию компьютера типа "бильярдный шар" (на основе гравитации) , но значительно проще, поэтому, надеюсь, он получит больший интерес.
У меня есть 169-символьное решение в Python. Я уверен, что талантливые игроки в гольф могут разорвать эту пластинку на части. : ^)
Это код-гольф , поэтому самый короткий ответ в символах будет принят в конце месяца!