PowerShell v2 +, 217 205 190 187 184 bytes
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]
Recebe a entrada $bcomo um número inteiro. Observe que, se $bfor negativo, é necessário cercá-lo explicitamente com parênteses para convertê-lo adequadamente (veja exemplos); caso contrário, o PowerShell achará que é uma sequência.
Independentemente de qual direção a tenda está voltada, a primeira linha é a mesma, um monte de sublinhados; exatamente 4*abs(input)muitos deles, na verdade. Esse número também é armazenado $apara uso posterior. Além disso, agora que temos o valor absoluto de $barmazenado em $a, transformamos $bem um booleano para seu sinal e escolhemos nossas barras armazenadas em $ye $z.
A próxima linha está construindo e formulando a saída, e é uma bagunça, então vamos detalhar.
Estamos essencialmente indexando em uma matriz de dois elementos, (big long calculations saved into $x)ou com $xbase em $b.
Os cálculos são onde o corpo da barraca é construído. Nós fazemos um loop 1..$a|%{...}. A cada iteração, estamos construindo uma linha do corpo da barraca. Começamos com um número de espaços igual à linha em que estamos -1, para que fique alinhado à esquerda. Isso é armazenado $wpara mais tarde e concatenado com a barra apropriada ($ z, com base em $b), o número de espaços do doorframe, a outra barra $ye os sublinhados ou espaços, dependendo se estamos no resultado final ou não, depois outra barra $ye, finalmente, o número apropriado de espaços à direita ( $w) para construir uma sequência retangular. Essa matriz resultante de strings é armazenada $x.
Se a metade esquerda da matriz é seleccionado (ou seja, $bé Falseuma vez que a entrada foi positiva), em seguida, temos de percorrer $xe reverso cada item de linha - isto é, onde os espaços à direita entram em jogo; permite simplesmente reverter as linhas em vez de recalcular as distâncias.
Se $bfor True, a metade direita da matriz $xé selecionada.
Em qualquer um dos casos, o pipeline agora contém uma matriz de seqüências de caracteres. Saída implícita via Write-Outputacontece na conclusão do programa, com nova linha padrão entre os elementos.
Exemplos
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (-5)
____________________
\ / /
\ / /
\ / /
\ / /
\/_________/
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (4)
________________
\ \ /
\ \ /
\ \ /
\_______\/
3por exemplo?