In một bảng xin lỗi


19

Tôi chỉ đang chơi trò chơi hội đồng quản trị Xin lỗi! với một số người, và tôi nhận ra rằng tôi có thể dựa trên một vài thử thách thú vị. Điều này là khá đơn giản.

Nhiệm vụ của bạn chỉ đơn giản là xuất ra một phiên bản của bảng xin lỗi, đặt các phần mà tôi nói với bạn.

Thông số kỹ thuật

Đầu tiên, đây là một hình ảnh của một xin lỗi thực tế ! bảng để tham khảo:

Lấy làm tiếc!  Bảng

Bảng trống trông như:

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

Lưu ý một vài tính năng.

  • Các #hình vuông là trống rỗng.
  • Các S's và H' s là Start và chủ nhân tương ứng.
  • Các >v<^là bắt đầu của các slide, tùy thuộc vào hướng mà chúng phải đối mặt.
  • Các |-là các trung gian của các slide, tùy thuộc vào việc chúng nằm ngang hay dọc.
  • Các okết thúc của các slide.
  • Mỗi cột được phân tách bằng một cột khoảng trắng để làm cho nó trông giống hình vuông hơn.

Bây giờ đây là những gì bạn phải làm:

  • Đầu vào của bạn là một danh sách tọa độ của các phần khác nhau đã được đặt trên bảng.
  • Các tọa độ bắt đầu tại 0hình vuông bên ngoài Bắt đầu của màu dưới cùng (màu vàng trong hình) và tăng thêm một hình vuông theo chiều kim đồng hồ.
  • Sau 60 ô vuông này, các vùng an toàn có 20 tọa độ tiếp theo và cuối cùng, bắt đầu từ một ô ở dưới cùng (được 60-64), sau đó đi theo chiều kim đồng hồ.
  • Bạn sẽ phải đặt ( *các) ngôi sao trên tọa độ chính xác, thay thế nhân vật bên dưới cho tất cả người chơi.
  • Ngoài ra, nếu bất kỳ người chơi nào ở trên ô bắt đầu của thanh trượt, hãy di chuyển chúng đến cuối thanh trượt trước khi đặt chúng.
  • Bạn có thể cho rằng sẽ không có va chạm, trước hoặc sau khi giải quyết thanh trượt.
  • Bạn không cần phải lo lắng về Nhà hoặc Bắt đầu.
  • Bạn có thể được lập chỉ mục 1 nếu bạn muốn, nhưng các trường hợp kiểm tra là 0 chỉ mục.

Các trường hợp thử nghiệm

[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
Tôi đã nghĩ rằng điều này sẽ thú vị hơn nếu các giá trị được đưa ra dưới dạng khoảng cách từ các ô vuông bắt đầu tương ứng (ví dụ: trường hợp thử nghiệm đầu tiên có thể là 0, 5và lần thứ hai có thể là 2, 60, 37).
Neil

@Neil làm thế nào bạn biết bắt đầu sử dụng hình vuông nào?
Maltysen 7/12/2016

Xin lỗi, tôi cho rằng bạn đã sử dụng các ô vuông theo thứ tự theo chiều kim đồng hồ, nhưng tôi đoán rằng sẽ không công bằng cho trò chơi 2 người.
Neil

@Closevoters: Điều gì không rõ ràng về điều này? Nếu bạn xác định một số mối quan tâm cụ thể, nó sẽ giúp khắc phục chúng dễ dàng hơn để điều này có thể được mở.
DJMcMayhem

Sự nhầm lẫn của tôi là về việc lập chỉ mục, trước và sau 60 đã đạt được và khi nào cần đánh dấu các vị trí trong phần nhà. Tôi nghĩ rằng nếu bạn làm rõ các ví dụ của bạn nhiều hơn, nó sẽ có ý nghĩa hơn. Nếu không thì nó trông khá tuyệt.
jacksonecac

Câu trả lời:


1

Python 2, 476 byte

Giải pháp 3 dòng ngắn ( Dùng thử trực tuyến )

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)

One-liner in 534 ( Dùng thử trực tuyến ):

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)

Tôi giả sử các chỉ số của vùng an toàn theo cách này:

#  >  -  -  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  -  -  <  #

Giải thích (các dòng được phân tách một chút để hiểu rõ hơn):

# 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.