打印对不起板


19

我只是在玩棋盘游戏,对不起!与一些人一起,我意识到我可以从中解决一些有趣的挑战。这很简单。

您的任务仅仅是输出对不起的电路板的版本,将片段放置在我告诉您的位置。

眼镜

首先,这是实际抱歉的图片董事会参考:

抱歉!  板

空板看起来像:

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

注意一些功能。

  • #的是空的正方形。
  • S的和H的是开始的和家庭的分别。
  • 所述>v<^的是幻灯片的开始,这取决于他们面对哪个方向。
  • |的和-的滑梯的中部,这取决于他们是否水平或垂直。
  • o的是最终的幻灯片。
  • 每列由一列空格隔开,以使其看起来更像正方形。

现在,这是要做的:

  • 您的输入是已放置在板上的各个零件的坐标列表。
  • 坐标从0底部颜色的起点(图片中的黄色)之外的正方形开始,并按顺时针方向每平方增加一个。
  • 在这60个正方形之后,安全区域具有下一个和最后20个坐标,从底部的坐标开始(坐标为60-64),然后按顺时针方向移动。
  • 您必须将星号(*)放置在正确的坐标上,替换所有玩家下方的角色。
  • 此外,如果有任何播放器在滑块的开始位置,请将它们移到滑块的末尾,然后再放置它们。
  • 您可以假设在解决滑块之前或之后都不会发生碰撞。
  • 您无需担心房屋或房屋的开始。
  • 如果需要,可以将其索引为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, 60, 37
尼尔

@Neil您怎么知道要使用哪个起始方块?
Maltysen,2013年

抱歉,我假设您以顺时针方向使用正方形,但是我猜想这对于2人游戏来说并不公平。
尼尔

@Closevoters:这还不清楚吗?如果您发现一些特定的问题,则可以更轻松地解决它们,从而使问题始终存在。
DJMcMayhem

我的困惑是关于索引编制,达到60之前和之后以及何时标记主页区域中的位置。我认为,如果您进一步阐明示例,则将更有意义。否则看起来很酷。
jacksonecac

Answers:


1

Python 2,476字节

简短的三线解决方案(在线尝试

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)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.