Super Square Rain

11

La vente d'hiver Scream ™ est lancée et vous venez de vous attraper un jeu d'action minimaliste intense, Super Square . En y jouant, vous réalisez que le jeu est ridiculement difficile ou que vous êtes vraiment mauvais. En particulier, il y a ce motif "pluie" qui semble vous avoir à chaque fois ...

entrez la description de l'image ici

Frustré, vous décidez de vous lancer un défi différent: dessinez le motif de la pluie dans l'art ASCII!

Contribution

L'entrée est un entier positif unique indiquant la taille du motif n, donné via STDIN ou un argument de fonction.

Production

La sortie est le motif de pluie à la taille spécifiée, renvoyé sous forme de chaîne ou imprimé via STDOUT. L'espace de début ou de fin avant ou après l'image entière est correct. De plus, l'image n'a pas besoin d'être alignée à gauche de l'écran, mais doit être clairement perceptible.

Voici n = 10:

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

Voici n = 5:

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

Et enfin, voici n = 1(juste les deux murs les plus intérieurs):

 - 

 - 

Construction (pour plus de clarté)

La zone de jeu est divisée en deux paires de quadrants comme suit:

 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

Les quadrants supérieur / inférieur doivent alterner entre des murs horizontaux représentés par des tirets -et des espaces ombrés de points .. Les quadrants gauche / droit doivent alterner entre les espaces et les murs verticaux représentés par des tuyaux |. Les diagonales principales sont vides et doivent toujours être remplies d'espaces.

Le modèle de pluie de taille na des 2nmurs, avec des murs des quadrants supérieurs / inférieurs les plus proches du centre et des murs alternant entre les quadrants lorsque nous nous éloignons du centre.

Notation

C'est du code-golf, donc le code dans le moins d'octets gagne.

Sp3000
la source
4
Ce jeu ... Je sais de quoi tu parles. Il a volé environ 40 heures de ma vie jusqu'à ce que je le batte. ^^
ThreeFx

Réponses:

3

CJam, 93 87 78 61 59 octets

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

Prend de la valeur nvia STDIN

Quelques exemples:

1
 - 

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

Cela peut être beaucoup joué au golf, ce que je ferai en premier demain.

Essayez-le en ligne ici

Optimiseur
la source
5

Haskell 150 octets

Je me rends compte que ça ne va pas gagner, je voulais juste poster mon premier 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)

Utilisez en chargeant dans GHCi et en appelant q nnest la taille.

Quelques exemples:

*Main> q 1
 - 

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

Quelqu'un peut probablement faire mieux, je suis assez nouveau pour Haskell.

Joseph Young
la source
6
Ne vous inquiétez pas de gagner. ;) Gagner est pour CJam et Pyth. Jouer au golf dans d'autres langues consiste à battre des soumissions dans la même «classe de poids» et à apprendre de nouvelles fonctionnalités obscures de votre langue. Bienvenue chez PPCG!
Martin Ender
3

Python, 204 , 198 , 191 octets

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" est une fonction utilitaire qui écrit "b" entouré de "a" réfléchi, avec un délimiteur facultatif (oui, les paramètres lambda peuvent avoir des valeurs par défaut). "f" est récursif, générant des côtés et des parties médianes pour chaque niveau "g" est la fonction pluie, qui peut être appelée avec un entier pour renvoyer le texte demandé.

swstephe
la source
Je viens de réaliser que j'ai oublié d'autoriser les fonctions qui renvoient des chaînes, ce que j'autorise habituellement (j'ai édité cela dans). Vous pouvez toujours économiser sur quelques caractères en supprimant les espaces et en mettant les lignes 4, 5 sur une seule ligne :)
Sp3000
Avec un peu d'évaluation des courts-circuits, vous pouvez le ramener à 190 :) lien
Sp3000
Désolé, je vous ai rétrogradé par accident. Je peux l'annuler si vous éditez.
nutki
1

Perl 5: 74 octets (code 73 + -p)

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

Prend le paramètre sur l'entrée (caractère de fin de ligne requis pour le bon fonctionnement):

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

Non golfé:

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