Если задана строка, в которой первая строка содержит пробелы и один период ( .
«шар»), за которыми следуют строки, содержащие пробелы, косую /
черту ( \
) и обратную косую черту ( ), определите, в какой столбец попадет мяч после падения из своей исходной позиции. , Каждый /
перемещает его влево на 1 столбец, а каждый \
перемещает вправо на 1 столбец.
Пример ввода
.
/ \ \
/ /
\ \/ \
\ /\
\ /\ \
\ /
Образец вывода
Мяч начинается в столбце 5, попадает в /
строку 3, а затем в тройки \
в строки 5-7 для конечной позиции:
7
Обратите внимание, что столбцы индексируются 1, в основном для соответствия соглашениям текстового редактора.
Краевые случаи
Если мяч попадает /
в первый столбец, он навсегда застрял в несуществующем столбце 0. Ваша программа должна правильно обработать это, печатая 0
.
Если мяч попадает в любую сторону \/
шаблона, результат не определен. Ваша программа может завершиться без вывода, выполнить бесконечный цикл или напечатать сообщение об ошибке (печатает мое решение -1
), но она не должна печатать что-либо, что может считаться допустимым выводом.
Если мяч попадает в левый слэш по \\
шаблону, он должен оказаться прямо под правым, а не справа от него. Решение, которое я первоначально предполагал, было склонно ошибиться, поэтому не идите по этому пути!
Могут или не могут быть пробелы после .
или последней /
или \
на каждой строке. Ваша программа не должна полагаться на доступность такого дополнения. На аналогичном примечании могут быть или не быть какие-либо строки после первой строки.
Вы можете предположить, что в первой строке будет ноль или более пробелов и ровно один .
. Последующие строки, если таковые имеются, будут иметь ноль или более пробелов и ноль или более косых черт.
Детали реализации
Ваша программа может читать из файла (указанного в качестве аргумента командной строки) или читать из стандартного ввода, для вашего удобства.
Ваша программа должна вывести одно число на стандартный вывод. (Да, завершающий перевод новой строки в порядке. Да, номер может содержать более одной цифры.)
Контрольные примеры
Входные данные:
.
Выход:
1
Обратите внимание, что здесь вводится ровно один байт. Это наименьший случай, с которым вы сможете справиться.
Входные данные:
. \ \ \ \
Выход:
6
Обратите внимание, что после этих слешей нет пробелов.
Входные данные:
. / /\\ / \ //\ \/// // \\/ \/\ /\/
Выход:
0
Входные данные:
. / / / \\\ /\\ / \
Выход:
1
Входные данные:
. \ / / \
Выход:
4
Входные данные:
. \ \/\/\/
Выход:
(anything but a nonnegative number)
Заключительные замечания
Этот вопрос аналогичен моделированию компьютера типа "бильярдный шар" (на основе гравитации) , но значительно проще, поэтому, надеюсь, он получит больший интерес.
У меня есть 169-символьное решение в Python. Я уверен, что талантливые игроки в гольф могут разорвать эту пластинку на части. : ^)
Это код-гольф , поэтому самый короткий ответ в символах будет принят в конце месяца!
источник
Ответы:
Python, 143B
Используя трюк с отступом пробела / табуляции. Я не сделал ничего особенно умного здесь.
F
текущий индекс,l
текущая строка;z
не определен, поэтому он генерирует исключение, которое определенно не является положительным целым числом, обрабатывая\/
ситуацию.источник
05AB1E , 37 байт
Ввод в виде многострочной строки. Выходы,
\/
если мяч застрял.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
CJam, 61 байт
Если правило относительно
\/
отменено (и мы не обязаны его обрабатывать), его можно сократить до 41 байта:источник
Java 10,
213208190 байтовВыдает ошибку деления на ноль, когда мы застряли внутри
\/
.-5 байт благодаря @EdgyNerd .
Объяснение:
Попробуй это здесь.
источник
Python 3 , 124 байта
Попробуйте онлайн!
Также работает в Python 2.
объяснение
источник
J , 95 байт
Попробуйте онлайн!
Возвращает бесконечность,
_
когда мяч застревает. Потерял много байтов при обработке этого особого случая. В противном случае это более или менее простое сокращение строк. Конечно, можно играть в гольф дальше.источник