ここで新しい形のコードゴルフを試したいです。ボーナスと同様に、チャレンジのすべての部分を完了する必要はありませんが、各回答には特定のサイズのサブセットを実装する必要があります(すべての回答に実装する必要があるコアがあります)。したがって、ゴルフに加えて、この課題には、うまく機能する一連の機能を選択することも含まれます。
ルール
キングダムビルダーはボードゲームで、(先が尖った)ヘックスグリッドでプレイされます。ボードは4つの(ランダム化された)クアドラントで構成され、各クアドラントには10x10の16進数セルがあります(したがって、ボード全体は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 .
2番目の行は、常に最初の行から右にオフセットされます。プレーヤー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
あなたの仕事は、そのようなボードを獲得することです。常に使用されるコアスコアが1つ、オプションのスコアが8 つあり、そのうち3つが各ゲームで選択されます。†以下では、9つのスコアすべてについて説明し、各プレイヤーが獲得するポイント数の例として上記の設定を使用します。
†実際のゲームには10のスコアがありますが、誰もゴルフをしたくないので2つ残します。
コアスコア。プレーヤーは、隣に決済がある各アトルに対して3ポイントを獲得C
します。スコアの例:18、0、15、12。
オプションのスコア。
プレイヤーは、少なくとも1つの集落がある水平列ごとに1ポイントを獲得します。
スコアの例:14、20、12、16。
各プレイヤーについて、彼らが彼らの集落のほとんどで横の列を見つけます(同点の場合はどれでも選びます)。プレーヤーは、その列の各集落に対して2ポイントを獲得します。
スコアの例: 14(行16)、8(行4、5または6)、28(行11)、10(行1)。
プレイヤーは、aterの隣に構築される各集落に対して1ポイントを獲得し
W
ます。スコアの例:13、21、10、5。
プレイヤーは、泉の隣の集落ごとに1ポイントを
M
獲得します。スコアの例:4、12、8、4。
各象限の各プレイヤーの居留地を数えます。象限ごとに、最大数の集落を持つプレイヤーはそれぞれ12ポイントを獲得し、2番目に多い集落を持つプレイヤーはそれぞれ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。
プレイヤーは、接続された決済の最大のグループ内の2つの決済ごとに1ポイントを獲得します。
スコアの例:4、10、8、2。
チャレンジ
ゲームの場合と同様に、オプションのスコアを3つ選択し、コアスコアとそれらの3つのスコアに基づいて特定のボードにスコアを付けます。コードで4つのスコアのリストを作成する必要があります。ただし、選択には1つの制限があります。スコアを3つのグループにグループ化し、各グループの1つを実装します。
- 1と2のいずれかを実装します。
- 3、4、5および6のいずれかを実装します。
- 7と8のいずれかを実装します。
STDIN、コマンドライン引数、プロンプトまたは関数パラメーターを介して入力を取得して、プログラムまたは関数を作成できます。結果を返すか、STDOUTに出力できます。
入力に便利な1Dまたは2Dリスト/文字列形式を選択できます。完全な隣接情報を含むグラフを使用することはできません。インスピレーションが必要な場合は、16進グリッドに関するいくつかの良い読み物があります。
出力は、便利で明確なリスト形式または文字列形式でもかまいません。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
さらなる仮定
あなたはそれを仮定するかもしれません...
- ...各プレイヤーには少なくとも1つの居留地があり、各プレイヤーの居留地は40以下です。
- ...各象限には、1つの町と2つの城、または2つの町と1つの城のいずれかが含まれます。
- ...町と城は十分に離れており、2つの村に隣接する集落はありません。
テストケース
上記のボードを引き続き使用して、スコアリングメカニズムのすべての可能な選択に対する個々のスコアを以下に示します。
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