ต้นไม้ ASCII art H


9

ต้นไม้ Hเป็นโครงสร้างต้นไม้เศษส่วนที่เริ่มต้นด้วยบรรทัด ในการวนซ้ำแต่ละครั้ง T branch จะถูกเพิ่มในจุดปลายทั้งหมด ในการท้าทายนี้คุณต้องสร้างการแสดง ASCII ของระดับต้นไม้ H ทุกวินาที

ระดับแรกมีเพียงสามตัวอักษรยัติภังค์ลบ:

---

ระดับถัดไปถูกสร้างซ้ำ:

  • สร้างเมทริกซ์ 2x2 ของสำเนาจากระดับก่อนหน้าโดยคั่นด้วยช่องว่างหรือบรรทัดสามบรรทัด
  • เชื่อมต่อกึ่งกลางของสำเนาด้วยเส้นศิลปะ ASCII ในรูปแบบของ H. ใช้-สำหรับเส้นแนวนอน|สำหรับเส้นแนวตั้งและ+เมื่อใดก็ตามที่เส้นตรงเข้าหากัน

ระดับที่สอง

-+-   -+-
 |     |
 +-----+
 |     |
-+-   -+-

ระดับที่สาม

-+-   -+-   -+-   -+-
 |     |     |     |
 +--+--+     +--+--+
 |  |  |     |  |  |
-+- | -+-   -+- | -+-
    |           |
    +-----------+
    |           |
-+- | -+-   -+- | -+-
 |  |  |     |  |  |
 +--+--+     +--+--+
 |     |     |     |
-+-   -+-   -+-   -+-

กฎระเบียบ

  • อินพุตเป็นจำนวนเต็มแทนระดับของแผนภูมิ ASCII art H ตามที่อธิบายไว้ข้างต้น ( ไม่ใช่ระดับต้นไม้ H จริง) ไม่ว่าจะเป็นศูนย์หรือหนึ่งดัชนี
  • ผลผลิตมีความยืดหยุ่น ตัวอย่างเช่นคุณสามารถพิมพ์ผลลัพธ์หรือส่งคืนสตริงที่คั่นด้วยบรรทัดใหม่รายการของสตริงสำหรับแต่ละบรรทัดหรืออาร์เรย์อักขระ 2 มิติ
  • คุณต้องใช้-, |, +และตัวอักษรพื้นที่
  • อนุญาตให้ใช้พื้นที่ต่อท้ายและอนุญาตให้ใช้พื้นที่ว่างได้สูงสุดสามรายการ

นี่คือรหัสกอล์ฟ คำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ


คำตอบ:


7

Canvas , 20 19 ไบต์

ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│

ลองที่นี่!

คำอธิบาย:

ø                    push an empty canvas
 ⁸«╵[              repeat input*2 + 1 times
     ↷               rotate clockwise
      L⇵             ceil(width/2)
        ;l⇵          ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
           └┌        reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
             ├       add 2 to the top ⌈w÷2⌉
              -×     "-" * (2 + ⌈w÷2⌉)
                ╋    in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
                 ‼   normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
                  │  and palindromize horizontally

7

ถ่าน 22 ไบต์

P-²FNF²«⟲T²+×⁺²κX²ι←‖O

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด 0 การจัดทำดัชนี คำอธิบาย:

P-²

พิมพ์สามต้นแรก-โดยปล่อยเคอร์เซอร์ไว้ที่กึ่งกลาง

FN

ทำซ้ำตามจำนวนครั้งที่กำหนด

F²«

ทำซ้ำสองครั้งในแต่ละHครั้ง แต่ละลูปจะสร้างใหญ่ขึ้นเล็กน้อยHจากลูปก่อนหน้านี้ แต่เราต้องการสลับHs

⟲T²

หมุนรูป

+×⁺²κX²ι←

วาดครึ่งหนึ่งของบรรทัดถัดไป

‖O

สะท้อนให้เห็นถึงขั้นตอนที่สมบูรณ์

ผลลัพธ์ในแต่ละการวนซ้ำมีดังนี้:

---

|   |
+---+
|   |

-+-   -+-
 |     | 
 +-----+ 
 |     | 
-+-   -+-

|   |   |   |
+-+-+   +-+-+
| | |   | | |
  |       |  
  +-------+  
  |       |  
| | |   | | |
+-+-+   +-+-+
|   |   |   |

-+-   -+-   -+-   -+-
 |     |     |     | 
 +--+--+     +--+--+ 
 |  |  |     |  |  | 
-+- | -+-   -+- | -+-
    |           |    
    +-----------+    
    |           |    
-+- | -+-   -+- | -+-
 |  |  |     |  |  | 
 +--+--+     +--+--+ 
 |     |     |     | 
-+-   -+-   -+-   -+-

หากคุณสงสัยว่าระดับ 5 เป็นอย่างไรการHย่อ / ขยายอย่างรวดเร็ว: i.imgur.com/EGapcrS.png
Paul


0

Perl 6 , 118 ไบต์

{map ->\y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2

ลองออนไลน์!

0 การจัดทำดัชนี ส่งคืนอาร์เรย์ของอักขระ 2 มิติ แนวคิดพื้นฐานคือการแสดงออก

b = y & -y   // Isolate lowest one bit
b <= x % (4*b) <= 3*b

สร้างรูปแบบ

--- --- --- ---
 -----   ----- 
--- --- --- ---
   ---------   
--- --- --- ---
 -----   ----- 
--- --- --- ---

คำอธิบาย

{ ... }o*R**2  # Feed $_=2**$n into block
map ->\y{ ... },2..^$_*4  # Map y=2..2**n*4-1
map { ... },2..^$_*6      # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]]    # Choose char depending on base-2 number from two Bools
map { ... }  # Map coordinates to Bool
  # Horizontal lines
  ,$^x  # Modulo 8*¾=6
  ,y/2    # Skip every second row
  # Vertical lines
  ,y      # Modulo 8
  ,$x/3   # Skip every third column
   -$_    # Empty middle column
# Map using expression
$^b%%1*$b&&  # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2  # Pattern with modulo 8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.