โค้งมังกรของ ASCII


26

บทนำ

The Dragon's Curveเป็นเส้นโค้งแฟร็กทัลที่สะดุดตาปรากฏบนหน้าชื่อส่วนของนวนิยาย Jurassic Park

มันสามารถอธิบายได้ง่าย ๆ ว่าเป็นกระบวนการของการพับแถบกระดาษตามที่อธิบายไว้ในบทความ Wikipedia เกี่ยวกับเส้นโค้งนี้

การทำซ้ำสองสามครั้งแรกของการสร้างเส้นโค้งนี้จะมีลักษณะเช่นนี้ (ให้เครดิตกับ Wikipedia สำหรับรูปภาพ)

ป้อนคำอธิบายรูปภาพที่นี่

ความท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่กำหนดให้เป็นจำนวนเต็ม n เป็นอินพุทเอาท์พุทซ้ำที่ n ของเส้นโค้งมังกรเป็นศิลปะ ASCII โดยใช้สัญลักษณ์_และ|

  • คุณมีการส่งออกรูปโดยใช้เพียง|, _และช่องว่าง คุณไม่สามารถส่งออกเส้นโค้งเป็นพล็อตหรืออะไรก็ได้
  • คุณสามารถรับอินพุตเป็นอาร์กิวเมนต์โปรแกรมใน STDIN หรือเป็นพารามิเตอร์ฟังก์ชัน
  • อินพุตจะเป็นจำนวนเต็ม> = 0 โปรแกรมของคุณควรทำงานกับค่าอินพุตที่เหมาะสมโดย 12 เป็นค่าสูงสุดในกรณีทดสอบที่เสนอ
  • การวนซ้ำครั้งแรกจะมีลักษณะเช่นนี้

    • การทำซ้ำ 0 คือ

      _
      
    • การวนซ้ำ 1 คือ

      _|
      
    • การทำซ้ำ 2 คือ

      |_ 
       _|
      
  • หนึ่งบรรทัดต่อท้ายที่สิ้นสุดก็โอเค ไม่อนุญาตให้เว้นวรรคต่อท้ายนอกเหนือจากการเติมบรรทัดจนถึงอักขระขวาสุดในเส้นโค้ง

  • ไม่มีการละเมิดช่องโหว่มาตรฐานตามปกติ

กรณีทดสอบ

  • อินพุต 0

เอาท์พุต

_
  • อินพุต 3

เอาท์พุต

   _   
|_| |_ 
     _|
  • อินพุต 5

เอาท์พุต

     _   _   
    |_|_| |_ 
 _   _|    _|
|_|_|_       
  |_|_|      
    |_       
     _|      
  |_|        
  • อินพุต 10

เอาท์พุต

           _       _                                           
         _|_|    _|_|                                          
        |_|_   _|_|_   _                                       
         _|_|_| |_| |_|_|                                      
   _    |_|_|_        |_                                       
 _|_|    _| |_|        _|                                      
|_|_   _|_          |_|                                        
 _|_|_|_|_|_                                                   
|_| |_|_|_|_|_                                                 
     _|_|_| |_|                                                
    |_| |_                                                     
         _|_   _   _           _   _           _   _           
   _    |_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_         
 _|_|    _|_|_|_|_| |_|    _   _|_| |_|    _   _|_| |_|        
