Вы знаете те деревянные игрушки с маленькими шарикоподшипниками, где цель состоит в том, чтобы перемещаться по лабиринту? Это как то так. Учитывая лабиринт и серию ходов, определите, где мяч заканчивается.
Доска удерживается вертикально, и шар вращается только под действием силы тяжести, когда доска вращается. Каждый «ход» - это вращение (в радианах).
Лабиринт представляет собой просто концентрические круглые стены, где каждая стена имеет ровно одно отверстие во внешнем коридоре, аналогично этому (предположим, что эти стены являются кругами и не заострены):
Как видите, мяч начинается посередине и пытается выбраться. Мяч будет мгновенно провалиться , как только правильная ориентация достигается, даже если это на полпути через вращение. Одно вращение может привести к падению шара через несколько отверстий. Например, вращения >= n * 2 * pi
достаточно, чтобы избежать любого лабиринта.
Для целей игры шар, расположенный в 0.001
радианах отверстия, считается «подходящим» и будет падать в следующий коридор.
Входные данные:
Вход состоит из двух частей:
Лабиринт задается целым числом,
n
представляющим, сколько стен / отверстий в лабиринте. Далее следуютn
строки с одним номером на каждой, обозначающие, где находится проход в следующий коридор.Ходы задаются как целое число,
m
представляющее, сколько ходов было предпринято, после чего (опять же на отдельных строках) следуетm
поворот доски по часовой стрелке в радианах (минус против часовой стрелки).
Все положения прохода даны как 0 rad = up
положительные радианы, идущие по часовой стрелке.
Для приведенного выше примера изображения вход может выглядеть следующим образом:
7 // 7 openings
0
0.785398163
3.14159265
1.74532925
4.71238898
4.01425728
0
3 // 3 moves
-3.92699082
3.14159265
0.81245687
Выходные данные:
Выведите номер коридора, в котором заканчивается шар. Коридоры имеют нулевую индексацию, начиная с центра, поэтому вы начинаете с 0
. Если вы проходите через одно отверстие, вы находитесь в коридоре 1
. Если вы выходите из всего лабиринта, выведите любое целое число>= n
Для ввода образца есть три хода. Первый вызовет падение шарика через два отверстия. Второй не находит отверстия, а третий находит его . Мяч сейчас находится в коридоре 3
, поэтому ожидаемый результат:
3
Поведение не определено для неверного ввода. Допустимый ввод правильно сформирован, с n >= 1
и m >= 0
.
Подсчет очков - стандартный код гольфа, выигрывает наименьшее количество байтов. Стандартные лазейки запрещены. Ввод не должен быть жестко запрограммирован, но может быть взят из стандартного ввода, аргументов, консоли и т. Д. Вывод может быть в консоль, файл, что угодно, просто сделать его вывод где-то видимым.
1
, вы бы просто работали с большими отверстиями, а не прыгали шары в центр отверстия, когда они падают.Ответы:
Perl,
211191С переводом строки и отступом для удобства чтения:
Количество ходов на входе отбрасывается, ed стандартного ввода указывает на конец ходов.
источник
JavaScript 200
РЕДАКТИРОВАТЬ : Вот анимированный пример, доказывающий, что этот решатель работает: http://jsfiddle.net/F74AP/4/
Функция должна вызываться с передачей входной строки.
Вот вызов примера, данного ОП:
Возвращается
3
как задумано.источник