Art du jour ASCII n ° 1 - Double noeud


47

Ecrivez un programme complet ou une fonction prenant un entier positif en Ntant qu'entrée via STDIN / ligne de commande / ARGV ou une argumentation de fonction et affiche un double nœud ASCII correspondant à la Ndestination de STDOUT.

Le double noeud ASCII ressemble à ceci:

  __  __  __  __  __  __
 /  \/  \/  \/  \/  \/  \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
 \ \/\ \/\ \/\ \/\ \/\ \/
 /\ \/\ \/\ \/\ \/\ \/\ \
| /\/ /\/ /\/ /\/ /\/ /\ |
| \/ /\/ /\/ /\/ /\/ /\/ |
 \__/\__/\__/\__/\__/\__/

Ce qui précède est pour N = 6

Voici quelques autres doubles noeuds pour d'autres valeurs de N:

Si N = 1, le double noeud de sortie ressemble à:

  __
 /  \
| /\ |
| \/ |
 \ \/
 /\ \
| /\ |
| \/ |
 \__/

Pour N = 2, ses

  __  __ 
 /  \/  \
| /\/ /\ |
| \/ /\/ |
 \ \/\ \/
 /\ \/\ \
| /\/ /\ |
| \/ /\/ |
 \__/\__/

Pour N = 3, ses

  __  __  __ 
 /  \/  \/  \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/
 /\ \/\ \/\ \
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/

et de même, le motif continue et toute valeur plus grande de N.

Détails :

  • L'entrée est toujours un entier positif supérieur à 0.
  • Le retour à la ligne est facultatif
  • Il devrait y avoir soit aucun espace de fin dans chaque ligne, soit suffisamment d'espaces de fin pour que la longueur de chaque ligne soit égale à 4*N + 2.
  • Il ne devrait jamais y avoir d'espace principal qui ne fasse pas partie du modèle spécifié.

C'est du , donc le code le plus court en octets gagne.


Classement des séries

Je convertis cela en une série de défis artistiques ASCII et ajoute ainsi un tableau des leaders pour la série (extrait de Martin). Pour vous assurer que vos réponses apparaissent, commencez chaque réponse par un titre, en utilisant le modèle Markdown suivant:

# Language Name, N bytes

où N est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:

# Ruby, <s>104</s> <s>101</s> 96 bytes


Série jusqu'ici

1. Double noeud

2. couleuvre

3. sanctuaires chinois

4. Les signes du zodiaque

5. Tuile de diamant aléatoire


1
Pourquoi le bord droit est-il différent pour N = 3?
Aditsu

@aditsu Haha. 4 jours, 3K vues, 11 réponses et vous êtes la première personne à le remarquer: D. Fixé!
Optimiseur

Réponses:


12

CJam, 55 octets

Je me suis fait très mal balloter par ça ... enfin, j'ai finalement trouvé 55 octets d'ISO 8859-1:

"²îå<63Åhbغ¢dräOä[æTZ"246b5b"|_ \/"f=9/4/~2/\ri*2>*zN*

ou cette alternative :

"ô/Ht]õDz1M;í,D¯Tmä$:r"246b5b"_/\ |"f=9/2/~+ri*2>\++zN*

Au départ, j'ai essayé de le faire en ASCII simple, mais je ne l'ai réduit qu'à 58 octets :

"C]VA~`+-WIt*n_I?FanSEo*b"128b5b"_/|\ "f=9/4/~2/\ri*2>*zN*

et encore une alternative :

"1,*Ap7c?UvI$yQHqHqs~=}n"153b5b"_ /|\\"f=9/2/~+ri*2>\++zN*

Explication:

L'idée est de coder les parties uniques (bord gauche, bord droit et motif central) de manière pratique, de répéter la partie centrale si nécessaire et de les assembler. Le code finit par être similaire à bien des égards à la réponse de Dennis; Je n'ai pas essayé de le copier, mais j'ai essayé plusieurs approches différentes (y compris l'exploitation de plus de symétries et de répétitions) et c'est ce qui a fonctionné le mieux.

Je mets les bords gauche et droit ensemble comme ceci:

    
 /\ 
|  |
|  |
 \/ 
 /\ 
|  |
|  |
 \/ 