|_|_   _|_|_|_|_|_        |_|_|_|_        |_|_|_|_             
 _|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_   _   _   
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ 
     _|_|    _|_|    _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
    |_|     |_|     |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_     
                         _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_   
                   _    |_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_ 
                 _|_|    _|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|
                |_|_   _|_|_|_|_|_|_|_|_|_        |_|_|_|_     
                 _|_|_|_|_|_|_|_|_|_|_|_|_|_        |_| |_|    
                |_| |_|_|_| |_|_|_| |_|_|_|_|_                 
                     _|_|    _|_|    _|_|_| |_|                
                    |_|     |_|     |_| |_                     
                                         _|_   _   _           
                                   _    |_|_|_|_|_|_|_         
                                 _|_|    _|_|_|_|_| |_|        
                                |_|_   _|_|_|_|_|_             
                                 _|_|_|_|_|_|_|_|_|_   _   _   
                                |_| |_|_|_|_|_|_|_|_|_|_|_|_|_ 
                                     _|_|_|_|_|_|_|_|_|_|_| |_|
                                    |_| |_|_|_|_|_|_|_|_|_     
               _   _                     _|_|_| |_| |_|_|_|_   
              |_|_| |_             _    |_|_|_        |_|_|_|_ 
           _   _|    _|          _|_|    _| |_|    _   _|_| |_|
          |_|_|_                |_|_   _|_        |_|_|_|_     
            |_|_|                _|_|_|_|_|_        |_| |_|    
              |_   _       _    |_|_|_|_|_|_|_                 
           _   _|_|_|    _|_|    _|_|_|_|_| |_|                
          |_|_|_|_|_   _|_|_   _|_|_|_|_|_                     
            |_| |_| |_|_|_|_|_| |_| |_|_|_|_                   
                      |_|_|_|_        |_|_|_|_                 
                   _   _|_| |_|    _   _|_| |_|                
                  |_|_|_|_        |_|_|_|_                     
                    |_| |_|         |_| |_|                    
  • อินพุต 12

เอาท์พุต

                                                               _   _           _   _                                           _   _           _   _                                           
                                                              |_|_|_|_        |_|_|_|_                                        |_|_|_|_        |_|_|_|_                                         
                                                           _   _|_| |_|    _   _|_| |_|                                    _   _|_| |_|    _   _|_| |_|                                        
                                                          |_|_|_|_        |_|_|_|_                                        |_|_|_|_        |_|_|_|_                                             
                                                            |_|_|_|_   _   _|_|_|_|_   _   _                                |_|_|_|_   _   _|_|_|_|_   _   _                                   
                                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                 
                                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                            _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                                
                                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                     
                                               _   _        |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_                   _   _        |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_                                   
                                              |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                                 
                                           _   _|_| |_|    _   _|_|_|_|_|_| |_|    _   _|_| |_|            _   _|_| |_|    _   _|_|_|_|_|_| |_|    _   _|_| |_|                                
                                          |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                |_|_|_|_        |_|_|_|_|_|_|_|_        |_|_|_|_                                     
                                            |_|_|_|_   _   _|_|_|_|_|_|_|_|_        |_| |_|                 |_|_|_|_   _   _|_|_|_|_|_|_|_|_        |_| |_|                                    
                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                                 
                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                            _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|                                                
                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_                                                     
                                            |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_   _   _           _   _        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _   _           _   _           _   _           
                                                      |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_         
                                                   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|    _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|    _   _|_| |_|        
                                                  |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_             
                                                    |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_   _   _   
                                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_ 
                                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|
                                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_     
                                               _   _        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|_|_|_| |_| |_|_|_|_   
                                              |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_           _    |_|_|_|_|_| |_|_           _    |_|_|_|_|_|_|_|_|_|_|_        |_|_|_|_ 
                                           _   _|_| |_|    _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|    _|_|        _|_|    _|_|_|_|    _|_|        _|_|    _|_|_|_|_|_|_|_|_| |_|    _   _|_| |_|
                                          |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_    |_|         |_|_   _|_|_|_|_    |_|         |_|_   _|_|_|_|_|_|_|_|_|_        |_|_|_|_     
                                            |_|_|_|_   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|_|_|_|_|_|_        |_| |_|    
                                              |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _            |_| |_|_|_| |_|_                |_| |_|_|_| |_|_|_| |_|_|_|_|_                 
                                           _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                _|_|    _|_|                    _|_|    _|_|    _|_|_| |_|                
                                          |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_   _            |_|     |_|                     |_|     |_|     |_| |_                     
                                            |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                                                                _|_   _   _           
                                                      |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| |_|_                                                           _    |_|_|_|_|_|_|_         
                                                   _   _|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|    _|_|                                                        _|_|    _|_|_|_|_| |_|        
                                                  |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_    |_|                                                         |_|_   _|_|_|_|_|_             
                                                    |_| |_| |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|                                                                _|_|_|_|_|_|_|_|_|_   _   _   
           _       _                                          |_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_   _                                                            |_| |_|_|_|_|_|_|_|_|_|_|_|_|_ 
         _|_|    _|_|                                      _   _|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|                                                                _|_|_|_|_|_|_|_|_|_|_| |_|
        |_|_   _|_|_   _                                  |_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_   _                                                            |_| |_|_|_|_|_|_|_|_|_     
         _|_|_| |_| |_|_|                      _   _        |_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                                      _   _                     _|_|_| |_| |_|_|_|_   
   _    |_|_|_        |_                      |_|_|_|_        |_|_| |_|_           _    |_|_|_|_|_| |_|_                                      |_|_| |_             _    |_|_|_        |_|_|_|_ 
 _|_|    _| |_|        _|                  _   _|_| |_|    _   _|    _|_|        _|_|    _|_|_|_|    _|_|                                  _   _|    _|          _|_|    _| |_|    _   _|_| |_|
