SQL, 182 175 173 187 ไบต์
ไม่ใช่ว่ามันจะสั้นที่สุด แต่ก็ยังน่าขบขันในการพยายามลด sql;) lol ฉันทำสิ่งนี้ใน Oracle 11 อย่างไรก็ตามสิ่งเหล่านี้ควรเป็น SQL พื้นฐาน [แก้ไข] ตามที่ระบุไว้ฉันไม่ได้ใช้กฎเมื่ออินพุต = 1 - แสดงเพียง 2 บรรทัด ไม่สามารถคิดวิธีที่ดีกว่าที่จะทำอย่างไรก็ตามฉันได้บันทึกสองสามไบต์โดยการแก้ไขตรรกะ v;) เพิ่ม 2 ก่อนเวลาบันทึกสองไบต์โดยไม่ต้องทำซ้ำในภายหลัง [/ แก้ไข]
select decode(&i,1,'',rpad(' ',v,'____')||z)||rpad(' /',v,'\ /')||decode(y,1,'\')||z||rpad('/',v-1,'__\/')||decode(y,1,'__\')from(select 2+floor(&i/2)*4v,mod(&i,2)y,chr(10)z from dual);
[edit1] ลบช่องว่างที่ไม่จำเป็นออก [/ edit1] [edit2] เปลี่ยน && i เป็นเพียง & i มันลดลง 2 ตัวอักษร แต่บังคับให้ผู้ใช้ป้อน # ของรูปสามเหลี่ยมสองครั้ง ... : PI รู้ว่า "นิสัยการเขียนรหัสที่ดี" โดยใช้ && ฉันมีค่าใช้จ่าย 2 ไบต์ !! สยองขวัญ!! [/ edit2]
คำอธิบาย
(หมายเหตุ: ฉันใช้ && 1 ในคำอธิบายนี้ดังนั้นจะแจ้งให้หนึ่งครั้งเท่านั้น & 1 ข้างต้นประหยัดพื้นที่โค้ด แต่แจ้งหลายครั้ง;)
select -- line 1
decode(&&1,1,'', -- don't need line 1 if input is 1
rpad(' ',v,'____') || z ) || -- every pair of triangles
-- line 2
rpad(' /',v,'\ /') || -- every pair of triangles
decode(y,1,'\') || z || -- add the final triangle, input: 1,3,5 etc.
-- line 3
rpad('/',v-1,'__\/') || -- every pair of triangles
decode(y,1,'__\') -- add the final triangle, input: 1,3,5 etc.
from (select 2+floor(&&i/2)*4 v, -- common multiplier. 4 extra chars for every triangle pair
mod(&&i,2) y, -- Flag for the final triangle (odd inputs, 1,3,5, etc)
chr(10) z -- CR, here to save space.
from dual);
เอาท์พุต
SQL> accept i
1
SQL> /
/\
/__\
SQL> accept i
2
SQL> /
____
/\ /
/__\/
SQL> accept i
3
SQL> /
____
/\ /\
/__\/__\
SQL> accept i
12
SQL> /
________________________
/\ /\ /\ /\ /\ /\ /
/__\/__\/__\/__\/__\/__\/
SQL>