Super Square Rain


11

The Scream ™ Winter Sale è attivo e ti sei appena procurato un intenso gioco d'azione minimalista, Super Square . Dopo averlo giocato, ti rendi conto che o il gioco è semplicemente ridicolmente difficile o sei davvero pessimo. In particolare, c'è questo modello "a pioggia" che sembra farti ogni volta ...

inserisci qui la descrizione dell'immagine

Frustrato, decidi di darti una sfida diversa: disegna il modello di pioggia nell'arte ASCII!

Ingresso

L'input è un singolo numero intero positivo che indica la dimensione del modello n, dato tramite STDIN o argomento della funzione.

Produzione

L'output è il modello di pioggia della dimensione specificata, restituito come una stringa o stampato tramite STDOUT. Gli spazi bianchi iniziali o finali prima o dopo l'intera immagine sono a posto. Inoltre, l'immagine non deve essere allineata a sinistra dello schermo, ma deve essere chiaramente riconoscibile.

Ecco n = 10:

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

Ecco n = 5:

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

E infine, ecco n = 1(solo le due pareti più interne):

 - 

 - 

Costruzione (per maggiore chiarezza)

L'area di gioco è divisa in due coppie di quadranti in questo modo:

 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

I quadranti superiore / inferiore devono alternarsi tra pareti orizzontali rappresentate da trattini -e spazi vuoti ombreggiati da punti .. I quadranti sinistro / destro dovrebbero alternarsi tra spazi e pareti verticali rappresentate da tubi |. Le diagonali principali sono vuote e devono sempre essere riempite di spazi.

Il modello di pioggia delle dimensioni nha 2npareti, con pareti dai quadranti superiore / inferiore più vicine al centro e pareti che si alternano tra i quadranti mentre ci allontaniamo dal centro.

punteggio

Questo è code-golf, quindi vince il codice nel minor numero di byte.


4
Questo gioco ... So di cosa stai parlando. Ha rubato come 40 ore della mia vita fino a quando non l'ho battuto. ^^
ThreeFx

Risposte:


3

CJam, 93 87 78 61 59 byte

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

Prende valore ntramite STDIN

Alcuni esempi:

1
 - 

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

Questo può essere giocato a golf molto, cosa che farò per prima cosa domani.

Provalo online qui


5

Haskell 150 byte

Mi rendo conto che non vincerà, volevo solo pubblicare il mio primo codegolf: 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)

Utilizzare caricando in GHCi e chiamando q ndove si ntrova la dimensione.

Qualche esempio:

*Main> q 1
 - 

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

Qualcuno probabilmente può fare di meglio, sono abbastanza nuovo per Haskell.


6
Non preoccuparti di vincere. ;) Vincere è per CJam e Pyth. Giocare a golf in altre lingue significa battere i contributi nella stessa "classe di peso" e apprendere alcune nuove caratteristiche oscure della tua lingua. Benvenuti in PPCG!
Martin Ender,

3

Python, 204 , 198 , 191 byte

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" è una funzione di utilità che scrive "b" circondato da "a" riflesso, con un delimitatore opzionale, (sì i parametri lambda possono avere valori predefiniti). "f" è ricorsivo, generando lati e parti centrali per ogni livello "g" è la funzione pioggia, che può essere chiamata con un numero intero per restituire il testo richiesto.


Mi sono appena reso conto di aver dimenticato di consentire le funzioni che restituiscono stringhe, che di solito autorizzo (l'ho modificato in). Puoi ancora risparmiare su alcuni caratteri rimuovendo gli spazi bianchi e mettendo le righe 4, 5 su una riga :)
Sp3000,

Con un po 'di valutazione del corto circuito puoi arrivare a 190 :) link
Sp3000,

Mi dispiace, ti ho declassato per un incidente. Posso cancellarlo se modifichi.
Nutki,

1

Perl 5: 74 byte (73 codice + -p)

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

Accetta il parametro sull'input (carattere di fine riga richiesto per il corretto funzionamento):

$ 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.