Drucken Sie ein Tut mir leid Board

19

Ich habe gerade das Brettspiel gespielt . mit einigen Leuten, und mir wurde klar, dass ich ein paar interessante Herausforderungen daraus ableiten konnte. Dieser ist ziemlich einfach.

Ihre Aufgabe ist es einfach, eine Version eines auszugeben und die Teile dort zu platzieren, wo ich Sie auffordert.

Technische Daten

Zunächst ist hier ein Bild von einem tatsächlichen Sorry! Brett als Referenz:

Es tut uns leid!  Tafel

Das leere Brett sieht so aus:

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

Beachten Sie einige Funktionen.

  • Das #sind leere Felder.
  • Die S's und H' s sind jeweils Starts und Homes.
  • Das >v<^ist der Anfang der Folien, je nachdem in welche Richtung sie zeigen.
  • Das |'s und -' s sind die Mitten von Folien, je nachdem, ob sie horizontal oder vertikal sind.
  • Das oist das Ende von Dias.
  • Jede Spalte ist durch eine Spalte mit Leerzeichen getrennt, damit sie quadratischer aussieht.

Nun ist hier, was Sie tun müssen:

  • Ihre Eingabe ist eine Liste von Koordinaten verschiedener Teile, die auf der Tafel platziert wurden.
  • Die Koordinaten beginnen bei 0dem Quadrat außerhalb des Anfangs der unteren Farbe (gelb im Bild) und erhöhen sich im Uhrzeigersinn um eins pro Quadrat.
  • Nach diesen 60 Feldern haben die sicheren Zonen die nächsten und letzten 20 Koordinaten, beginnend mit der untersten (die 60-64 wird) und im Uhrzeigersinn.
  • Sie müssen die Sterne *auf die richtige Koordinate setzen und den darunter liegenden Charakter für alle Spieler ersetzen.
  • Wenn sich einer der Spieler auf dem Startfeld eines Schiebereglers befindet, verschieben Sie ihn an das Ende des Schiebereglers, bevor Sie ihn platzieren.
  • Sie können davon ausgehen, dass vor oder nach dem Auflösen von Schiebereglern keine Kollisionen auftreten.
  • Sie brauchen sich keine Sorgen um das Zuhause oder die Starts zu machen.
  • Sie können 1-indiziert sein, wenn Sie möchten, aber die Testfälle sind 0-indiziert.

Testfälle

[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 - - < #
Maltysen
quelle
1
Ich hätte gedacht, dass dies interessanter wäre, wenn die Werte als Abstände von den jeweiligen Startquadraten angegeben würden (so könnte zum Beispiel der erste Testfall 0, 5und der zweite sein 2, 60, 37).
Neil
@Neil wie würdest du wissen, welches Startquadrat zu verwenden ist?
Maltysen
Tut mir leid, ich habe angenommen, dass Sie die Quadrate im Uhrzeigersinn verwendet haben, aber ich denke, das wäre für ein 2-Spieler-Spiel nicht sehr fair.
Neil
@Closevoters: Was ist daran unklar? Wenn Sie bestimmte Probleme feststellen, können Sie diese leichter beheben, damit diese weiterhin bestehen bleiben.
DJMcMayhem
In meiner Verwirrung geht es um die Indizierung, bevor und nachdem 60 erreicht wurden und wann Orte im Home-Bereich zu markieren sind. Ich denke, wenn Sie Ihre Beispiele näher erläutern würden, wäre dies sinnvoller. Ansonsten sieht es ziemlich cool aus.
Jacksonecac

Antworten:

1

Python 2, 476 Bytes

Kurze 3-Zeilen-Lösung ( Online ausprobieren )

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)

Einzeiler in 534 ( Online testen ):

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)

Ich nehme Indizes der sicheren Zone auf diese Weise an:

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

Erklärung (Zeilen sind zum besseren Verständnis etwas getrennt):

# 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)
Totes Opossum
quelle