Le motif du milieu a 4 colonnes, mais elles sont répétées N-0,5 fois, c’est-à-dire qu’une répétition est coupée en deux. Pour plus de commodité, j'ai utilisé ce modèle:

  __
\/  
/ /\
 /\/
/\ \
\/\ 
/ /\
 /\/
/\__

et enlevé la première moitié de la première répétition.

J'ai donc réuni les parties et les ai encodées sous forme transposée, car il est plus facile de travailler avec elles de cette façon. Le premier et le troisième programme encodent cette chaîne:

 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
  ||  || 
 /  \/  \
 \  /\  /
  ||  || 

(sans nouvelles lignes), qui est la transposition des bords moyen +. Les deuxième et quatrième programmes (les "alternatives") codent cette chaîne:

  ||  || 
 /  \/  \
 \  /\  /
  ||  || 
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_

encore une fois, sans nouvelles lignes, et ceci est la transposition d'arêtes + milieu.

Voici comment cette partie commune du code fonctionne:

"…"        encoded string (constructed via the reverse process,
           using a suitable base that gives valid characters)
246b       convert the string to an integer, treating each character as a digit
           in base 246 (or other bases in the ASCII versions)
5b         convert the number to base 5, obtaining 72 digits from 0 to 4,
           representing the 5 different characters we have
"|_ \/"f=  convert the digits to their corresponding characters
           (each program uses a different assignment order)
9/         split the resulting strings into 8 strings of 9 characters
           if viewed as lines, they look exactly like the 2 patterns shown above

Après cela, la mise en œuvre diffère légèrement. Dans le premier et le troisième programme, nous avons:

4/     split the lines into groups of 4 - the middle part and the edges
~      dump the two 4-line parts onto the stack
2/     split the second part (the edges) into 2 groups of 2 lines
       (left edge and right edge)
\      swap the edges with the middle part
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
*      join the 2 edges using the repeated middle part as a separator
z      transpose the result back to the desired form
N*     join with newlines

Dans les deuxième et quatrième programmes (alternatifs), nous avons:

2/     split the lines into groups of 2
       (left edge, right edge, middle first half, middle 2nd half)
~      dump all the groups onto the stack
+      join the two middle halves into a single middle group of 4 lines
ri*    read the input, convert to integer (N) and repeat the middle part N times
2>     remove the first 2 lines (first half of first repetition)
\      swap the repeated middle with the right edge
+      concatenate the middle with the right edge
+      concatenate the left edge with the rest
z      transpose the result back to the desired form
N*     join with newlines

Je ne sais pas combien de temps j'ai essayé de faire le 1>W<plus court. Il s'avère que je n'avais qu'à faire pivoter le tableau avant de l'encoder et de l'utiliser 2>...
Dennis

23

CJam, 103 92 83 69 66 57 octets

"O5àäªÞáKZò,_÷%SJ«Ò"248b5b"/ \_|"f=9/4/~ri*1>W<+2m<zN*

Essayez-le en ligne dans l' interprète CJam .

Idée

Le motif devient beaucoup plus évident une fois que nous avons transposé des lignes avec des colonnes (complétées à droite avec des espaces).

Pour l'entrée 3 , par exemple, ceci donne:

  ||  || 
 /  \/  \
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /
 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \  /\  /
  ||  || 

Les deux premières et les deux dernières lignes sont spéciales, mais les autres répètent encore et encore le même motif.

Ainsi, pour l’entrée N , tout ce que nous avons à faire est de répéter

 / /\/ /\
_ /\ \/\_
_ \/\ \/_
 \/ /\/ /

N fois, remplacez la première ligne par

  ||  || 
 /  \/  \

la dernière rangée avec

 \  /\  /
  ||  || 

et, enfin, transposer des lignes avec des colonnes.

Code

"O5àäªÞáKZò,_÷%SJ«Ò"

248b  e# Convert the string (array of code points in base 248) to an integer.
5b    e# Convert the integer to the array of its digits in base 5.

      e# This pushes the following array:

      e# [ 1 2 1 1 0 2 1 1 0 1 1 4 4 1 1 4 4 1 1 1 4 4 1 1
      e#   4 4 1 1 0 1 1 2 0 1 1 2 1 0 1 0 2 0 1 0 2 3 1 0
      e#   2 1 2 0 2 3 3 1 2 0 2 1 2 0 3 1 2 0 1 0 2 0 1 0 ]

