申し訳ありませんがボードを印刷


19

ボードゲームをしていただけです 何人かの人々と、そして私はそれからいくつかの興味深い挑戦の基礎を作ることができることに気づきました。これは非常に簡単です。

あなたの仕事は、単にごめんなさいボードのバージョンを出力することです。

スペック

まず、こちらが実際の画像です。ごめんなさい!参考のためのボード:

ごめんなさい! ボード

空のボードは次のようになります。

# > - - o # # # # > - - - o # #
#   #   S                     v
o   #             H # # # # # |
|   #                         |
|   #                       S o
|   #                         #
^   H                         #
#                             #
#                             #
#                         H   v
#                         #   |
o S                       #   |
|                         #   |
| # # # # # H             #   o
^                     S   #   #
# # o - - - < # # # # o - - < #

いくつかの機能に注目してください。

  • #さんは、空の正方形です。
  • S」とH「」はそれぞれ開始とホームです。
  • >v<^方向は、スライドの方向に応じて、スライドの開始点です。
  • |」と-「」は、スライドが水平か垂直かに応じて、スライドの中央になります。
  • oさんは最後のスライドのです。
  • 各列はスペースの列で区切られ、より正方形のように見えます。

これがあなたがしなければならないことです:

  • 入力は、ボード上に配置されたさまざまなピースの座標のリストです。
  • 座標0は、下の色の開始点(図では黄色)の外側の正方形から始まり、時計回りに正方形ごとに1つずつ増加します。
  • これらの60個の正方形の後、セーフゾーンには、下と60から64までの次の座標と最後の20の座標があり、時計回りに移動します。
  • *正しい座標に星印()を配置し、すべてのプレイヤーの下にあるキャラクターを置き換えなければなりません。
  • また、プレーヤーのいずれかがスライダーの開始正方形にある場合は、配置する前にスライダーの端まで移動します。
  • スライダーを解決する前または後に、衝突はないと仮定できます。
  • ホームやスタートについて心配する必要はありません。
  • 必要に応じて1インデックスを付けることができますが、テストケースは0インデックスになります。

テストケース

[0, 20] ->

# > - - o # # # # > - - - o # #
#   #   S                     v
*   #             H # # # # # |
|   #                         |
|   #                       S o
|   #                         #
^   H                         #
#                             #
#                             #
#                         H   v
#                         #   |
o S                       #   |
|                         #   |
| # # # # # H             #   o
^                     S   #   #
# # o - - - < # # # # * - - < #

[2, 7, 66] ->

# > - - o # # # # > - - - o # #
#   #   S                     v
o   #             H # # # # # |
|   #                         |
|   #                       S o
|   #                         #
^   H                         #
#                             #
#                             #
#                         H   v
#                         #   |
o S                       #   |
|                         #   |
| # * # # # H             #   o
^                     S   #   #
# # o - * - < # # * # o - - < #

1
値がそれぞれの開始正方形からの距離として与えられた場合、これはより興味深いと思っていたでしょう(たとえば、最初のテストケースが0, 5あり、2番目のテストケースがである場合があります2, 60, 37)。
ニール

@Neil使用する開始スクエアをどのように知るのでしょうか?
マルティセン16

申し訳ありませんが、正方形を時計回りに使用すると仮定しましたが、2人用のゲームではあまり公平ではないと思います。
ニール

@Closevoters:これについて不明な点は何ですか?特定の懸念事項を特定した場合、それを修正しやすくすることで、問題を解決できます。
DJMcMayhem

私の混乱は、60に到達する前と後、およびホームセクションの場所をマークするタイミングについて、インデックス付けについてです。あなたがあなたの例をもっと明確にしたらもっと理にかなっていると思います。それ以外の場合はかなりクールに見えます。
jacksonecac 16

回答:


1

Python 2、476バイト

短い3行ソリューション(オンラインで試してみてください

s=map(list,''.join(b if b in'#^v<>-|oSH~'else' '*int(b,16)for b in "#>--o####>---o##~#1#1SAv~o1#6H#####|~|1#C|~|1#BSo~|1#C#~^1HC#~#E#~#E#~#CH1v~#C#1|~oSB#1|~|C#1|~|#####H6#1o~^AS1#1#~##o---<####o--<#").split('~'))
for i in input():x,y=(lambda n:([11-n,15]*12+[0,26-n]*14+[n-26,0]*16+[15,n-41]*14+[71-n,15]*4+[13,n-50]*5+[70-n,13]*5+[2,75-n]*5+[n-65,2]*5)[2*n:2*n+2])((lambda n:4if n in[5,20,35,50]else 3if n in[12,27,42,57]else 0)(i)+i);s[y][x]='*'
for r in s:print' '.join(r)

534のワンライナー(オンラインで試す):

for r in(lambda B,I:[[[i,j]in map(lambda n:([11-n,15]*12+[0,26-n]*14+[n-26,0]*16+[15,n-41]*14+[71-n,15]*4+[13,n-50]*5+[n-64,13]*5+[2,75-n]*5+[n-65,2]*5)[2*n:2*n+2],map(lambda n:n+4if n in[5,20,35,50]else n+3if n in[12,27,42,57]else n,I))and'*'or b for i,b in enumerate(a)]for j,a in enumerate(B)])(map(list,''.join(b if b in'#^v<>-|oSH~'else' '*int(b,16)for b in"#>--o####>---o##~#1#1SAv~o1#6H#####|~|1#C|~|1#BSo~|1#C#~^1HC#~#E#~#E#~#CH1v~#C#1|~oSB#1|~|C#1|~|#####H6#1o~^AS1#1#~##o---<####o--<#").split('~')),input()):print' '.join(r)

このようにセーフゾーンのインデックスを想定しています。

#  >  -  -  o  #  #  #  #  >  -  -  -  o  #  #
#     74    S                                v
o     73                   H 75 76 77 78 79  |
|     72                                     |
|     71                                  S  o
|     70                                     #
^     H                                      #
#                                            #
#                                            #
#                                      H     v
#                                      60    |
o  S                                   61    |
|                                      62    |
|  69 68 67 66 65 H                    63    o
^                                S     64    #
#  #  o  -  -  -  <  #  #  #  #  o  -  -  <  #

説明(理解を深めるために行を少し分けています):

# Hardcode board. Spaces are changed to their number in hex (as there are up to 14 spaces in row)
# Unfortunatly v^<> characters made board non-symmetrical and replacing chars costs too much in python, so I had to hardcode it all
B="#>--o####>---o##~#1#1SAv~o1#6H#####|~|1#C|~|1#BSo~|1#C#~^1HC#~#E#~#E#~#CH1v~#C#1|~oSB#1|~|C#1|~|#####H6#1o~^AS1#1#~##o---<####o--<#"

# Encode board to list of lists of characters
s=map(list,''.join(b if b in'#^v<>-|oSH~'else' '*int(b,16)for b in B).split('~'))

# Map coordinates, based on n (awfully long)
# Creates long list (lenght of 80) with values based on n and only one valid, which occures under index n
l=lambda n:([11-n,15]*12+[0,26-n]*14+[n-26,0]*16+[15,n-41]*14+[71-n,15]*4+[13,n-50]*5+[70-n,13]*5+[2,75-n]*5+[n-65,2]*5)[2*n:2*n+2]

# Returns additional move of n if it appers to be on slide start
j=lambda n:4if n in[5,20,35,50]else 3if n in[12,27,42,57]else 0

# Here takes input as list of numbers, get coordinates for them and update board with *
for i in input():x,y=l(j(i)+i);s[y][x]='*'

# Print board, spacing characters with one whitespace
for r in s:print' '.join(r)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.