Nhà thẻ (phiên bản 1)


25

Phiên bản 2 tại đây .

Thử thách đơn giản: đưa ra một số nguyên, vẽ một ngôi nhà thẻ với số lượng câu chuyện nhất định. Nếu số âm, vẽ nhà lộn ngược. Ví dụ:

Input: 2
Output:

 /\
 --
/\/\

Input: 5
Output:

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

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

Input: -3
Output:

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

Đầu vào có thể là số hoặc một chuỗi. Đầu ra phải chính xác như được hiển thị, với khoảng trắng ở đầu và / hoặc dấu và dòng mới được phép.

Đây là , vì vậy có thể chương trình / chức năng ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!


Điều này đến từ hộp cát .
Charlie

Được hàng đầu mới được phép?
Shaggy

@Shaggy vâng, bạn cũng có thể có các khoảng trắng và dòng mới hàng đầu, miễn là bạn vẽ ngôi nhà của các thẻ chính xác như được hiển thị. Tôi không phiền nếu nó không được đặt ở bên trái màn hình.
Charlie

Chúng ta có thể ném và lỗi trên input=0?
Rod

@Rod Nếu điều đó tạo ra đầu ra trống thì nó được phép theo mặc định
Luis Mendo

Câu trả lời:


14

Python 2 , 97 95 94 92 byte

-2 byte nhờ Luka
Phiên bản này tạo ra ngoại lệ n=0, nhưng không in bất cứ thứ gì

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)

Hãy thử trực tuyến!

Phiên bản không lỗi, 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)

Hãy thử trực tuyến!


x=n>0 or-1=>x=n>0or-1
Zacharý

@ Zacharý không hoạt động, 0orsẽ được hiểu là số octa
Rod

Cắt thêm 2 byte : m=abs(n). Sau đó, thay vì xđặt n/m, thay vì x*nđặtm
Luka

9

05AB1E , 30 29 24 byte

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

Hãy thử trực tuyến!

Giải trình

Ä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

7

PHP , 125 byte

đầu vào tiêu cực hàng đầu

đầu vào dòng mới tích cực

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

Hãy thử trực tuyến!

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

Hãy thử trực tuyến!


5

MATL , 39 byte

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

Hãy thử trực tuyến!

Giải trình

|         % 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

1
Trời ơi, nhanh quá !! Tôi hy vọng phiên bản 2 sẽ không dễ dàng như vậy ... :-)
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 cho trường hợp lỗi âm.

Hãy thử trực tuyến!

Ungolfed (207 byte sau khi xóa tất cả khoảng trắng và dòng mới):

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("--");;
  }
}

1
@officialaimm đã sửa! cảm ơn
Keyu Gan

4

Than, 31 28 27 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Tôi đã có khoảng 4 câu trả lời 32 byte khác nhau sau đó tìm thấy điều này. Chỉnh sửa: Đã lưu 3 4 byte bằng cách thực hiện absthao tác sử dụng chuỗi. Giải trình:

   ⪪θ-                          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

Tôi biết rằng một câu trả lời Than sẽ kết thúc với ¿‹θ⁰‖T↓. :-)
Charlie

Khi Char than bị đánh bại bởi 05AB1E trong một thử thách nghệ thuật ASCII O_o
Gryphon - Tái lập Monica

@Gryphon Tôi không có một byte abs...
Neil

Đúng, thật lạ khi thấy điều này. Làm cho bạn tự hỏi những gì thế giới sẽ đến.
Gryphon - Phục hồi Monica

Vâng, đây sẽ là 23 byte với một abs dựng sẵn. (Chúc mừng 48K, btw)
Sản phẩm điện tử

2

Japt , 40 38 byte

-2 byte nhờ @Shaggy

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

Hãy thử trực tuyến!

Giải trình

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


2

Gaia , 21 byte

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

Giải trình

:                      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

1

Toán học, 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)&


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.