Якщо ви раніше не грали в гольф, ось список термінів, пов'язаних з гольфом, я використовую в цьому запитанні
- Постріл , який також називають ударом : Кожен раз, коли м'яч потрапляє, це постріл.
- Отвір : Поле для гольфу розбивається на отвори, в яких мета - вдарити м'яч з одного призначеного місця в інший якомога менше пострілів.
- Трійник : Там, де ви починаєте дірку.
- Шпилька або прапор : там, де ви закінчите лунку
- Фарватер , Груба , Вода та Зелений : Особливості на майданчику для гольфу, які впливають на те, як можна грати в м'яч у реальному житті. (Як вони впливають на програму, вказано нижче)
Я збираюся завтра пограти в гольф, і мені здається, що іноді у мене виникають труднощі з'ясувати, який клуб використовувати, щоб потрапити на певний ярда. Тож я вирішив записувати свої клуби та їхні ярди за постріл.
Перше припущення: всі отвори розташовані на північ від трійника.
Усі ці ярди вимірюють можливості того, наскільки далеко на північ рухається куля. М'яч пройде випадкове ціле відстань між межами, визначеними для кожного клубу (включно).
Як майстер-гольфіст, жоден з моїх пострілів не має горизонтального зсуву. Це означає, що всі мої знімки йдуть по прямій лінії прямо під прапором.
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)
Як людина, яка полюбляє програмування, я вирішую, що хочу моделювати тур з гольфу і поставила собі мету того, наскільки добре я хочу зробити завтра. Однак, як і будь-який аматорський програміст, через десять хвилин я здався і попросив допомоги щодо Stack Overflow (просто жартую). Ось ще кілька даних про курс.
Друге припущення: Географія лунки
Усі числа, що описують відстані на курсі, є цілими числами.
Кожен отвір - пряма лінія. Відстань прямої лінії між кожним отвором і шпилькою (кінцем отвору) дорівнює
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
дворів. Який клуб буде обраний? Що робити, якщо воду заміняють грубою?