"/ \_"

f=    e# Retrieve the chars that correspond to the indexes in the array.

      e# This pushes the following string:

      e# " \  /\  /  ||  ||   ||  ||  /  \/  \ / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /"

9/4/~ e# Divide into groups of 4 strings of length 9.

      e# This pushes the following arrays:

      e# [ " \  /\  /"   "  ||  || "   "  ||  || "   " /  \/  \" ]
      e# [ " / /\/ /\"   "_ /\ \/\_"   "_ \/\ \/_"   " \/ /\/ /" ]

ri    e# Read an integer from STDIN.
*     e# Repeat the last array that many times.
1>W<  e# Remove the first and last string from the array.
+     e# Concatenate both arrays.
2m<   e# Rotate the concatenated arrays two elements to the left.
z     e# Zip the array of strings (transpose rows with columns).
N*    e# Join the strings of the array, separating by linefeeds.

12

Javascript ( ES7 Draft ), 169 163 160 158 octets

Éditez: -6 en utilisant une chaîne de modèle pour éliminer certaines répétitions de la chaîne de modèle.

Éditez: -3 en passant de slice(0,-2)à slice(2)en réorganisant la chaîne de modèle.

Edit: -2 en boucle à la bplace de aet en réduisant la achaîne à 4 avec un modulo.

F=N=>[(a='  ||'[i%4])+b[i]+`  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`.split(0)[i].repeat(N).slice(2)+(b+b)[9-i]+a for(i in b=' /  \\/  \\')].join(`
`)
<input id="stdin" value="4" />
<button onclick="stdout.innerHTML=F(stdin.value)">Run</button><br />
<pre id="stdout"></pre>

Commenté:

F=N=>[ // define function F, start array comprehension to generate each line
    (a = '  ||'[i % 4]) + // first character of the line, store copy in a
    b[i] + // second character of each line
        `  __0\\/ ${c=' 0/ /\\0 /\\/0/\\'} \\0\\/\\${c}__`. 
        // list of patterns for each line delimited by 0's
        // results in string: '  __0\/  0/ /\0 /\/0/\ \0\/\ 0/ /\0 /\/0/\__'
        split(0)[i]. // split by 0, get index at i
        repeat(N). // repeat N times
        slice(2) + // chop off the first 2 characters
    (b + b)[9 - i] + // get opposite of second character, b+b to get a space at index 9
    a // repeat first character (a)
    for(i in b = ' /  \\/  \\') // runs for each index in character map b
].join(` // join resulting array with newlines
`)

Je pense que vous pouvez remplacer la chaîne avant .split(0)avec ('__ 0 '+(r='\\/0/\\/ 0\\/ /0 ')+r+'0\\/ /0__/\\').
mardi

@flawr j'ai pu condenser encore plus loin en utilisant une méthode similaire :)
nderscore

Si vous le transmettez 0, vous verrez un 8.
Ismael Miguel

Que font ceux `` et ${...}exactement?
Flawr

