Ruby , 111 99 77 73 68 64 57 56 ไบต์
-12 ไบต์ขอบคุณที่เบนจามินอลิซ , -43 ขอบคุณที่manatworkและ -2 ไบต์ขอบคุณที่ราคาหมึก
->i{s=[];puts (0...i).map{|j|s=(p=' '*j)+?/,*s;p+?\\},s}
ลองออนไลน์!
คำอธิบาย:
f=->i{ # instead of a function, use a lambda
s=[] # needs a helper variable *now*, for scope
puts( # puts takes arbitrary num of args; \n after each
(0...i).map{|j| # not from 0 to i but from 0 to i-1 (*three* dots)
s=(
p=' '*j # p will remain in scope inside of .map,
)
+?/ # character literal instead of string
,*s # essentially appending to the array
p+?\\ # p is what's returned by .map, not s!
}, # up until here, 1st arg to display
s # NOW, as the *2nd* arg, s is displayed
)
}
ทางเลือก (แต่นานกว่า) โซลูชั่น
เพื่อนอ่านคำตอบนี้แล้วพยายามหาแนวทางเพิ่มเติมอีกสองสามข้อ วางพวกเขาไว้ที่นี่ด้วยเพื่อไม่ให้มันไปขัดกับผืนทรายขนาดใหญ่
inject และ unshift ขนาด 72 ไบต์
->n{puts (0...n).inject([]){|s,i|i=' '*(n-1-i);s.unshift i+?\\;s<<i+?/}}
ลองออนไลน์!
downto, inject และ unshift, 80 ไบต์
->n{puts n.downto(1).map{|i|' '*(i-1)}.inject([]){|s,i|s<<i+?/;s.unshift i+?\\}}
ลองออนไลน์!
ที่น่าสนใจ, ลูปที่ไม่ซ้อนกันสองอัน, 127 ไบต์
->n{
r=->s,c{s[0..-(c+1)],s[-c..-1]=s[c..-1],s[0..c-1];s};
n.times{|i|puts r[' '*n+?\\,n-i]}
n.times{|i|puts r[' '*n+?/,i+1]}
}
ลองออนไลน์!