PowerShell v2 +, 217 205 190 187 184 bayt
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]
Giriş alır $bBir tamsayı olarak . $bNegatif ise , uygun şekilde yayınlamak için parens ile açıkça çevrelemeniz gerektiğini unutmayın (örneklere bakın), aksi takdirde PowerShell bunun bir dize olduğunu düşünecektir.
Çadırın hangi yöne baktığından bağımsız olarak, ilk satır aynıdır, birkaç alt çizgi; 4*abs(input)Aslında tam olarak çoğu. Bu numara $adaha sonra kullanılmak üzere saklanır . Ek olarak, artık $bdepolanan mutlak değere sahip $aolduğumuza göre,$b için, işareti için bir Boole'ye dönüşüyoruz $yve ve içine yerleştirilmiş eğik çizgimizi seçiyoruz $z.
Bir sonraki satır, çıktının oluşturulması ve formüle edilmesidir ve bir sersemlemektir, o yüzden hadi parçalayalım.
Biz aslında iki elemanlarının bir diziye indeksleme, konum (big long calculations saved into $x)ya $xdayanan,$b .
Hesaplamalar, çadır gövdesinin yapıldığı yerdir. Biz döngü 1..$a|%{...}. Her yineleme çadır gövdesinin bir çizgisini inşa ediyoruz. Doğru olan -1sola hizalı olacak şekilde, üzerinde bulunduğumuz çizgiye eşit sayıda boşlukla başlıyoruz . Bu $w, daha sonra depolanır ve uygun eğik çizgiyle ($ z, temel alınarak $b), sonra da ana kare sayısı, sonra diğer eğik çizgiyle birleştirilir $y, sonra alt satırda olup olmamıza bağlı olarak alt çizgi veya boşluk, daha sonra başka bir eğik çizgi $yve son olarak $wdikdörtgen bir dize oluşturmak için uygun sayıda boşluk ( ). Elde edilen dizge dizisi içine kaydedilir $x.
Dizinin sol yarısı seçildiyse (yani, giriş pozitif $bolduğundan Falseberi), $xher satır öğesini döndürüp tersine çevirmemiz gerekir - bu, takip eden boşlukların devreye girdiği yerdir; mesafeleri yeniden hesaplamak yerine çizgileri basitçe tersine çevirmemizi sağlar.
Eğer $bbir True, daha sonra dizinin sağ yarısı $xyerine seçilir.
Her iki durumda da, boru hattı şimdi bir dizi dizi içerir. Örtülü çıktılar Write-Output, program bitiminde, elemanlar arasında varsayılan yeni satır ile olur.
Örnekler
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (-5)
____________________
\ / /
\ / /
\ / /
\ / /
\/_________/
PS C:\Tools\Scripts\golfing> .\print-upside-down-tent.ps1 (4)
________________
\ \ /
\ \ /
\ \ /
\_______\/
3örneğin giriş için 12 uzunluğundaki dört diziyi (bir dikdörtgen) çıkarabilir miyiz ?