Château de cartes (version 1)

25

Version 2 ici .

Défi simple: étant donné un nombre entier, dessinez un château de cartes avec le nombre d'histoires donné. Si le nombre est négatif, dessinez la maison à l'envers. Exemples:

Input: 2
Output:

 /\
 --
/\/\

Input: 5
Output:

    /\
    --
   /\/\
   ----
  /\/\/\
  ------
 /\/\/\/\
 --------
/\/\/\/\/\

Input: 0
Output: <empty, whitespace or newline>

Input: -3
Output:

\/\/\/
 ----
 \/\/
  --
  \/

L'entrée peut être numérique ou une chaîne. La sortie doit être exactement comme indiqué, avec des espaces de début et / ou de fin et des retours à la ligne autorisés.

C'est , donc le programme / la fonction la plus courte pour chaque langue peut gagner!

Charlie
la source
Cela vient du bac à sable .
Charlie
Les nouvelles lignes principales sont-elles autorisées?
Shaggy
@Shaggy oui, vous pouvez également avoir des espaces blancs et des sauts de ligne de premier plan, tant que vous dessinez le château de cartes exactement comme indiqué. Cela ne me dérange pas s'il n'est pas aligné à gauche de l'écran.
Charlie
Pouvons-nous jeter et l'erreur input=0?
Rod
@Rod Si cela produit une sortie vide, il est autorisé par défaut
Luis Mendo

Réponses:

14

Python 2 , 97 95 94 92 octets

-2 octets grâce à Luka
Cette version produit une exception n=0, mais sans rien imprimer

n=input()*2
m=abs(n)
for i in range(2,m+1)[::n/m]:print(i/2*'/-\-'[i%2::2][::n/m]).center(m)

Essayez-le en ligne!

Version sans erreur, Python 2, 94 octets

n=input()*2
x=n>0 or-1
for i in range(2,x*n+1)[::x]:print(i/2*'/-\-'[i%2::2][::x]).center(n*x)

Essayez-le en ligne!

Barre
la source
x=n>0 or-1=>x=n>0or-1
Zacharý
@ Zacharý ne fonctionne pas, 0orsera interprété comme un nombre octa
Rod
Couper 2 octets plus: m=abs(n). Ensuite, au lieu de xmettre n/m, au lieu de x*nmettrem
Luka
9

05AB1E , 30 29 24 octets

ÄF„--Nׄ/\N>×}).C∊2ä¹0‹è

Essayez-le en ligne!

Explication

ÄF                         # for N in [0 ... abs(input-1)] do:
  „--N×                    # push the string "--" repeated N times
       „/\N>×              # push the string "/\" repeated N+1 times
             }             # end loop
              )            # wrap stack in a list
               .C          # pad strings on both sides to equal length
                 ∊         # vertically mirror the resulting string
                  2ä       # split in 2 parts
                    ¹0‹    # push input < 0
                       è   # index into the the list with the result of the comparison
Emigna
la source
7

PHP , 125 octets

saisir un retour à la ligne négatif

entrée positive nouvelle ligne

for($s=str_pad;++$i<$b=2*abs($argn);)$t.=$s($s("",2*ceil($i/2),["-","/\\"][1&$i]),$b," ",2)."
";echo$argn>0?$t:$t=strrev($t);

Essayez-le en ligne!

PHP , 130 octets

for(;++$i<$b=2*abs($a=$argn);)echo($s=str_pad)($s("",2*abs(($a<0?$a:$i&1)+($i/2^0)),["-",["/\\","\/"][0>$a]][1&$i]),$b," ",2)."
";

Essayez-le en ligne!

Jörg Hülsermann
la source
5

MATL , 39 octets

|:"G|@-:~'/\'G0<?P]@E:)htg45*c]xXhG0<?P

Essayez-le en ligne!

Explication

|         % Implicitly input, N. Absolute value
:"        % For k from 1 to that
  G|      %   Push absolute value of N again
  @-      %   Subtract k
  :       %   Range [1 2 ... N-k]
  ~       %   Convert to vector of N-k zeros
  '/\'    %   Push this string
  G0<     %   Is input negative?
  ?       %   If so
    P     %     Reverse that string (gives '\/')
  ]       %   End
  @E      %   Push 2*k
  :       %   Range [1 2 ... 2*k]
  )       %   Index (modularly) into the string: gives '/\/\...' or '\/\/...'
  h       %   Horizontally concatenate the vector of zeros and the string. Zeros
          %   are implicitly converted to char, and will be shown as spaces
  t       %   Duplicate
  g       %   Convert to logical: zeros remain as 0, nonzeros become 1
  45*c    %   Multiply by 45 (ASCII for '=') and convert to char
]         % End
x         % Delete (unwanted last string containing '=')
Xh        % Concatenate into a cell array
G0<       % Is input negative?
?         % If so
  P       %   Reverse that cell array
          % Implicit end. Implicit display
Luis Mendo
la source
1
Mec, c'était rapide !! J'espère que la version 2 ne sera pas si facile ... :-)
Charlie
4

C (gcc) , 169171 173 160 164 octets

#define F(A,B,C)for(i=A;B--;)printf(C);
#define P puts("");F(y,i," ")F(abs(n)-y
s,i,x,y;f(n){x=n<0;for(s=x?1-n:n;s--;){y=x?-n-s:s;P,i,x?"\\/":"/\\")y+=x;P,s>x&&i,"--")}}