|_|_   _|_          |_|                   |_|_|_|_        |_|_|_    |_|         |_|_   _|_|_|_|_    |_|                                   |_|_|_                |_|_   _|_        |_|_|_|_     
 _|_|_|_|_|_                                |_|_|_|_   _   _|_|_|                _|_|_|_|_|_|_|_|                                           |_|_|                _|_|_|_|_|_        |_| |_|    
|_| |_|_|_|_|_                                |_|_|_|_|_|_|_|_|_   _            |_| |_|_|_| |_|_                                              |_   _       _    |_|_|_|_|_|_|_                 
     _|_|_| |_|                            _   _|_|_|_|_|_|_|_|_|_|_|                _|_|    _|_|                                          _   _|_|_|    _|_|    _|_|_|_|_| |_|                
    |_| |_                                |_|_|_|_|_|_|_|_|_|_|_|_|_   _            |_|     |_|                                           |_|_|_|_|_   _|_|_   _|_|_|_|_|_                     
         _|_   _   _           _   _        |_|_|_|_|_|_|_|_|_|_|_|_|_|_|                                                                   |_| |_| |_|_|_|_|_| |_| |_|_|_|_                   
   _    |_|_|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_| |_|_                                                                              |_|_|_|_        |_|_|_|_                 
 _|_|    _|_|_|_|_| |_|    _   _|_| |_|    _   _|_|_|_|_|_|_|_|_|    _|_|                                                                          _   _|_| |_|    _   _|_| |_|                
|_|_   _|_|_|_|_|_        |_|_|_|_        |_|_|_|_|_|_|_|_|_|_|_    |_|                                                                           |_|_|_|_        |_|_|_|_                     
 _|_|_|_|_|_|_|_|_|_   _   _|_|_|_|_   _   _|_|_|_|_|_|_|_|_|_|_|                                                                                   |_| |_|         |_| |_|                    
|_| |_|_|_| |_|_|_| |_|_|_|_|_|_|_|_|_|_|_| |_|_|_| |_|_|_|_|_|_   _                                                                                                                           
     _|_|    _|_|    _|_|_|_|_|_|_|_|_|_|    _|_|    _|_|_|_|_|_|_|_|                                                                                                                          
    |_|     |_|     |_| |_|_|_|_|_|_|_|_    |_|     |_| |_|_|_|_|_|_   _                                                                                                                       
                         _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                                                                                                                      
                   _    |_|_|_|_|_| |_|_           _    |_|_|_|_|_| |_|_                                                                                                                       
                 _|_|    _|_|_|_|    _|_|        _|_|    _|_|_|_|    _|_|                                                                                                                      
                |_|_   _|_|_|_|_    |_|         |_|_   _|_|_|_|_    |_|                                                                                                                        
                 _|_|_|_|_|_|_|_|                _|_|_|_|_|_|_|_|                                                                                                                              
                |_| |_|_|_| |_|_                |_| |_|_|_| |_|_                                                                                                                               
                     _|_|    _|_|                    _|_|    _|_|                                                                                                                              
                    |_|     |_|                     |_|     |_|                                                                                                                                

เกณฑ์การให้คะแนน

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในหน่วยไบต์ชนะ


ฉันแน่ใจว่าบางคนจะบ่นเกี่ยวกับความคลุมเครือของ 'ช่องว่างจำนวนมาก' ดังนั้นวิธีที่จะผูก asymptotic?
feersum

