죄송합니다 게시판 인쇄


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 제곱 후에 안전 지대는 다음과 마지막 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

죄송합니다. 사각형을 시계 방향으로 사용한다고 가정했지만 2 인용 게임에는 그다지 좋지 않을 것입니다.
Neil

@Closevoters : 이것에 대해 분명하지 않은 것은 무엇입니까? 특정 문제를 식별하면 문제를 해결하기가 쉬워 져 계속 열려있을 수 있습니다.
DJMcMayhem

내 혼란은 60에 도달하기 전후의 색인 작성과 홈 섹션에서 위치를 표시하는시기에 관한 것입니다. 나는 당신이 당신의 예를 더 명확히하면 더 이해가 될 것이라고 생각합니다. 그렇지 않으면 꽤 멋지게 보입니다.
jacksonecac

답변:


1

파이썬 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.