PPCG高级恶作剧


19

我们即将毕业于一个完整的站点,毕业前只剩下一件事要做:拉一个高级恶作剧!我认为我们应该对经典的“用一杯水装满走廊”插科打do做一个变体。

挑战

您的程序将读取文本并输出该文本,并盖上上下颠倒的水。上下颠倒的水杯看起来像这样:/~\
这些杯子只能放在输入中的空白处,并且只能放置成使杯子的所有三个字符都位于非空白字符的正上方(否则水会溅出)出来!)。杯子不能叠放在其他杯子上。杯子必须放置在每个可用的开口中,并且假定每个输入都被无限的空白区域包围。

您可以假定输入被填充为带有空格的矩形。

我们需要迅速进行恶作剧,而无需任何人注意,因此每种语言中最少的字节数会获胜。

测试用例

输入:

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

输出:

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

输入:

 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

Answers:


10

视网膜,41字节

字节数假定为ISO 8859-1编码。

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

请注意,第一行具有三个尾随空格。

要求将输入填充为矩形。

在线尝试!

说明

这是相当标准的垂直匹配:

(?<=(.)*)

通过将这么多字符捕获到分组中来计算比赛之前的字符1

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

这将检查下一行的同一位置是否有三个非空​​格字符。这是通过从组弹出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
尼尔

1

JavaScript(ES6),109个字节

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

除了要求矩形输入外,还假定第一行以换行符结尾,即使它是唯一的输入行也是如此。使用动态生成的前瞻确保它找到三个非空间“上方”的三个空间,以免被孔弄糊涂。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.