Я хочу спробувати нову форму кодового гольфу тут. Подібно до бонусів, не всі частини завдання повинні бути виконані, але кожна відповідь має реалізувати підмножину певного розміру (і є ядро, яке має відповідати кожна відповідь). Тому, крім гольфу, цей виклик також включає вибір набору функцій, які добре поєднуються.
Правила
Kingdom Builder - це настільна гра, що грається на шестигранній сітці. Дошка складається з чотирьох (рандомізованих) чотирикутників, у кожному з яких є 10 шістнадцяткових комірок 10x10 (тому повна дошка буде 20x20). Для цілей цього виклику кожна шестигранна клітина містить або воду ( W
), гори ( M
) місто ( T
), замок ( C
), або порожню ( .
). Так може виглядати квадрант
. . W . . . . . . .
. M W W . . . . . .
. M . . W . . . T .
M M . W . . . . . .
. . M . W W . . . .
. . . . . W W W W W
. T . . . . . . . .
. . W . . C . . . .
. . W W . . . . M .
. . . . . . . M M .
Другий ряд завжди буде зміщений праворуч від першого ряду. Гравці 1
в 4
можна розмістити до 40 пунктів по кожній з порожніх клітин (після деяких правил , які ми будемо ігнорувати для цього завдання). Можлива дошка в кінці гри:
3 3 W . . . 4 . 4 . . 2 W . 4 . . 4 . 4
3 M W W . 1 1 . . 4 2 W . 3 C 4 4 . . 4
3 M 2 2 W 1 1 1 T 3 2 W 4 3 . 1 4 . 4 .
M M . W 2 2 . . . 2 2 W 3 . 1 1 1 . . .
. 4 M . W W 2 2 2 2 W W 3 . 1 4 . T . .
. . . . . W W W W W . 3 C 1 . . 2 2 2 2
. T 1 1 1 1 . . 2 . . 4 . . . 2 2 M M M
4 . W 4 . C 4 4 . . . . . . 2 M M M M M
. 4 W W . . . 4 M . . W . W . 2 2 2 M M
. . . . . . . M M . . W W . . . . 2 M .
. . . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 . 1
M 3 3 . . . . . . . . 4 . T 2 . 2 4 1 .
M M . C . 4 . 4 . . . . . 1 2 4 2 1 1 .
M . . 1 . 4 . . . . M M 1 2 . . 2 1 . .
. . . W 1 1 4 1 1 . . . 1 2 . . 2 W W W
. . 1 1 W 1 T . 1 1 1 1 T . . 2 W . 4 .
. 1 1 W . 3 3 . . . . . . . . 2 W 4 C 3
C 1 3 3 3 . 3 . 4 . 4 . 4 . . 2 W 1 1 M
4 3 3 4 . M 4 3 . . . . . . . 2 W . . .
. . . 4 . M M 3 . . 4 4 . 4 . 2 W W . .
Ми позначимо такі квадрати як
1 2
3 4
Вашим завданням буде забити таку дошку. Завжди використовується один основний рахунок, і 8 необов'язкових балів, 3 з яких вибираються для кожної гри. † У подальшому я опишу всі 9 балів та використаю наведене вище налаштування як приклад того, скільки очок отримає кожен гравець.
† У дійсній грі є 10 балів, але я залишу два, тому що ніхто не хоче їх грати.
Основна оцінка. Гравець отримує 3 очки за кожного C
астела, який має поселення поруч. Приклад балів: 18, 0, 15, 12.
Необов’язкові бали.
Гравець отримує 1 бал за кожен горизонтальний ряд, на якому має принаймні одне розрахункове.
Приклад балів: 14, 20, 12, 16.
Для кожного гравця знайдіть горизонтальний ряд, на якому вони перебувають у більшості своїх поселень (виберіть будь-який випадок, якщо буде нічия). Гравець отримує 2 очки за кожний населений пункт у цьому ряду.
Приклад балів: 14 (рядок 16), 8 (рядок 4, 5 або 6), 28 (рядок 11), 10 (рядок 1).
Гравець отримує 1 бал за кожне поселення, яке будується поруч з
W
атером.Приклад балів: 13, 21, 10, 5.
Гравець отримує 1 бал за кожний населений пункт поруч із
M
сусідом.Приклад балів: 4, 12, 8, 4.
Порахуйте розрахунки кожного гравця у кожному квадранті. За квадрант гравці з найбільшою кількістю населених пунктів отримують по 12 очок , гравці з другою за кількістю населених пунктів отримують по 6 очок .
Приклад балів: 18 (6 + 0 + 6 + 6), 36 (12 + 12 + 0 + 12), 12 (0 + 0 + 12 + 0), 18 (12 + 6 + 0 + 0).
Для кожного гравця визначте квадрант, у якому вони мають найменшу кількість поселень. Гравець отримує 3 очки за кожний населений пункт у цьому квадранті.
Приклад балів: 18 (Квадрант 2), 0 (Квадрант 3), 15 (Квадрант 1 або 2), 27 (Квадрант 3).
Гравець отримує 1 бал за кожну підключену групу населених пунктів.
Приклад балів: 7, 5, 6, 29.
Гравець отримує 1 бал за кожні 2 населених пункти у найбільшій групі пов'язаних населених пунктів.
Приклад балів: 4, 10, 8, 2.
Змагання
Як і в грі, ви виберете 3 з необов'язкових балів, і зарахуєте дану дошку на основі основного бала та цих трьох балів. Ваш код повинен скласти список із 4 балів. Однак є одне обмеження щодо вибору: я згрупував оцінки в 3 групи, і ви повинні реалізувати одну з кожної групи:
- Виконайте один із 1 та 2 .
- Виконайте одну з 3, 4, 5 і 6 .
- Виконайте одну із 7 та 8 .
Ви можете написати програму або функцію, взявши введення через STDIN, аргумент командного рядка, рядок або параметр функції. Ви можете повернути результат або роздрукувати його в STDOUT.
Ви можете вибрати будь-який зручний 1D або 2D список / формат списку для введення. Ви не можете використовувати графік із повною інформацією про суміжність. Ось хороше читання на шестигранних сітках, якщо вам потрібно натхнення.
Ваш вихід може також бути у будь-якому зручному, однозначному списку чи рядковому форматі.
Це кодовий гольф, тому найкоротша відповідь (у байтах) виграє.
Подальші припущення
Ви можете припустити, що ...
- ... кожен гравець має принаймні 1 населений пункт, і не більше 40 розрахунків кожного гравця.
- ... кожен квадрант містить або одне місто та два замки, або два міста та один замок.
- ... міста і замки розташовані досить далеко один від одного, так що жодне поселення не може бути сусіднім з двома з них.
Випробування
Все ще використовуючи вищевказану дошку, ось окремі бали для всіх можливих варіантів вибору бальних механізмів:
Chosen Scores Total Player Scores
1 3 7 52 46 43 62
1 3 8 49 51 45 35
1 4 7 43 37 41 61
1 4 8 40 42 43 34
1 5 7 57 61 45 75
1 5 8 54 66 47 48
1 6 7 57 25 48 84
1 6 8 54 30 50 57
2 3 7 52 34 59 56
2 3 8 49 39 61 29
2 4 7 43 25 57 55
2 4 8 40 30 59 28
2 5 7 57 49 61 69
2 5 8 54 54 63 42
2 6 7 57 13 64 78
2 6 8 54 18 66 51