Super Square Regen

11

Der Scream ™ Winter Sale ist eröffnet und Sie haben sich gerade ein intensives minimalistisches Actionspiel, Super Square, geschnappt . Wenn du es spielst, stellst du fest, dass das Spiel entweder nur lächerlich schwer ist oder dass du wirklich schlecht darin bist . Insbesondere gibt es dieses "Regen" -Muster , das Sie jedes Mal zu bekommen scheint ...

Geben Sie hier die Bildbeschreibung ein

Frustriert entscheiden Sie sich, sich einer anderen Herausforderung zu stellen: Zeichnen Sie das Regenmuster in ASCII-Kunst!

Eingang

Die Eingabe ist eine einzelne positive Ganzzahl, die die Größe des Musters nangibt und über STDIN oder ein Funktionsargument angegeben wird.

Ausgabe

Die Ausgabe ist das Regenmuster in der angegebenen Größe, das als Zeichenfolge zurückgegeben oder über STDOUT gedruckt wird. Führende oder nachfolgende Leerzeichen vor oder nach dem gesamten Bild sind in Ordnung. Außerdem muss das Bild nicht bündig links vom Bildschirm sein, sondern muss deutlich erkennbar sein.

Hier ist n = 10:

 ...................
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ...................

Hier ist n = 5:

 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 

Und schließlich hier n = 1(nur die innersten zwei Wände):

 - 

 - 

Konstruktion (für zusätzliche Klarheit)

Der Spielbereich ist wie folgt in zwei Quadrantenpaare unterteilt:

 AAAAAAAAA
B AAAAAAA B
BB AAAAA BB
BBB AAA BBB
BBBB A BBBB
BBBBB BBBBB
BBBB A BBBB
BBB AAA BBB
BB AAAAA BB
B AAAAAAA B
 AAAAAAAAA

Die oberen / unteren Quadranten sollten sich zwischen horizontalen Wänden, die durch Bindestriche dargestellt werden -, und mit Punkten schattierten Lücken abwechseln .. Die linken / rechten Quadranten sollten zwischen Räumen und vertikalen Wänden wechseln, die durch Rohre dargestellt werden |. Die Hauptdiagonalen sind leer und sollten immer mit Leerzeichen gefüllt sein.

Das Regenmuster der Größe nhat 2nWände, wobei Wände aus den oberen / unteren Quadranten am nächsten zur Mitte liegen und Wände zwischen Quadranten wechseln, wenn wir uns von der Mitte entfernen.

Wertung

Dies ist Code-Golf, also gewinnt der Code in den wenigsten Bytes.

Sp3000
quelle
4
Dieses Spiel ... Ich weiß wovon du sprichst. Es hat 40 Stunden meines Lebens gestohlen, bis ich es geschlagen habe. ^^
ThreeFx

Antworten:

3

CJam, 93 87 78 61 59 Bytes

ri:K_+){K" |"*KKI-z:I-I2%:L+<SL>\+_W%L'-'.?I2*Ig-*@I0=>N}fI

Nimmt Wert nüber STDIN

Einige Beispiele:

1
 - 

 - 
2
 ... 
| - |
|   |
| - |
 ... 
5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

Dies kann viel Golf gespielt werden, was ich morgen als erstes tun werde.

Probieren Sie es hier online aus

Optimierer
quelle
5

Haskell 150 Bytes

Mir ist klar, dass es nicht gewinnen wird, ich wollte nur meinen ersten Codegolf posten: D.

q n=putStr$unlines$iterate(\l->let[a,b]=if l!!0!!1=='-'then"|."else" -";c=[a:s++[a]|s<-l];t=' ':[b|x<-l!!0]++" "in t:c++[t])[" - ","   "," - "]!!(n-1)

Verwenden Sie diese Option, indem Sie in GHCi laden und anrufen, q nwo ndie Größe ist.

Einige Beispiele:

*Main> q 1
 - 

 - 
*Main> q 2
 ... 
| - |
|   |
| - |
 ... 
