เชื่อมต่อตัวอักษร


23

คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่ได้รับบล็อกของตัวอักษรที่แสดงเป็นสตริงและเอาท์พุทหรือส่งกลับสตริงที่คล้ายกันซึ่งตัวอักษรที่อยู่ติดกันในตัวอักษรมีการเชื่อมต่อ

ตัวอย่างภาพ (ในรูปแบบของinput => output):

b     d               b     d        
                      |\   /|        
                      | \ / |        
             =>       |  X  |        
                      | / \ |        
      e               |/   \e        
c     a               c     a        

รายละเอียด

  • ข้อมูลที่ป้อนจะเป็นสตริงที่มีช่องว่างบรรทัดใหม่และNตัวอักษรตัวพิมพ์เล็กตัวแรกของอักขระ1 <= N <= 26
  • เส้นของอินพุตจะถูกเสริมด้วยช่องว่างที่สร้างบล็อกสี่เหลี่ยมเต็ม
  • \ / | or -คู่ของตัวอักษรที่อยู่ติดกันในตัวอักษรทุกคนจะอยู่ในแถวเดียวกันคอลัมน์หรือเส้นทแยงมุมและควรจะเชื่อมต่อกับเส้นตรงโดยใช้ ASCII (บรรทัดอาจมีความยาว 0)
  • ควรจัดการเหลื่อมทับสองบรรทัดต่อไปนี้:

    / and \ become X
    | and - become +
    / and / become /
    \ and \ become \
    | and | become |
    - and - become -
    [letter] and [anything] become [letter]
    
  • การทับซ้อนสองบรรทัดแบบอื่นจะไม่เกิดขึ้น

  • หากมีมากกว่าสองบรรทัดทับซ้อนคู่ใด ๆ ของพวกเขาจะรับประกันว่าจะเป็นหนึ่งในการทับซ้อนที่ถูกต้อง (เช่น[letter] / |triplet จะไม่เกิดขึ้น)
  • นอกเหนือจากการเปลี่ยนช่องว่างเป็น\ / | - X and +อินพุตและเอาต์พุตควรเหมือนกัน
  • ขึ้นบรรทัดใหม่เป็นตัวเลือก แต่จะต้องเหมือนกันสำหรับอินพุตและเอาต์พุต
  • นี่คือรหัสกอล์ฟเพื่อให้รายการที่สั้นที่สุดชนะ

ตัวอย่าง

การป้อนข้อมูล:

b     d        


     h   gi    

      e  f     
c     a        

เอาท์พุท:

b     d        
|\   /|        
| \ / |        
|  X h+--gi    
| / \ |  |     
|/   \e--f     
c     a        

การป้อนข้อมูล:

     dk    j   

 b    l        

 c   fg        

     a    m    

   i      h    
     e         

เอาท์พุท:

     dk----j   
    /||   /    
 b / |l  /     
 |X  | \/      
 c \ fg/\      
    \|/\ \     
     a  \ m    
    /|   \     
   i-+----h    
     e         

การป้อนข้อมูล:

   eti  sqjh k  p  u  cfm vb owgzyx rnd la  

เอาท์พุท:

   eti--sqjh-k--p--u--cfm-vb-owgzyx-rnd-la  

การป้อนข้อมูล:

a

เอาท์พุท:

a


2
จะเกิดอะไรขึ้นถ้าทั้ง X และ + ทับซ้อนกันควรอยู่ในจุดเดียวกัน หรือนั่นไม่ใช่กรณีที่เราควรคำนึงถึง
theonlygusti

@theonlygusti "หากมีมากกว่าสองบรรทัดทับซ้อนคู่ใด ๆ ของพวกเขาจะเป็นหนึ่งในการทับซ้อนที่ถูกต้อง" เช่น/และ-มีการทับซ้อนที่ไม่ถูกต้องXและ+( / \ - and |) ไม่สามารถเกิดขึ้นที่ตำแหน่งเดียวกัน
randomra

ยังสับสนอยู่ ทำไมไม่ให้ตัวอย่างกับเรา?
theonlygusti

@theonlygusti: โดยทั่วไปไม่ใช่กรณีที่คุณควรคำนึงถึง
Claudiu

คำตอบ:


3

Perl, 219

การปรับปรุงบางอย่างอาจยังคงเป็นไปได้

#!perl -p0
/
/;$x="@-";
sub g{map"(?=$_)(.@_)+[".chr(1+ord).chr(~-ord)."]",a..z}
sub f{for$p(g"{$x}"){s/$p/$&&((_."\177"x~-$x)x y!
!!)/se;$_=lc;s![\0\\]!@_!g}$x++}
f"/";y!\17!/!;f"|";f"\\";y/\17/X/;for$p(g){s/$p/$&=~y! |!-+!r/e}

ลองฉัน


6

JavaScript (ES6) 246 266 280 285 307

ค่อนข้างใหญ่ ...

ฟังก์ชันที่มีพารามิเตอร์สตริงและส่งคืนสตริงที่แก้ไข ขึ้นบรรทัดใหม่ต่อท้ายเป็นตัวเลือกเว้นแต่อินพุตจะมีเพียง 1 แถว (ฉันต้องการบรรทัดใหม่เพื่อค้นหาแถว len)

เพียงแค่ทำให้ใครบางคนมีความสุข

F=b=>b.match(/\w/g).sort().map(l=>(q=b.indexOf(l),~p)?[o=b.indexOf('\n'),~o,o+2,1].map((d,i)=>{k=(q-p)/d|0;if(k&&k*d+p==q)for(m='/|\\-'[i];(p+=k>0?d:-d)-q;c==m|c>'`'&c<'{'?0:b[p]=c>' '?c<'/'|c>'z'?'+':'X':m)c=b[p]}):p=q,p=-1,b=[...b])&&b.join('')

อ่านเพิ่มเติม

F=b=>
  b.match(/\w/g).sort().map(l=>
    (q=b.indexOf(l),~p)?
    [o=b.indexOf('\n'),~o,o+2,1].map((d,i)=>{
      k=(q-p)/d|0;
      if(k&&k*d+p==q)
        for(m='/|\\-'[i];
              (p+=k>0?d:-d)-q;
              c==m|c>'`'&c<'{'?0:b[p]=c>' '?c<'/'|c>'z'?'+':'X':m)
            c=b[p]
    })
    :p=q
  ,p=-1,b=[...b])
  &&b.join('')

ทดสอบในคอนโซล Firefox / FireBug

console.log(F('\
b     d\n\
       \n\
       \n\
       \n\
       \n\
      e\n\
c     a\n'))

console.log(F('\
     dk    j\n\
            \n\
 b    l     \n\
            \n\
 c   fg     \n\
            \n\
     a    m \n\
            \n\
   i      h \n\
     e      \n'))

console.log(F('\
b     d    \n\
           \n\
           \n\
     h   gi\n\
           \n\
      e  f \n\
c     a    \n'))

เอาท์พุต

b     d
|\   /|
| \ / |
|  X  |
| / \ |
|/   \e
c     a

     dk----j
    /||   / 
 b / |l  /  
 |X  | \/   
 c \ fg/\   
    \|/\ \  
     a  \ m 
    /|   \  
   i-+----h 
     e      

b     d    
|\   /|    
| \ / |    
|  X h+--gi
| / \ |  | 
|/   \e--f 
c     a    

ฉันนับ341ตัวอักษร
mbomb007

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