Боб Боумен
o
/( )\ This is Bob.
L L Bob wants to be an archer.
#############
.
/ \ <--- bow So he bought himself a
(c -)-> <--- arrow nice longbow and is about
( )/ <--- highly focused Bob shoot at a target.
L L
#############
___________________________________________________________________________________________
sky
Bob is a smart guy. He already knows what angle and
velocity his arrow has / will have. But only YOU know
the distance to the target, so Bob doesn't know if he
will hit or miss. This is where you have to help him.
. +-+
/ \ | |
(c -)-> | |
( )/ +++
L L |
###########################################################################################
задача
Ваша задача - нарисовать ASCII-картинку с изображением Боба, попавшего или не попавшего в цель. Для расчета:
- Ваша программа будет получать
arrow_x,angle,velocity,distance
ввод через запятую в любом порядке. - Один символ ASCII равен
1m
. - Первый символ в последней строке имеет координаты
(0,0)
, поэтому земля (отображается как#
) имеет значениеy=0
. - Боб всегда стоит на земле, его
y
положение не меняется. - Там нет макс
y
. Тем не менее, верхушка стрелок должна вписываться в отображаемое изображение. - Все входные данные представлены в виде десятичного целого числа.
- Во время расчета предположим, что стрелка является точкой.
- Начало стрелки - стрелка
>
Боба (см. Выше). Итак, учитываяarrow_x
, вы должны рассчитатьarrow_y
. Левая нога Боба на выходе должна соответствоватьx
координате. стрельбы Боб. distance
этоx
координата цели стопы . (т. е. середина цели).- Все измерения представлены в метрах и градусах соответственно.
- Внимание: стреляющий Боб никогда не отображается, используется только для расчетов! Смотрите ниже для двух действительных выходных Бобов
- Попадание в цель означает, что путь стрелок пересекает одну из двух крайних левых стенок цели (
|
) (то есть (расстояние-1,3) или (расстояние-1,4). Если в какой-то момент стрелка находится в пределах этих 2 м², поместите X вместо стены, в которую она попадает. Цель всегда имеет одинаковую высоту, и только ее позиция x может измениться.). Угловые удары или стрела, падающая с неба на цель, не учитываются. - Применяется стандартное заземление g (9,81 м / с ^ 2).
distance+1
это конец поля, после этого все пропущено и стрелка не должна отображаться.- Если стрелка попадает в цель любым другим способом (
distance-1
и т. Д.), Стрелка не должна отображаться.
скучать
Это пример отрисовки пропавшего Боба (стрелка входит в землю на 34 м, угол 45 °, время в воздухе 10 с, скорость ~ 50 - но есть намного больше возможных входов, чтобы вызвать этот вывод. Просто покажите, что ваша программа использует Обычные формулы для расчета физически «точных» результатов.):
+-+
| |
c\ | |
/( ) v +++
L L | |
###########################################################################################
Хит
Это пример визуализации оценки Боба (стрелка входит в цель (= пересекает ее путь)):
+-+
>--X |
\c/ | |
( ) +++
L L |
###########################################################################################
пример
arrow_x
7.arrow_y
всегда 3.angle
это30°
или0.523598776
радианы.velocity
есть13m/s
.distance
20
Таким образом, чтобы поразить цель, стрелка должна пересечь (19,3)
или (19,4)
. Все остальное будет мисс. В этом случае стрелка войдет в землю (значит, y
будет <1.0
) 12.9358m = ~13m
после 1.149s
.
Лимиты и подсчет очков
- Это код-гольф , поэтому выигрывает самое короткое решение. Там нет бонусов.
- Ваша программа (как и не функция ) должна принимать ввод в формате, описанном выше, дополнительный ввод не разрешен.
- Вам не нужно обрабатывать неправильные / бессмысленные / невозможные вводные данные.
- Выведите на любой кратчайший разумный выход для вашего языка (стандартный, файл, ...).
- Меня не волнует конечный пробел.
- Совет: Ширина вывода равна
distance+2
. Высота естьapex+1
.
The left foot of Bob in the output has to match the x coord. of the shooting Bob.
иSee below for the two valid output-Bobs
Ответы:
Руби, 482
Ungolfed
метод
Основное уравнение здесь:
Примечание: изображение взято с https://en.wikipedia.org/wiki/Trajectory_of_a_projectile
Где,
Что я делаю, так это перебираю числа от 0 до (расстояние -1) и в каждой итерации проверяю, попадает ли стрелка в землю (или цель)
источник