1
@feersum ดีฉันไม่อนุญาตให้เว้นวรรคต่อท้ายพร้อมกันดังนั้นไม่มีใครจะบ่นเลย!
ทำให้เสียชีวิต

2
ฉันบ่น ... ตอนนี้คุณกำลังเป็นนาซีที่ว่างเปล่า!
feersum

@feersum และคุณเป็นวงรีแนวนอนนาซี!
เครื่องมือเพิ่มประสิทธิภาพ

นี่เป็นคำถามเศษส่วนที่ดีที่สุดที่เคยมีมาฉันหวังว่าฉันจะมีเวลาเข้าร่วม! การหมุนโค้งไปตาม 90,180,270 องศาหรือไม่ก็ต้องแสดงตามตัวอย่างหรือไม่?
เลเวลริเวอร์เซนต์

คำตอบ:


9

Ruby, 239 201 ไบต์

นี่คือฟังก์ชั่นแลมบ์ดาที่ควรเรียกในลักษณะเดียวกับรุ่นที่ไม่ได้รับการดัดแปลง

การปรับปรุงการเล่นกอล์ฟรวมถึง: การมอบหมาย8<<n/2ให้กับตัวแปรสำหรับการใช้ซ้ำ uptoวนแทนeachห่วง ผู้ประกอบการที่ประกอบไปด้วยแทนif..else..end; ใช้ใน[y,y+=d].maxการคำนวณที่จะพิมพ์|; การใช้งาน?_และ?|แทนการเทียบเท่า'|'และ'_'; และกำจัดซ้ำซ้อน%4(ขอบคุณ Sp3000)

->n{a=Array.new(m=8<<n/2){" "*m}
p=q=1+x=y=m/2
r=3
1.upto(1<<n){|i|d=(r&2)-1
r%2>0?(a[y][x+=d]=?_
x+=d):(a[[y,y+=d].max][x]=?|
p=x<p ?x:p
q=x>q ?x:q)
r+=i/(i&-i)}
a.delete(a[0])
puts a.map{|e|e[p..q]}}

มันอาศัยสูตรต่อไปนี้จาก Wikipedia:

ก่อนอื่นให้ Express n ในรูปแบบ k * (2 ^ m) โดยที่ k คือเลขคี่ ทิศทางของเทิร์นที่ n ถูกกำหนดโดย k mod 4 นั่นคือส่วนที่เหลือทางซ้ายเมื่อ k ถูกหารด้วย 4 หาก k mod 4 เป็น 1 ดังนั้นเทิร์นที่ n คือ R; ถ้า k mod 4 เป็น 3 ดังนั้นเทิร์นที่ n คือ L

Wikipedia ให้รหัสต่อไปนี้:

มีวิธีหนึ่งที่ไม่เรียกซ้ำแบบง่าย ๆ ในการใช้วิธี k mod 4 ข้างต้นในการค้นหาทิศทางการเลี้ยวในโค้ด การรักษาเทิร์น n เป็นเลขฐานสองให้คำนวณค่าบูลีนต่อไปนี้: bool turn = (((n & −n) << 1) & n) != 0

ฉันปรับปรุงสิ่งนี้i/(i&-i)%4ซึ่งใช้เทคนิคเดียวกับการใช้นิพจน์i&-iเพื่อค้นหาตัวเลขที่มีนัยสำคัญน้อยที่สุด แต่การแสดงออกของฉันให้ 1 (สำหรับเลี้ยวซ้าย) หรือ 3 (สำหรับเลี้ยวขวา) โดยตรงซึ่งสะดวกในการติดตามทิศทางเป็นตัวเลข0..3(ใน สั่งซื้อเหนือ, ตะวันตก, ใต้, ตะวันออกสำหรับเหตุผลการเล่นกอล์ฟ)

Ungolfed ต้นฉบับในโปรแกรมทดสอบ