@flawr La syntaxe de backtick `déclare une chaîne de modèle . Tout ce qui s'y trouve ${}est évalué comme une expression javascript.
nderscore

9

Perl, 134 129

print s/...\K.{4}/$&x~-"@ARGV"/er=~y!iolp!| /\\!r,$/for
map/i/?$_.oi:"o$_$_".o,o__o,loop,@x=(iolplolp,ioplolpl),popl,lpop,@x,p__l

Prend un paramètre de ligne de commande:

$ perl ~/knot.pl 3
  __  __  __  
 /  \/  \/  \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \ \/\ \/\ \/ 
 /\ \/\ \/\ \ 
| /\/ /\/ /\ |
| \/ /\/ /\/ |
 \__/\__/\__/ 

8

JavaScript ( ES6 ), 165 166

Éléments de noeud:

  • 2 rangées supérieures, basées sur '__' et '/ \' répétés
  • 2 lignes extérieures, basées sur '/ \ /' répétées et enfermées dans '| ... | '
  • 2 rangées intérieures, basées sur '\ / \' répété et encadré par '... /' et '/ ... \'
  • les 2 mêmes rangées extérieures ci-dessus
  • 1 rangée inférieure basée sur '\ __ /' répété

Ungolfed

K=r=>
{
  R = x => x.repeat(r);
  S = d => R(elem).slice(d,d-2); // use global 'elem' that must be assigned before the call
  elem = '/\\/ '
  outer = '\n| ' + S(0) + ' |\n| ' + S(1) + ' |\n '
  elem = '\\ \\/'
  inner = '\\' + S(1) + '/\n /' + S(0) + '\\'
  return R('  __') + '\n ' + R('/  \\') + outer
  + inner + outer + R('\\__/')
}

Golfé

K=r=>(S=d=>(R=e=>e.repeat(r))(e).slice(d,d-2),o=`
| ${S(0,e='/\\/ ')} |
| ${S(1)} |
 `,R('  __')+`
 ${R('/  \\')+o}\\${S(1,e='\\ \\/')}/
 /${S(0)}\\${o}`+R('\\__/'))

// TEST

function go() {
  O.innerHTML=K(I.value)
}

go()
<input id=I value=5><button onclick='go()'>-></button><br>
<pre id=O></pre>


2
Essayez de passer 0et vous obtiendrez une araignée à 4 pattes.
Ismael Miguel

8

C ++, 1530 639 479

Cela ressemblait à un défi amusant, mais je me suis un peu écarté du mémoire.

#include "stdafx.h"
#include <iostream>
#include <sstream>
using namespace std;
string a=" __ ",b="/  \\",c=" /\\",d="/\\/ ",f="\\ \\/",g="/\\\ \\",r="\\__/",o="",e=o,j="|";
string q(int n,string r,string x="",string m=" ",string t=" "){string z=o;for(int i=0;i<n;i++){z+=r;if(i!=n-1)z+=x;}return m+z+t+"\n";}
int main(){int x,y;cin>>x;cin>>y;e+=q(x,a)+q(x,b);for(int i=0;i<y;i++){e+=q(x,c,"/",j," |")+q(x-1,d,o,"| \\/ ",j);if(i!=y-1){e+=q(x,f)+q(x,g);}}e+=q(x,r);cout<<e;}

Je ne sais pas comment mesurer la taille de mon application en octets, mais je vais essayer de le comprendre et de mettre à jour ma réponse.

Mon application pourrait être plus petite mais elle tourne en boucle dans les domaines x et y, et j'aime un peu comme ça: D


1
Bienvenue chez PPCG! Votre score correspond à la taille de votre code source, soit 1530 octets. Vous pouvez commencer à économiser des octets en supprimant les commentaires et les espaces et en raccourcissant les noms de variables et de fonctions.
Dennis

Wowzor c'est plus gros que le reste haha, je vais travailler à le réduire: D
Spaceman

6

Python 2, 156 151 147 141 139

edit 1: édité pour utiliser input () au lieu d'une fonction.

edit 2: utilisé str.join et ajouté à var c pour supprimer certains caractères redondants.

edit 3: suppression de certaines séquences d'échappement de chaînes inutiles.

edit 4: utilisé ~ -n au lieu de a = n-1

C'était très amusant de programmer mon premier code golf!

n=input()
a='/\/ '*~-n
b='\ '+'\/\ '*~-n+'\\'
c='\n| '+a+'/\ |\n| \/ '+a+'|'
print'\n '.join(('  __'*n,'/  \\'*n+c,b+'/','/'+b+c,'\__/'*n))

enregistrez-le dans un éditeur de texte externe sous n.py afin de supprimer le dernier caractère de nouvelle ligne afin de réduire la taille du fichier de 1 octet, exécutez le module et entrez votre numéro.


Si vous autorisez la saisie du numéro juste après l'instruction d'exécution du programme, je peux le réduire à 151 octets
micsthepick

input ()Est généralement considéré comme correct lors de la lecture de STDIN.
seequ

Je vois que vous avez économisé a=n-1pour économiser sur l'écriture *(n-1)deux fois, mais c'est le cas*~-n .
xnor

toujours la même quantité de caractères dans les deux cas, parce que j'utilise la valeur deux fois, mais bon conseil.
Micsthepick

Vous pouvez enregistrer des octets de la manière dont python traite les barres obliques inverses dans les chaînes, vous n’avez pas toujours besoin de les encoder. Voir stackoverflow.com/a/16973452/3351622
Matty

5

Python 2, 139 133 129 octets

n=input()
for i in range(9):w=' ?|'[i&2];s=' / /\/ /\_ /\ \/\__ \/\ \/_ \/ /\/ /'[i::9]*n;s=(s,' %s '%s[1:-1])[i%4>1];print w+s+w

Celui-ci construit et imprime ligne par ligne.

Voici le code sous forme non-golfée:

n=int(input())
# The list with all the knot pieces
l= [' __ ',
    '/  \\',
    ' /\/',
    '/\/ ',
    '\ \/',
    '/\ \\',
    ' /\/',
    '/\/ ',
    '\__/']
# The first and last columns
w = '  ||  || '
# Loop for each row
for i in range(9):
    # Exception for the first and last character in the knot (in some rows)
    s = l[i]*n
    if i % 4 > 1:
        s = ' ' + s[1:-1] + ' '
    # Print the knot for this row
    print(w[i] + s + w[i])

Edit: j'ai changé le langage en python 2, pour être compatible avec ma réponse pour # 3 (et il enregistre également 6 octets de plus)


Je crois w=(3*' ||')[i] -> w=' |'[i&2]et ' '+s[1:-1]+' ' -> ' %s '%s[1:-1]travaille (le premier est une chaîne avec deux espaces puis un tuyau, mais SE joue le jeu)
Sp3000

@ Sp3000 Merci! Ce premier est assez intelligent. J'aurais dû y penser ' ||'[i%4], mais c'est encore plus court (également avec deux espaces).
Matty

3

C, 159 octets

j,k;f(n){char*t="7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI";for(n*=4;t[j/2];++k,k%=n+3,j+=k-n?k%n<3||k%4-2?1:-3:3)putchar("\n _|/\\"[(t[j/2]-48)/(j%2?1:6)%6]);}

Avec des espaces et d’autres améliorations de la lisibilité:

#include <stdio.h>

int j, k;

void f(int n) {
    char *t = "7>771I;M6CMI93;IIB;;MI1M;M6CMI93;IIB;>MI", *m = "\n _|/\\";
    for (n *= 4; t[j / 2];
         ++k,
         k %= n + 3,
         j += k - n ? k % n < 3 || k % 4 - 2 ? 1 : -3 : 3)
        putchar(m[(t[j / 2] - 48) / (j % 2 ? 1 : 6 ) % 6]);
}

Ceci est principalement basé sur des modèles. Le modèle tcontient les 9 colonnes possibles de la sortie, ce qui signifie qu'il code 9 * 9 = 81 caractères, ou 80 sans la nouvelle ligne.

Comme il n’existe que 6 caractères différents dans le modèle (y compris les caractères de nouvelle ligne), j’en ai emballé des paires dans un seul caractère de modèle, ce qui signifie que le modèle peut être stocké dans 40 caractères. Il y a alors 6 * 6 = 36 paires de caractères possibles, codées en tant que caractères ASCII, de 48 à 73. La conversion en caractère original est donnée par la petite table de correspondance m.

Le reste de la logique consiste principalement à répéter les ntemps de motif , ce qui signifie revenir en arrière de 4 caractères dans le modèle, tout en émettant correctement les parties de début et de fin de chaque ligne.


2

PHP 5.5.3, 488 , 466

<?php 
function k($n){$r=array_fill(0,9,'');for($i=0;$i<$n;$i++){$r[0].=($i==0)?"  __ ":" __ ";$r[1].=($i==0)?" /  \\":"/  \\";$r[2].=($i==0)?"| /\\/":(($i==$n-1)?" /\\ |":" /\\/");$r[3].=($i==0)?"| \/ ":(($i==$n-1)?"/\/ |":"/\/ ");$r[4].=($i==0)?" \\ ":(($i==$n-1)?"\\/\\ \\/":"\\/\\ ");$r[5].=($i==0)?" /\\ ":(($i==$n-1)?"\\/\\ \\":"\\/\\ ");$r[6]=$r[2];$r[7]=$r[3];$r[8].=($i==0)? " \__/":"\__/";}foreach($r as $o){if(strlen($o)-2 !== 4*$n)$o.=" ";echo $o."\n";}}

Vous pouvez enregistrer certains caractères en supprimant les espaces inutiles autour des opérateurs, par exemple entre =et .=.
ProgramFOX

Thx j'ai édité la réponse
Med

2

Prolog (SWI), 285 octets

a(N):-b(N,"  ||  || "," /  \\/  \\","_ /\\ \\/\\_","_ \\/\\ \\/_"," \\/ /\\/ /"," / /\\/ /\\"," \\  /\\  /"). b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-c(N,[Y,A],[E,F,C,D],T),writef([A,B,C,D|T]),nl,b(N,G,H,I,J,K,L,Z). c(1,L,_,L):-!. c(N,L,X,O):-M is N-1,c(M,L,X,T),append(X,T,O).

(Avec des espaces):

a(N):-
    b(N,
    "  ||  || ", 
    " /  \\/  \\", 
    "_ /\\ \\/\\_", 
    "_ \\/\\ \\/_", 
    " \\/ /\\/ /", 
    " / /\\/ /\\", 
    " \\  /\\  /").

b(N,[A|G],[B|H],[C|I],[D|J],[E|K],[F|L],[Y|Z]):-
    c(N,[Y,A],[E,F,C,D],T),
    writef([A,B,C,D|T]),
    nl,
    b(N,G,H,I,J,K,L,Z).

c(1,L,_,L):-!.
c(N,L,X,O):-
    M is N - 1,
    c(M,L,X,T),
    append(X,T,O).

J'ai essayé quelques façons de couper les cordes, mais aucune ne semblait battre cette méthode des colonnes naïves.


2

JavaScript (ES6), 158 154 148 137 octets

n=>`    __
 /\\/ - \\/
 /\\/\\-__/`.replace(/-/g,` \\