+13 octets pour un bogue de cas négatif.

Essayez-le en ligne!

Non golfé (207 octets après la suppression de tous les espaces et de la nouvelle ligne):

s, i, x, y;
f(n) {
  x = n < 0;
  for (s = x ? 1 - n : n; s--;) {
    y = x ? - n - s : s;
    puts("");
    for (i = y; i--;) printf(" ");
    for (i = abs(n) - y; i--;) printf(x ? "\\/" : "/\\");;
    y += x;
    puts("");
    for (i = y; i--;) printf(" ");
    for (i = abs(n) - y; s > x && i--;) printf("--");;
  }
}
Keyu Gan
la source
1
@officialaimm fixed! merci
Keyu Gan
4

Fusain, 31 28 27 octets

FI⊟⪪θ-«←ι↓→/…\/ι↙»‖M¿‹N⁰‖T↓

Essayez-le en ligne! Le lien est vers la version détaillée du code. J'ai eu environ 4 réponses différentes de 32 octets, puis j'ai trouvé cela. Edit: enregistré 3 4 octets en effectuant la absmanipulation de chaîne en utilisant. Explication:

   ⪪θ-                          Split the input (θ = first input) on -
  ⊟                             Take the (last) element
 I                              Convert it to a number i.e. abs(θ)
F     «                         Repeat that many times
       ←ι                       Print half of the -s
         ↓                      Position for the /\s
          →/                    Print the first /
            …\/ι                Print half of any remaining \/s
                ↙               Position for the next row of -s
                 »              End of the loop
                  ‖M            Mirror everything horizontally
                    ¿‹N⁰        If the input was negative
                        ‖T↓     Reflect everything vertically
Neil
la source
Je savais qu'une réponse au charbon finirait par ¿‹θ⁰‖T↓. :-)
Charlie
Quand Charcoal est battu par 05AB1E dans un défi ASCII O_o
Gryphon -
@Gryphon Je n'ai pas un octet abs...
Neil
C'est vrai, c'est juste bizarre de voir ça. Vous fait vous demander où va le monde.
Gryphon - Réintègre Monica le
Ouais, ce serait 23 octets avec un abs intégré. (Félicitations pour 48K, btw)
ETHproductions
2

Japt , 40 38 octets

-2 octets grâce à @Shaggy

o½½@aXc)ç +"--/\\\\/"ò gYv *Ug)pXc a÷

Essayez-le en ligne!

Explication

o½½@aXc)ç +"--/\\\\/"ò gYv *Ug)pXc a÷              // implicit: U = input integer
o.5,.5,XYZ{UaXc)ç +"--/\\\\/"ò gYv *Ug)pXc a} qR    // ungolfed
o.5,.5,                                             // array [.5,U] with step size .5
       XYZ{                                 }       // mapped by the function: (X = value, Y = index)
           UaXc)                                    //   absolute diff between U and ceil(X)
                ç                                   //   " " times that value
                  +"--/\\\\/"ò g      )             //   plus ["--","/\","\/"].get(...
                                Yv                  //     if Y is even, 1, else 0
                                   *Ug              //     times sign(U)
                                       pXc a        //   repeated abs(ceil(X)) times
                                              qR    // all that joined with newlines
Justin Mariner
la source
38 octets .
Shaggy
2

Gaia , 21 octets

:┅“/\\“--”צ¦_€|ḣ¤ọ×ṣ

Explication

:                      Push 2 copies of the input
 ┅                     Get the range to the input. If positive: [1 .. n]. If negative: 
                       [-1 .. n]. If zero: [0].
  “/\\“--”             Push ["/\", "--"]
          צ¦          Repeat both of those strings by each number in the range. Strings go
                       in reverse order when repeated a negative number of times.
             _         Flatten the list
              €|       Centre-align the rows of the list
                ḣ      Remove the last row (the "--"s on the bottom)
                 ¤     Swap (bring input back to the top)
                  ọ    Sign: -1 for negative, 0 for 0, 1 for positive
                   ×   Repeat the list that many times; (-1 × list) reverses it
                    ṣ  Join with newlines and implicitly output
Chat d'affaires
la source
1

Mathematica, 140 octets

(T=Table;z=Column;B[a_]:=""<>"/\\"~T~a;If[#>0,m=0,m=Pi];z[Join[z/@T[{B@i,""<>"--"~T~i},{i,Abs@#-1}],{B@Abs@#}],Alignment->Center]~Rotate~m)&
J42161217
la source
1

Rétine , 116 111 105 octets

cela est devenu trop long: /

\d+
$*
+`^~?( *1*)1
 $1¶$&¶_$&
.*$

+`(_.*)1
$1--
1
/\
Ts`/\\`\\/`.*~.*
+`(.*)¶((.*¶)*)(~.*)
$2$4¶$1
~|_

Essayez-le en ligne!

l'entrée négative est désignée par ~n

ovs
la source
1

Perl 5 , 100 + 1 (-n) = 101 octets

$/=$_>0?'/\\':'\\/';push@r,$_=$"x--$q.$/x$_,y|/\\|-|r for 1..($q=abs);pop@r;say for$_<0?reverse@r:@r

Essayez-le en ligne!

Xcali
la source