f=->n{
  a=Array.new(8<<n/2){" "*(8<<n/2)}  #Make an array of strings of spaces of appropriate size 
  p=q=1+x=y=4<<n/2                   #set x&y to the middle of the array, p&q to the place where the underscore for n=0 will be printed.                             
  r=3                                #direction pointer, headed East
  (1..1<<n).each{|i|                 #all elements, starting at 1
    d=(r&2)-1                          #d is +1 for East and South, -1 for West and North
    if r%2>0                           #if horizontal
      a[y][x+=d]='_'                     #move cursor 1 position in direction d, print underscore,
      x+=d                               #and move again.
    else                               #else vertical
      a[(y+([d,0].max))][x]='|'          #draw | on the same line if d negative, line below if d positive
      y+=d                               #move cursor
      p=x<p ?x:p                         #update minimum and maximum x values for whitespace truncation later
      q=x>q ?x:q                         #(must be done for vertical bars, to avoid unnecesary space in n=0 case)
    end
    r=(r+i/(i&-i))%4                   #update direction
  }
  a.delete(a[0])                     #first line of a is blank. delete all blank lines.
  puts a.map!{|e|e[p..q]}                 #use p and q to truncate all strings to avoid unnecessary whitespace to left and right.
}


f.call(0)
f.call(2)
f.call(3)
f.call(11)

@Falize ฟังก์ชั่นทั้งสองนี้เหมือนกัน (ปัจจุบัน) เหมือนกัน (ยกเว้นคอมเม้นท์และช่องว่าง) ฉันได้เพิ่มการพิมพ์ไปที่ stdout แทนที่จะคืนค่า (+5 ไบต์) และลบf=จุดเริ่มต้นเนื่องจากไม่นับนิรนาม นิยามฟังก์ชั่น (-2 ไบต์) เล่นกอล์ฟได้มากขึ้นในวันพรุ่งนี้ โปรดทราบว่าคุณจะต้องใช้งานฟังก์ชั่น golfed โดยกำหนดให้กับตัวแปรf=->n{.....}และเรียกมันโดยใช้f.call(n)ดังตัวอย่างโปรแกรมทดสอบ
เลเวลริเวอร์เซนต์

1
@ ทำให้ BTW ฉันคิดว่าเศษส่วนดูยอดเยี่ยมมากในคอนโซลของฉัน ขอบคุณสำหรับความท้าทาย
เลเวลริเวอร์เซนต์

@ SP3000 แน่นอน%4ไม่จำเป็นเช่นrจะใช้เฉพาะในการแสดงออกและr%2 r&2ขอบคุณสำหรับทิป. ตอนนี้ฉันลงมาที่ 202.
เลเวลริเวอร์เซนต์

8

Python 2, 270 222 ไบต์

y=X=Y=0
i=m=x=1
D={}
k=2**input()
while~k+i:j=Y+(y>0);s={2*X+x};D[j]=D.get(j,s)|s;m=min(m,*s);Y+=y;X+=x;exec i/(i&-i)*"x,y=y,-x;";i+=1
for r in sorted(D):print"".join(" | _"[(n in D[r])+n%2*2]for n in range(m,max(D[r])+1))

ตอนนี้ใช้สูตรสำหรับเทิร์นที่ n ผมเห็น(((n & −n) << 1) & n)สูตรในวิกิพีเดีย แต่ไม่ได้ตระหนักถึงวิธีการที่มีประโยชน์มันก็จนกว่าฉันเห็นมันใน@ steveverrill ของคำตอบ จริง ๆ แล้วฉันวาง%4เช่นกันดังนั้นจึงมีการหมุนวนมากเกิดขึ้นทำให้อินพุตขนาดใหญ่ใช้เวลาสักครู่


คำพูดด้านข้าง: นี่ไม่ใช่เอาท์พุทแบบกราฟิก แต่นี่คือบางส่วนของเต่าที่เล่นกอล์ฟ:

from turtle import*
for i in range(1,2**input()+1):fd(5);lt(i/(i&-i)*90)

ตราบใดที่มันใช้เวลาไม่ถึงหนึ่งชั่วโมงในการวิ่งก็เป็นเรื่องดีสำหรับฉัน
Fatalize

ถ้าผมเข้าใจอย่างถูกต้องรหัสที่สองของคุณอาจมีการเปลี่ยนแปลงเล็กน้อยที่จะกลายเป็นคำตอบให้กับความท้าทายนี้
nedla2004

