House of cards (versi 1)

25

Versi 2 di sini .

Tantangan sederhana: diberi bilangan bulat, menggambar rumah kartu dengan jumlah cerita yang diberikan. Jika angkanya negatif, gambar rumah terbalik. Contoh:

Input: 2
Output:

 /\
 --
/\/\

Input: 5
Output:

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

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

Input: -3
Output:

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

Input dapat berupa angka atau string. Keluaran harus persis seperti yang ditunjukkan, dengan spasi di depan dan / atau trailing serta baris baru diperbolehkan.

Ini adalah , jadi semoga program / fungsi terpendek untuk setiap bahasa menang!

Charlie
sumber
Ini berasal dari kotak pasir .
Charlie
Apakah baris baru terkemuka diizinkan?
Shaggy
@ Shaggy ya, Anda juga dapat memiliki spasi putih dan baris baru, selama Anda menggambar rumah kartu persis seperti yang ditunjukkan. Saya tidak keberatan jika tidak sejajar di sebelah kiri layar.
Charlie
Bisakah kita melempar dan salah input=0?
Rod
@Rod Jika itu menghasilkan output kosong itu diizinkan secara default
Luis Mendo

Jawaban:

14

Python 2 , 97 95 94 92 byte

-2 byte terima kasih kepada Luka
Versi ini menghasilkan pengecualian n=0, tetapi tanpa mencetak apa pun

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)

Cobalah online!

Versi non-kesalahan, Python 2, 94 byte

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)

Cobalah online!

tongkat
sumber
x=n>0 or-1=>x=n>0or-1
Zacharý
@ Zacharý tidak berfungsi, 0orakan ditafsirkan sebagai angka okta
Rod
Potong 2 byte lagi: m=abs(n). Kemudian, bukannya xput n/m, bukannya x*nputm
Luka
9

05AB1E , 30 29 24 byte

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

Cobalah online!

Penjelasan

Ä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
sumber
7

PHP , 125 byte

masukan baris baru negatif

masukan baris baru yang positif

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);

Cobalah online!

PHP , 130 byte

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)."
";

Cobalah online!

Jörg Hülsermann
sumber
5

MATL , 39 byte

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

Cobalah online!

Penjelasan

|         % 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
sumber
1
Sobat, itu cepat !! Saya harap versi 2 tidak akan semudah ini ... :-)
Charlie
4

C (gcc) , 169171 173 160 164 byte

#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 byte untuk bug kasus negatif.

Cobalah online!

Tidak digabungkan (207 byte setelah menghapus semua spasi dan baris baru):

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
sumber
1
@ resmi diperbaiki! terima kasih
Keyu Gan
4

Arang, 31 28 27 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Saya punya sekitar 4 jawaban 32 byte yang berbeda kemudian menemukan ini. Sunting: Disimpan 3 4 byte dengan melakukan absmanipulasi string menggunakan. Penjelasan:

   ⪪θ-                          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
sumber
Saya tahu bahwa jawaban Arang akan berakhir dengan ¿‹θ⁰‖T↓. :-)
Charlie
Ketika Charcoal dikalahkan oleh 05AB1E pada tantangan ASCII-art O_o
Gryphon - Reinstate Monica
@Gryphon Saya tidak punya satu byte abs...
Neil
Benar, aneh rasanya melihat ini. Membuat Anda bertanya-tanya apa yang akan terjadi di dunia.
Gryphon - Reinstate Monica
Ya, ini akan menjadi 23 byte dengan abs bawaan. (Selamat 48K, btw)
ETHproduksi
2

Japt , 40 38 byte

-2 byte terima kasih kepada @Shaggy

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

Cobalah online!

Penjelasan

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
sumber
38 byte .
Shaggy
2

Gaia , 21 byte

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

Penjelasan

:                      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
Kucing Bisnis
sumber
1

Mathematica, 140 byte

(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
sumber
1

Retina , 116 111 105 byte

ini terlalu lama: /

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

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

Cobalah online!

input negatif dilambangkan sebagai ~n

ovs
sumber
1

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

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

Cobalah online!

Xcali
sumber