PowerShell v2 +, 217 205 190 187 184 байт
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]
Вводиться $bяк ціле число. Зауважте, що якщо $bце негатив, вам потрібно явно оточити його паренами, щоб належним чином надати його (див. Приклади), інакше PowerShell подумає, що це рядок.
Незалежно від того, в якому напрямку виходить намет, перший рядок такий же, купа підкреслених; саме 4*abs(input)багато хто з них, на самому ділі. Це число також зберігається $aдля подальшого використання. Крім того, тепер ми маємо абсолютне значення $bзберігається в $a, ми переходимо $bв логічне значення для його знака, і вибрати наші косі зберігаються в $yі $z.
Наступний рядок - це побудова та формулювання результатів, і це дози, тому давайте розбимо його.
Ми по суті індексуємо масив з двох елементів, (big long calculations saved into $x)або $x, виходячи з цього $b.
Розрахунки там, де побудовано тіло намету. Ми з циклу 1..$a|%{...}. Кожну ітерацію ми будуємо лінію корпусу намету. Починаємо з кількості пробілів, рівних лінії №, на якій ми знаходимось -1, щоб вона була належним чином вирівняна ліворуч. Це зберігається в $wподальшому і об'єднується з відповідною косою рисою ($ z, виходячи з $b), потім числом пробілів у дверях, потім іншим косою рисою $y, а потім підкресленням або пробілами залежно від того, знаходимось у нижній лінії чи ні, потім ще одна коса риса $yі, нарешті, відповідна кількість пробілів ( $w) для побудови прямокутної рядки. Цей отриманий масив рядків зберігається в $x.
Якщо обрана ліва половина масиву (тобто, $bце , Falseтак як вхідний сигнал був позитивним), то ми повинні петлі через $xта зворотний кожен елемент рядка - це де кінцеві прогалини вступають в гру; це дозволяє нам просто перевернути лінії, а не перерахувати відстані.
Якщо $bє True, то права половина масиву $xобрана замість цього.
У будь-якому випадку трубопровід тепер містить масив рядків. Неявний вихід через Write-Outputвідбувається в процесі завершення програми, з новим рядком між елементами за замовчуванням.
Приклади
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (-5)
____________________
\ / /
\ / /
\ / /
\ / /
\/_________/
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (4)
________________
\ \ /
\ \ /
\ \ /
\_______\/
3наприклад?