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 $b
Bir tamsayı olarak . $b
Negatif 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 $a
daha sonra kullanılmak üzere saklanır . Ek olarak, artık $b
depolanan mutlak değere sahip $a
olduğumuza göre,$b
için, işareti için bir Boole'ye dönüşüyoruz $y
ve 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 $x
dayanan,$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 -1
sola 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 $y
ve son olarak $w
dikdö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 $b
olduğundan False
beri), $x
her 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 $b
bir True
, daha sonra dizinin sağ yarısı $x
yerine 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 ?