Получение удара в колено стрелами, кажется, травма выбора прямо сейчас. В связи с этим я предлагаю следующий вызов для гольфа.
У вас есть искатель приключений, который выглядит так:
O
/|\
/ | \
|
|
/ \
/ \
Учитывая текстовый файл, который содержит один лук (нарисованный как }
символ), набор стен (нарисованный как #
символы) и один искатель приключений, напишите наименьший код, который вычисляет угол и начальную скорость, с которой вы должны стрелять, чтобы поразить он в колене.
Предположим следующее:
- Каждый символ в файле 0,5 х 0,5 метра.
- Стрелка стреляет из центра
}
, то есть смещение0.25m, 0.25m
- Гравитация
10ms^-2
- Стрелка весит
0.1kg
- Стрелка - это точка, т.е. столкновения происходят только тогда, когда координата стрелки входит в один из блоков.
- Максимальная начальная скорость
50m/s
- Угол может быть между 0 (прямо вверх) и 180 (прямо вниз)
- Удар по любой части ноги авантюриста считается ударом по колено.
- Стена (
#
персонаж) занимает целый блок размером 0,5 х 0,5 м. - Стрелка может перемещаться над «вершиной» файла, но ничто не мешает вводу начинаться с верхнего ряда
#
символов. - Вы не можете проникнуть сквозь стены со стрелами.
- Попадание любой другой части искателя приключений не допускается!
- Вы должны показать ошибку, если ударить его в колено невозможно.
Пример ввода:
#
} O
# /|\
/ | \
# |
# |
/ \
/ \
Не стесняйтесь задавать вопросы, если вам нужно :)
code-golf
path-finding
многочлен
источник
источник
#############
...Ответы:
Питон, 599 символов
Процедура
X(K,L)
принимает параболу,K=(a,b,c)
представляющую y = ax ^ 2 + bx + c, и отрезок,L=(a,b,c,d)
представляющий отрезок между (a, b) и (c, d) . Оба препятствия (O
) и цель (T
) представлены в виде отрезков. Все расстояния масштабируются в 2 раза.Пример ввода дает следующую траекторию (по умолчанию минимальная скорость):
Вы можете повернуть вспять,
R
чтобы получить максимальную скорость пути:источник
8**5
чтобы получить 64kb)w=v+1
и замен 3 экземпляровv+1
сw
. Я не пишу много кода на Python, поэтому могу ошибаться.