3

C #, 337 ไบต์

มีการละเมิดกฎเล็กน้อย ไม่มีข้อ จำกัด ในพื้นที่ชั้นนำ แต่น่าเสียดายที่ผ้าใบมี จำกัด จึงมีขีด จำกัด บนสำหรับn

เยื้องเพื่อความชัดเจน:

using C=System.Console;
class P{
    static void Main(string[]a){
        int n=int.Parse(a[0]),d=2,x=250,y=500;
        var f="0D";
        while(n-->0)
            f=f.Replace("D","d3t03").Replace("T","10d1t").ToUpper();
        C.SetBufferSize(999,999);
        foreach(var c in f){
            n=c&7;
            d=(d+n)%4;
            if(n<1){
                var b=d%2<1;
                x+=n=b?1-d:0;
                y+=b?0:2-d;
                C.SetCursorPosition(x*2-n,y+d/3);
                C.Write(b?'_':'|');
            }
        }
    }
}

1

JavaScript (ES6), 220

ใช้สูตร wikipedia สำหรับการเลี้ยวซ้ายและขวา

n=>(d=>{for(i=x=y=d;i<1<<n;d+=++i/(i&-i))z=d&2,(w=d&1)?y+=z/2:x+=1-z,g=x<0?g.map(r=>[,,...r],x=1):g,g=y<0?[y=0,...g]:g,r=g[y]=g[y]||[],r[x]='_|'[w],w?y-=!z:x+=1-z})(0,g=[])||g.map(r=>[...r].map(c=>c||' ').join``).join`
`

น้อย golfed

n=>{
  g=[];
  for(i=x=y=d=0;i<1<<n;d+=++i/(i&-i))
    z=d&2,
    (w=d&1)?y+=z/2:x+=1-z,
    g=x<0?g.map(r=>[,,...r],x=1):g,
    g=y<0?[y=0,...g]:g,
    r=g[y]=g[y]||[],
    r[x]='_|'[w],
    w?y-=!z:x+=1-z
  return g.map(r=>[...r].map(c=>c||' ').join``).join`\n`
}

F=
n=>(d=>{for(i=x=y=d;i<1<<n;d+=++i/(i&-i))z=d&2,(w=d&1)?y+=z/2:x+=1-z,g=x<0?g.map(r=>[,,...r],x=1):g,g=y<0?[y=0,...g]:g,r=g[y]=g[y]||[],r[x]='_|'[w],w?y-=!z:x+=1-z})(0,g=[])||g.map(r=>[...r].map(c=>c||' ').join``).join`
`

function update() {
  var n=+I.value
  O.textContent=F(n)
}

update()
pre { font-size: 8px }
<input id=I value=5 type=number oninput='update()'><pre id=O></pre>


1

APL (Dyalog Unicode) , 65 64 ไบต์SBCS

('_|'⍴⍨≢a)@a⍴∘''1+⌈/a←(⊢-⌊/)⌈2+/÷∘¯2 1¨11 9∘○¨+\0,(⊢,0j1×⌽)⍣⎕,1

ลองออนไลน์!

(⊢,0j1×⌽)⍣⎕,1สร้างรายการขั้นตอนเป็นตัวเลขที่ซับซ้อน มันเริ่มต้นจาก1และผนวก ( ,) ซ้ำรายการที่กลับรายการ ( ) คูณด้วย0j1= sqrt (-1)

+\0, เติม 0 และคำนวณผลรวมนำหน้า

11 9∘○¨ สลายความซับซ้อนเป็นคู่ (ของจริง; จินตภาพ)

÷∘¯2 1¨ หารส่วนจริงด้วย -2

2+/ ผลรวมของคู่ที่อยู่ติดกัน

เพดาน

(⊢-⌊/) ลบ minima ออกจากทั้งหมดดังนั้น coords จะไม่เป็นลบ

a← มอบหมายให้ a

⍴∘''⊃1+⌈/ สร้าง char matrix ที่ว่างเปล่าเพื่อให้ coords สูงสุดสามารถใส่ได้

('_|'⍴⍨≢a)@aใส่สลับ_และ|ที่พิกัดจากa

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.