Bağlantılı harfler


23

Bir dize olarak temsil edilen bir karakter bloğunu alan ve alfabedeki bitişik harflerin bağlı olduğu benzer bir dize çıkaran veya veren bir program veya işlev yazmalısınız.

Görsel bir örnek (şeklinde input => output):

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

ayrıntılar

  • Giriş boşluk, satırsonu ve ilk Nküçük harflerin her birinin tam olarak birini içeren bir dize olacaktır .1 <= N <= 26
  • Giriş çizgileri, tam dikdörtgen bir blok oluşturan boşluklarla doldurulur.
  • Alfabeye bitişik her harf çifti aynı satır, sütun ya da çapraz çizgi üzerinde olacak ve kullanılarak düz bir ascii çizgi ile bağlanmalıdır \ / | or -. (Çizginin uzunluğu 0 olabilir.)
  • Aşağıdaki iki satırlı üst üste binme türleri kullanılmalıdır:

    / and \ become X
    | and - become +
    / and / become /
    \ and \ become \
    | and | become |
    - and - become -
    [letter] and [anything] become [letter]
    
  • Başka hiçbir iki hatlı üst üste binme gerçekleşmez.

  • İkiden fazla çizginin üst üste binmesi durumunda, bunların herhangi bir çiftinin geçerli örtüşmelerden biri olacağı garanti edilecektir. (örneğin [letter] / |üçlü asla gerçekleşmeyecek)
  • Değişen boşlukların yanı sıra \ / | - X and +girdi ve çıktı aynı olmalıdır.
  • İzleyen yeni satır isteğe bağlıdır ancak giriş ve çıkış için aynı olması gerekir.
  • Bu kod golf yani en kısa giriş kazanır.

Örnekler

Giriş:

b     d        


     h   gi    

      e  f     
c     a        

Çıktı:

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

Giriş:

     dk    j   

 b    l        

 c   fg        

     a    m    

   i      h    
     e         

Çıktı:

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

Giriş:

   eti  sqjh k  p  u  cfm vb owgzyx rnd la  

Çıktı:

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

Giriş:

a

Çıktı:

a

gerçekten güzel ascii sanat
Doktor

2
Hem X hem de + örtüşme aynı noktadaysa ne olur? Yoksa bu hesaba katmamız gereken bir durum değil mi?
theonlygusti

@ theonlygusti "Eğer ikiden fazla çizgi üst üste binerse, onlardan herhangi biri geçerli çakışmalardan biri olacaktır." Örneğin /ve -geçersiz örtüşmeler Xve +( / \ - and |) aynı konumda meydana gelemez.
randomra

Hala karıştı; neden bize bazı örnekler vermiyorsun?
theonlygusti

@ theonlygusti: Temel olarak, hesaba katmanız gereken bir durum değil
Claudiu

Yanıtlar:


3

Perl, 219

Bazı iyileştirmeler hala mümkün olabilir.

#!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}

Deneyin beni .


6

JavaScript (ES6) 246 266 280 285 307

Oldukça hacimli ...

String param ve değiştirilmiş stringi döndüren bir fonksiyon. Giriş sadece 1 satır olmadıkça takip eden bir yeni satır isteğe bağlıdır (satır sayısını bulmak için yeni bir satıra ihtiyacım var)

Sadece birini mutlu etmek için

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('')

Daha okunabilir

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 konsolunda test edin

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'))

Çıktı

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    

Ben 341karakterleri sayıyorum .
mbomb007

@ mbomb007 girinti boşlukları ve
newlines sayılmaz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.