PowerShell v2 +, 217 205 190 187 184 byte
param($b)"_"*(($a=[math]::Abs($b))*4);$z,$y='/\'[($b=$b-lt0),!$b]
((($x=1..$a|%{($w=" "*($_-1))+$z+" "*(2*($a-$_))+$y+(' ','_')[$_-eq$a]*($a*2-1)+$y+$w})|%{-join$_[($a*4)..0]}),$x)[$b]
Lấy đầu vào $b
là một số nguyên. Lưu ý rằng nếu $b
là âm, bạn cần bao quanh nó một cách rõ ràng bằng các phép liệt kê để sử dụng nó một cách thích hợp (xem ví dụ), nếu không PowerShell sẽ nghĩ đó là một chuỗi.
Bất kể hướng nào mà lều phải đối mặt, dòng đầu tiên là như nhau, một loạt các dấu gạch dưới; chính xác 4*abs(input)
nhiều người trong số họ, thực sự. Số đó cũng được lưu trữ $a
để sử dụng sau. Ngoài ra, bây giờ chúng ta có giá trị tuyệt đối $b
được lưu trữ $a
, chúng ta biến $b
thành Boolean cho dấu hiệu của nó và chọn dấu gạch chéo được lưu trữ vào $y
và $z
.
Dòng tiếp theo đang xây dựng và hình thành đầu ra, và nó thật khó hiểu, vì vậy hãy phá vỡ nó.
Về cơ bản, chúng tôi đang lập chỉ mục thành một mảng gồm hai yếu tố, (big long calculations saved into $x)
hoặc $x
, dựa trên $b
.
Các tính toán là nơi xây dựng cơ thể lều. Chúng tôi lặp từ 1..$a|%{...}
. Mỗi lần lặp chúng ta sẽ xây dựng một đường của thân lều. Chúng tôi bắt đầu với một số khoảng trắng bằng với dòng # chúng tôi đang bật -1
, sao cho nó được căn trái một cách thích hợp. Nó được lưu trữ $w
để sử dụng sau này và được ghép với dấu gạch chéo thích hợp ($ z, dựa trên $b
), sau đó là số khung không gian, sau đó là dấu gạch chéo khác $y
, sau đó gạch dưới hoặc dấu cách tùy thuộc vào việc chúng ta có ở dòng dưới hay không, sau đó là một dấu gạch chéo khác $y
và cuối cùng là số dấu cách ( $w
) thích hợp để tạo chuỗi hình chữ nhật. Mảng kết quả của chuỗi được lưu trữ vào $x
.
Nếu nửa bên trái của mảng được chọn (nghĩa $b
là False
do đầu vào là dương), thì chúng ta cần lặp $x
lại và đảo ngược từng mục hàng - đây là nơi các khoảng trắng theo sau phát huy tác dụng; nó cho phép chúng ta đơn giản đảo ngược các dòng hơn là tính lại khoảng cách.
Nếu $b
là True
, thì một nửa bên phải của mảng $x
được chọn thay thế.
Trong cả hai trường hợp, đường ống hiện chứa một chuỗi các chuỗi. Đầu ra tiềm ẩn thông qua Write-Output
xảy ra khi hoàn thành chương trình, với dòng mới mặc định giữa các yếu tố.
Ví dụ
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (-5)
____________________
\ / /
\ / /
\ / /
\ / /
\/_________/
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (4)
________________
\ \ /
\ \ /
\ \ /
\_______\/
3
chẳng hạn?