Üzgünüm Tahtası Yazdır


19

Masa oyunu oynuyordum Üzgünüm! ve bazı ilginç zorluklarla başa çıkabileceğimi fark ettim. Bu oldukça basit.

Göreviniz basitçe üzgünüm bir tahtanın versiyonunu çıkarmak ve size söylediğim parçaları yerleştirmektir.

gözlük

İlk olarak, burada gerçek bir Üzgünüm bir görüntü ! kurulu referans için:

Afedersiniz!  Yazı tahtası

Boş tahta şöyle görünür:

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

Birkaç özelliğe dikkat edin.

  • #Var boş karelerdir.
  • S'Ler ve H' s Başlat en ve Ev kullanıcısının sırasıyla.
  • Karşılaştıkları >v<^yöne bağlı olarak slaytların başlangıcıdır.
  • |'Nin ve -' ler onlar yatay veya dikey iseniz bağlı slaytlar ortalarınız bulunmaktadır.
  • o'In son slaytlar olan onlar.
  • Her sütun, daha kare benzeri görünmesi için bir boşluk sütunu ile ayrılır.

Şimdi yapmanız gerekenler:

  • Girişiniz, tahtaya yerleştirilmiş çeşitli parçaların koordinatlarının bir listesidir.
  • Koordinatlar 0, alt rengin Başlangıcı dışındaki karede başlar (resimde sarı) ve saat başı kare başına bir artar.
  • Bu 60 kareden sonra, güvenli bölgeler alttan (60-64 alır) başlayarak saat yönünde ilerleyen sonraki ve son 20 koordinatlara sahiptir.
  • *Tüm oyuncuların altındaki karakteri değiştirerek yıldız ( lar) ı doğru koordinat üzerine yerleştirmeniz gerekir.
  • Ayrıca, oyunculardan herhangi biri bir kaydırıcının başlangıç ​​karesinde ise, yerleştirmeden önce kaydırıcının sonuna taşıyın.
  • Kaydırıcıları çözmeden önce veya sonra herhangi bir çarpışma olmayacağını varsayabilirsiniz.
  • Ev veya Start'lar hakkında endişelenmenize gerek yoktur.
  • İsterseniz 1 dizinli olabilirsiniz, ancak test senaryoları 0 dizinlidir.

Test Durumları

[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
Değerlerin ilgili başlangıç ​​karelerinden uzaklıklar olarak verilmesi durumunda bunun daha ilginç olacağını düşünürdüm (örneğin ilk test durumu olabilir 0, 5ve ikincisi olabilir 2, 60, 37).
Neil

@Neil hangi başlangıç ​​karesini kullanacağınızı nasıl bilebilirsiniz?
Maltysen

Maalesef, kareleri saat yönünde kullandığınızı varsaydım, ancak sanırım bu 2 kişilik bir oyun için çok adil olmazdı.
Neil

@Closevoters: Bu konuda belirsiz olan nedir? Bazı özel endişelerinizi belirlerseniz, bu sorunların çözülmesini kolaylaştırarak açık kalmasını sağlar.
DJMcMayhem

Karışıklığım, dizinleme, 60'a ulaşılmadan önce ve sonra ve giriş bölümünde ne zaman işaretleneceği ile ilgili. Örneklerinizi daha fazla açıklığa kavuşturursanız daha anlamlı olacağını düşünüyorum. Aksi takdirde oldukça havalı görünüyor.
jacksonecac

Yanıtlar:


1

Python 2, 476 bayt

Kısa 3 satırlık çözüm ( Çevrimiçi deneyin )

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 ( Çevrimiçi deneyin ):

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)

Güvenli bölge endekslerini şu şekilde varsayıyorum:

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

Açıklama (çizgiler daha iyi anlaşılması için biraz ayrılmıştır):

# 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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.