พิมพ์บอร์ดขออภัย


19

ฉันเพิ่งเล่นเกมกระดานขออภัย! กับบางคนและฉันรู้ว่าฉันสามารถท้าทายความสนใจที่น่าสนใจบางอย่างได้ อันนี้ค่อนข้างเรียบง่าย

คุณงานเป็นเพียงการออกรุ่นของคณะกรรมการขอโทษวางชิ้นที่ผมบอกให้คุณ

รายละเอียด

อันดับแรกนี่คือภาพของขออภัยจริงๆ ! คณะกรรมการสำหรับการอ้างอิง:

ขออภัย!  คณะกรรมการ

กระดานว่างเปล่าดูเหมือนว่า:

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

สังเกตเห็นคุณสมบัติบางอย่าง

  • #'s เป็นสี่เหลี่ยมที่ว่าง
  • S'และH' s มีการเริ่มต้นของบ้านและตามลำดับ
  • >v<^'s เป็นจุดเริ่มต้นของภาพนิ่งขึ้นอยู่กับทิศทางที่พวกเขาต้องเผชิญ
  • |'และ-' s มี middles ของภาพนิ่งขึ้นอยู่กับว่าพวกเขากำลังนอนหรือแนวตั้ง
  • นี่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

ขออภัยฉันคิดว่าคุณใช้ช่องสี่เหลี่ยมตามเข็มนาฬิกา แต่ฉันเดาว่ามันไม่ยุติธรรมสำหรับเกมที่มีผู้เล่น 2 คน
Neil

@Closevoters: มีความชัดเจนเกี่ยวกับเรื่องนี้? หากคุณระบุข้อกังวลเฉพาะบางอย่างมันจะทำให้แก้ไขได้ง่ายขึ้นเพื่อให้สามารถเปิดได้
DJMcMayhem

ความสับสนของฉันเกี่ยวกับการจัดทำดัชนีก่อนและหลัง 60 ได้มาถึงและเมื่อต้องการทำเครื่องหมายตำแหน่งในส่วนของหน้าแรก ฉันคิดว่าถ้าคุณอธิบายตัวอย่างของคุณให้ชัดเจนยิ่งขึ้นมันจะสมเหตุสมผลมากกว่า ไม่งั้นมันดูเท่ห์ดี
jacksonecac

คำตอบ:


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.