เล่นตลกอาวุโส PPCG


19

เรากำลังจะสำเร็จการศึกษาในเว็บไซต์เต็มรูปแบบในเร็ว ๆ นี้และมีสิ่งเดียวที่ต้องทำก่อนจบการศึกษา: ดึงความคึกคะนองอาวุโส! ฉันคิดว่าเราควรจะทำในรูปแบบคลาสสิก "เติมห้องโถงด้วยถ้วยน้ำ" ปิดปาก

ท้าทาย

โปรแกรมของคุณจะอ่านในข้อความและส่งออกข้อความที่ครอบคลุมในถ้วยน้ำคว่ำ มีถ้วยน้ำคว่ำลงดังนี้: /~\
ถ้วยเหล่านี้สามารถวางได้ในช่องว่างในช่องใส่เท่านั้นและสามารถวางเพื่อให้ตัวละครทั้งสามของถ้วยอยู่เหนือตัวละครที่ไม่ใช่ช่องว่างโดยตรง (มิฉะนั้นน้ำจะหก ออก!). ถ้วยไม่สามารถวางซ้อนกันบนถ้วยอื่น ต้องวางถ้วยในทุกช่องที่เปิดอยู่และจะถือว่าทุกอินพุตถูกล้อมรอบด้วยช่องว่างที่ไม่มีที่สิ้นสุดของช่องว่าง

คุณอาจคิดว่าอินพุตนั้นถูกเสริมให้เป็นสี่เหลี่ยมที่มีช่องว่าง

เราจำเป็นต้องดึงความคึกคะนองออกอย่างรวดเร็วและไม่มีใครสังเกตดังนั้นจำนวนไบต์ที่น้อยที่สุดในแต่ละภาษาจึงชนะ

กรณีทดสอบ

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

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

เอาท์พุท:

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

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

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

เอาท์พุท:

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

1
นี่อาจเป็นเวลาที่จะชุบชีวิตภาษาการจับคู่รูปแบบ 2Dบางส่วนอีกครั้ง...
mbomb007

คำตอบ:


10

เรติน่า 41 ไบต์

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

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

โปรดทราบว่าบรรทัดแรกมีช่องว่างต่อท้ายสามช่อง

ต้องใช้อินพุทเป็นแผ่นรองลงในสี่เหลี่ยมผืนผ้า

ลองออนไลน์!

คำอธิบาย

นี่คือการจับคู่แนวตั้งที่ค่อนข้างเป็นมาตรฐาน:

(?<=(.)*)

1นี้จะนับตัวอักษรก่อนการแข่งขันโดยการจับภาพว่าตัวละครหลายคนในกลุ่ม

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

เป็นการตรวจสอบว่ามีอักขระที่ไม่ใช่ช่องว่างสามตัวที่ตำแหน่งเดียวกันในบรรทัดถัดไป นี้จะกระทำโดย popping จากกลุ่ม1จนว่างและป้องกันการย้อนรอยกับกลุ่มอะตอม(?<-1>.)*(?>...)

ในที่สุดเราก็จับคู่ช่องว่างที่เกิดขึ้นจริง /~\เหล่านั้นจะถูกแทนที่ด้วยสายอักขระตัวอักษร สะดวกพบการแข่งขันจากซ้ายไปขวาและไม่ทับซ้อนกัน


3

JavaScript (ES6), 163 ไบต์

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`
`

แฮ็คเข้าด้วยกันอย่างรวดเร็วทางออกสามารถลงกอล์ฟได้อย่างแน่นอน เพิ่มบรรทัดว่างข้างบนค้นหาช่องว่างสามจุดและแทนที่ด้วยคัพหากบรรทัดถัดไปไม่มีช่องว่างใด ๆ กำหนดสมมติฐานที่อนุญาตว่าอินพุตจะเป็นรูปสี่เหลี่ยมผืนผ้า แบ็คสเปซใด ๆ ในอินพุตจำเป็นต้องหลบหนี (อย่างที่คาดไว้กับ JS)


a testผมคิดว่าผลตอบแทนนี้การส่งออกผิด
Neil

1

JavaScript (ES6), 109 ไบต์

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

เช่นเดียวกับที่ต้องการอินพุตแบบสี่เหลี่ยมสมมติว่าบรรทัดแรกลงท้ายด้วย newline แม้ว่าจะเป็นบรรทัดอินพุตเท่านั้น ใช้ lookahead ที่สร้างขึ้นแบบไดนามิกเพื่อให้แน่ใจว่าจะพบช่องว่างสาม "เหนือ" สามช่องว่างเพื่อไม่ให้สับสนโดยรู

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