Если вы раньше не играли в гольф, вот список терминов, связанных с гольфом, которые я использую в этом вопросе.
- Выстрел , также называемый ударом : каждый раз, когда по мячу бьют, это выстрел.
- Отверстие : поле для гольфа разбито на отверстия, цель которых состоит в том, чтобы поразить мяч из одного назначенного места в другое за как можно меньшее количество выстрелов.
- Ти : Где вы начинаете отверстие.
- Булавка или Флаг : Где Вы заканчиваете отверстие
- Fairway , Rough , Water и Green : особенности поля для гольфа, которые влияют на то, как каждый играет в мяч в реальной жизни. (Как они влияют на программу, указано ниже)
Завтра я собираюсь поиграть в гольф, и я обнаруживаю, что иногда мне сложно понять, какой клуб использовать, чтобы попасть в определенный двор. Поэтому я решил записать свои клубы и их дворы за выстрел.
Первое предположение: все отверстия находятся к северу от их тройников.
Все эти дворы измеряют возможности того, как далеко на север перемещается мяч. Мяч будет проходить случайное целое расстояние между границами, указанными для каждого клуба (включительно).
Как мастер игры в гольф, ни один из моих снимков не имеет горизонтального смещения. Это означает, что все мои выстрелы идут по прямой линии прямо на флаге.
Club # Club Yardage
1 Driver 300-330
2 3-Wood 270-299
3 5-Wood 240-269
4 3-Iron 220-239
5 4-Iron 200-219
6 5-Iron 180-199
7 6-Iron 160-179
8 7-Iron 140-159
9 8-Iron 120-139
10 9-Iron 100-119
11 P-Wedge 80-99
12 S-Wedge 50-79
13 L-Wedge 0-49
14 Putter (only on green)
Как человек, который любит программировать, я решаю, что хочу смоделировать игру в гольф и поставить цель, насколько хорошо я хочу заниматься завтра. Однако, как и любой программист-любитель, через десять минут я сдался и попросил помощи по переполнению стека (шучу). Вот еще некоторые данные о курсе.
Второе предположение: дырка география
Все числа, которые описывают расстояния на курсе, являются целыми числами.
Каждое отверстие - это прямая линия. Расстояние по прямой линии между каждым отверстием и штифтом (концом отверстия) составляет
Length
.Дорожки сегменты с длиной , определяемой
flen
. Значение, указанное для,flen
представляет собой диапазон дворов к северу от тройника, где находится фарватер.Водные преграды - это сегменты, длина которых определяется
wlen
, и имеет те же свойства, что иflen
.Зеленый имеет длину, определяемую
glen
.Все части трассы, которые не являются фарватером, водой или зеленью, являются шероховатыми.
Вот диаграмма, описывающая каждую лунку на курсе.
Hole # Length flen wlen glen
1 401 54-390 391-425
2 171 1-165 166-179
3 438 41-392 393-420 421-445
4 553 30-281,354-549 282-353 550-589
5 389 48-372 373-404
6 133 125-138
7 496 37-413 414-484 484-502
8 415 50-391 392-420
9 320 23-258 259-303 304-327
Как играть в гольф (для этой программы)
- Всегда нацеливайтесь точно на флаг.
- Ударьте мяч как можно ближе к булавке, стараясь удержать мяч на фарватере или (предпочтительно) на зеленом поле.
- Когда вы наносите выстрел в воду, ваш следующий выстрел должен быть воспроизведен с того же места, что и выстрел, попавший в воду.
- Как только мяч приземлится на зеленый, можно использовать только клюшку. Если мяч приземляется строго более чем на 5 ярдов от булавки, то я ударяю дважды. В противном случае я ставлю один раз.
- Можно сделать выстрел мимо булавки.
счет
Моя оценка по лунке - это количество выстрелов, которые я делаю, плюс один удар за каждый раз, когда я приземляюсь на неровной поверхности или на воде.
Программа
Хорошо, это было много правил, теперь давайте поговорим о программе.
Курс должен быть определен как указано выше в программе , потому что курс является постоянным. Однако разные игроки в гольф имеют разные расстояния для каждого удара, поэтому вход в STDIN должен представлять собой набор диапазонов ярдов, расположенных в порядке возрастания номера клуба и разделенных запятыми (без пробелов).
Выход должен быть таким, каким я «играю» в гольф. Количество удержания должно быть указано в начале каждой строки , как , Hole #:
где #
находится текущее отверстие. Каждый кадр , который не удар имеет следующий вид: {club,distance of shot,condition of ball,distance to pin}
. Детали снимка должны быть разделены запятыми, но без пробелов в указанном выше порядке. Сами снимки должны быть написаны в порядке их воспроизведения и разделены пробелом. Как только мяч приземлится на грин, программа должна напечатать, сколько я принимаю паттов, в формате {# putts}
. В конце каждой строки количество снимков, сделанных мною в отверстии, должно быть отделено от остальных снимков пробелом и напечатано как(#)
, Каждое отверстие должно быть на отдельной линии и написано по порядку. Наконец, в последней (десятой) строке программы общее количество выстрелов за раунд должно быть напечатано как Total: # shots
.
Не существует установленной «стратегии», которую ваша программа должна принять. Вы можете написать программу с любой стратегией, которую вы хотите. Примеры стратегий включают максимизацию процентной вероятности посадки на грин и увеличение расстояния каждого выстрела до достижения лунки.
ОБРАЗЕЦ ВХОДА
300-330,270-299,240-269,220-239,200-219,180-199,160-179,140-159,120-139,100-119,80-99,50-79,0-49
ОБРАЗЕЦ ВЫХОДА
Hole 1: {Driver,324,Fairway,77} {S-Wedge,70,Green,7} {Two putts} (4)
Hole 2: {6-Iron,162,Water,171} {6-Iron,168,Green,3} {One putt} (4)
Hole 3: {Driver,301,Fairway,137} {8-Iron,131,Green,6} {Two putts} (4)
Hole 4: {3-Wood,288,Water,553} {3-Wood,276,Fairway,277} {3-Wood,291,Green,14} {Two putts} (6)
Hole 5: {Driver,322,Fairway,67} {S-Wedge,62} {One putt} (3)
Hole 6: {8-Iron,120,Rough,18} {L-Wedge,10,Green,8} {Two putts} (5)
Hole 7: {Driver,325,Fairway,171] {6-Iron,170,Green,1} {One putt} (3)
Hole 8: {Driver,306,Fairway,109} {9-Iron,100,Green,9} {Two putts} (4)
Hole 9: {Driver,308,Green,12} {Two putts} (3)
Total: 36 shots
Я признаю, что это довольно амбициозный вызов для первого поста на CG.SE, поэтому я был бы рад рассказать о том, как улучшить этот вызов в комментариях. Спасибо за помощь.
0~299
двора есть фарватер , зеленый от 300~315
двора и вода от 316~330
дворов. Какой клуб будет выбран? Что делать, если вода заменяется грубой?