PPCG Kıdemli Şaka


19

Yakında tam bir siteye mezun olacağız ve mezuniyetten önce yapılacak tek bir şey var: kıdemli bir şaka çekin! Sanırım klasik bir koridoru su bardağı doldurun.

Meydan okuma

Programınız metinde okuyacak ve baş aşağı su bardağı kaplı metin çıktısını verecektir. Baş aşağı bir bardak su şuna benzer: /~\
Bu bardaklar yalnızca girişteki boşluk alanına yerleştirilebilir ve yalnızca kabın üç karakterinin tamamı doğrudan boşluk olmayan bir karakterin üzerine gelecek şekilde yerleştirilebilir (aksi takdirde su dökülür) dışarı!). Bardaklar diğer bardakların üzerine istiflenemez. Kupalar mevcut her açıklığa yerleştirilmelidir ve her girdinin sonsuz bir boşluk alanı ile çevrili olduğu varsayılmaktadır.

Girişin boşluklu bir dikdörtgene doldurulduğunu varsayabilirsiniz.

Şakayı hızlı bir şekilde ve kimsenin farkına varmadan çekmemiz gerekiyor, her dilde en az bayt kazanıyor.

Test Durumları

Giriş:

     ____________________________________________
    /   ___    /   ___    /   ______/   ________/
   /   /__/   /   /__/   /   /     /   /_______
  /   _______/   _______/   /     /   //__    /
 /   /      /   /      /   /_____/   /___/   /
/___/      /___/      /_________/___________/

Çıktı:

     /~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\
     ____________________________________________
    /   ___    /   ___    /   ______/   ________/
   /   /__//~\/   /__//~\/   /     /   /_______
  /   _______/   _______/   //~\  /   //__    /
 //~\/      //~\/      //~\/_____//~\/___//~\/
/___/      /___/      /_________/___________/

Giriş:

 L
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\        ____I____
    ========    |  |[\
            \___O==___)
            ___I_I__/

Çıktı:

 L   /~\/~\/~\/~\/~\/~\/~\
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\/~\/~\  ____I____
    ========/~\ |  |[\
            \___O==___)
            ___I_I__/

1
Bu 2D desen eşleştirme dillerinden bazılarını yeniden diriltmenin zamanı geldi ...
mbomb007

Yanıtlar:


10

Retina , 41 bayt

Bayt sayımı ISO 8859-1 kodlamasını varsayar.

(?<=(.)*)(?=.*¶(?>(?<-1>.)*)\S{3})   
/~\

İlk satırda üç arka boşluk olduğunu unutmayın.

Girişin bir dikdörtgene doldurulmasını gerektirir.

Çevrimiçi deneyin!

açıklama

Bu oldukça standart dikey eşleme:

(?<=(.)*)

Bu, birçok karakteri grup olarak yakalayarak maçtan önceki karakterleri sayar 1.

(?=.*¶(?>(?<-1>.)*)\S{3})

Bu, bir sonraki satırda aynı konumda üç tane boşluk olmayan karakter olup olmadığını kontrol eder. Bu, gruptan 1boşalana kadar gruptan (?<-1>.)*patlatılarak ve atom grubu ile geri takibi önleyerek yapılır (?>...).

Sonunda gerçek boşluklara uyuyoruz. Bunlar basitçe değişmez dize ile değiştirilir /~\. Uygun şekilde, eşleşmeler soldan sağa bulunur ve üst üste binemez.


3

JavaScript (ES6), 163 bayt

a=>(z=a.split`
`,z.unshift(z[0].replace(/./g,' ')),z).map((b,i)=>b.replace(/   /g, (c,j)=>(!z[i+1]||!z[i+1][j+2]||/ /.test(z[i+1].slice(j,j+3))?c:'/~\\'))).join`
`

Hızla birlikte kesmek kesmek, kesinlikle golf aşağı olabilir. Yukarıdaki boş bir satır ekler, üç boşluk bulur ve bir sonraki satır boşluk içermiyorsa bir fincanla değiştirilir. Girdinin dikdörtgen olacağı varsayımını yapar. Girişteki herhangi bir arka alanın kaçması gerekir (JS'den beklendiği gibi).


Bunun yanlış çıktıyı döndürdüğünü düşünüyorum a test.
Neil

1

JavaScript (ES6), 109 bayt

s=>s.replace(/.*\n/,m=>(t=m).replace(/./g,' ')+m).replace(eval(`/   (?=[^]{${t.length-3}}[^ ]{3})/g`),"/~\\")

Dikdörtgen girdi gerektirmesinin yanı sıra, tek satır girdi olsa bile, ilk satırın yeni satırla biteceğini varsayar. Deliklerle karıştırılmaması için üç boşluğun "üstünde" üç boşluk bulmasını sağlamak için dinamik olarak oluşturulan bir ileriye bakar.

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.