*Main> q 5
 --------- 
  .......  
 | ----- | 
 |  ...  | 
 | | - | | 
 | |   | | 
 | | - | | 
 |  ...  | 
 | ----- | 
  .......  
 --------- 
*Main> q 10
 ................... 
| ----------------- |
|  ...............  |
| | ------------- | |
| |  ...........  | |
| | | --------- | | |
| | |  .......  | | |
| | | | ----- | | | |
| | | |  ...  | | | |
| | | | | - | | | | |
| | | | |   | | | | |
| | | | | - | | | | |
| | | |  ...  | | | |
| | | | ----- | | | |
| | |  .......  | | |
| | | --------- | | |
| |  ...........  | |
| | ------------- | |
|  ...............  |
| ----------------- |
 ................... 

Jemand kann es wahrscheinlich besser machen, ich bin ziemlich neu in Haskell.

Joseph Young
quelle
6
Mach dir keine Sorgen über das Gewinnen. ;) Gewinnen ist für CJam und Pyth. Beim Golfen in anderen Sprachen geht es darum, Einsendungen in derselben "Gewichtsklasse" zu schlagen und einige neue, obskure Merkmale Ihrer Sprache zu lernen. Willkommen bei PPCG!
Martin Ender
3

Python, 204 , 198 , 191 Bytes

r=lambda a,b,d=' ':d.join((a,b,a[::-1]))
def f(s,i,n):d=[r(s[:i],'.-'[(n-i)%2]*((n-i)*2-1))];return i==n and[r(s,' '*(2*(i%2)+1),'')]or d+f(s,i+1,n)+d
g=lambda n:'\n'.join(f('| '*(n/2),0,n))

"r" ist eine Dienstprogrammfunktion, die "b", umgeben von reflektiertem "a", mit einem optionalen Trennzeichen schreibt (ja, Lambda-Parameter können Standardwerte haben). "f" ist rekursiv und erzeugt Seiten und Mittelteile für jede Ebene. "g" ist die Regenfunktion, die mit einer Ganzzahl aufgerufen werden kann, um den angeforderten Text zurückzugeben.

swstephe
quelle
Ich habe gerade festgestellt, dass ich vergessen habe, Funktionen zuzulassen, die Zeichenfolgen zurückgeben, die ich normalerweise zulasse (habe das in bearbeitet). Sie können immer noch ein paar Zeichen sparen, indem Sie Leerzeichen entfernen und die Zeilen 4, 5 in eine Zeile setzen :)
Sp3000
Mit ein bisschen Kurzschlussbewertung können Sie dies auf 190 bringen :) link
Sp3000
Entschuldigung, ich habe Sie durch einen Unfall herabgestimmt. Ich kann es abbrechen, wenn Sie bearbeiten.
Nutki
1

Perl 5: 74 Bytes (73 Code + -p)

#!perl -p
s/.*/ /;$a=qw(- .)[$|--]x
s/.+/$"$&$"/g,s/^|\z/ $a 
/g,$"^="\\"for($_)x$&

Übernimmt Parameter für die Eingabe (Zeilenendezeichen für ordnungsgemäße Funktion erforderlich):

$ perl rain.pl <<<"3"
 ----- 
  ...  
 | - | 
 |   | 
 | - | 
  ...  
 ----- 

Ungolfed:

                         # Read the input line into $_ (-p)
s/.*/ /;                 # Replace the input with a space (plus the original eol), saves the parameter in $&
for(($_)x$&) {           # Iterate $& times without affecting $_
  $c=s/.+/$"$&$"/g;      # Add $" (initially space) at the start and the end of each line, stores number of lines in $c
  $a=("-",".")[$|--]x$c; # Set $a to $c times minus or dot using magic $| (which iterates over 1 and 0 on decrement)
  s/^|\z/ $a \n/g;       # Equivalent to $_=" $a \n$_ $a \n"
  $"^="\\";              # Alternate $" between space and bar using the string xor 
}
                         # Print $_ (-p)
Nutki
quelle