| / /\\ |
|  /\\/ |
 \\/\\`).replace(/(..)(....)/g,(_,l,m)=>l+m.repeat(n).slice(2))

Edit: 11 octets enregistrés grâce à @ Bálint.


@ Bálint Mais /(..)(.{4})/gc'est 13 octets, la même chose que /(..)(....)/g...
Neil

@ Bálint, j'ai réalisé que mon précédent enregistrement de 4 octets m'avait permis de le faire, mais que j'étais à l'extérieur de l'ordinateur.
Neil

@ Bálint Nice! J'avais cherché à éviter le segment répété \\ / \\ mais je n'avais pas pensé à vérifier une sous-chaîne répétée plus longue.
Neil

1

Java, 339 330 octets

class D{int n,i;public static void main(String[]a){new D(new Integer(a[0]));}D(int k){n=k;r("  __");p("\n ");r("/  \\");c();r("\\ \\/");p("\n ");r("/\\ \\");c();r("\\__/");}void c(){p("\n|");--n;r(" /\\/");p(" /\\ |\n| \\/");r(" /\\/");++n;p(" |\n ");}void p(String s){System.out.print(s);}void r(String s){for(i=n;i>0;--i)p(s);}}

Ma première solution contenait tellement de mots clés "statiques" qu'il était plus court de rendre les méthodes et les attributs non statiques et d'exécuter le code dans le constructeur.


1

PowerShell, 228 207 181 133 octets

%{"  "+"__  "*$_;" "+"/  \"*$_;$b="|"+" /\/"*$_+"`b |";$b;$c="| "+"\/ /"*$_+"`b|";$c;" "+"\ \/"*$_;" "+"/\ \"*$_;$b;$c;" "+"\__/"*$_}

Rappel - PowerShell n'attend pas automatiquement stdin. Vous devez diriger quelque chose, par exemple3|%{...}


0

SmileBASIC, 149 octets

INPUT N?"  __"*N
A$="| / /\ |
B$="|  /\/ |
K" /\/  \
K A$K B$K" \/\ \/
K" /\/\ \
K A$K B$K" \/\__/
DEF K A?SUBST$(A,2,4,MID$(MID$(A,2,4)*N,2,N*9))END

Chaque chaîne contient le motif à AACCBBDDdévelopper. AABB(CCBB)*DDLa CCBBpartie est répétée N fois, puis les 2 premiers caractères sont supprimés. (C'était plus court d'enlever des caractères du début que de la fin)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.