PPCGシニアいたずら


19

すぐにフルサイトに卒業します。卒業前にやるべきことはあと1つです。古典的な「廊下を水で満たす」ギャグを変更すべきだと思います。

チャレンジ

プログラムはテキストを読み、そのテキストを出力し、上下逆さまの水で覆います。水の逆さまのカップは次のようになります:/~\
これらのカップは、入力の空白にのみ配置でき、カップの3文字すべてが非空白文字の真上にあるようにのみ配置できます(そうしないと水がこぼれます)でる!)。カップを他のカップの上に積み重ねることはできません。カップは利用可能なすべての開口部に配置する必要があり、すべての入力は空白の無限フィールドに囲まれていると想定されています。

入力がスペースのある長方形に埋め込まれていると仮定することができます。

誰にも気付かれずに、いたずらをすばやく解消する必要があるため、各言語で最も少ないバイトが勝ちます。

テストケース

入力:

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

出力:

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

入力:

 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})   
/~\

最初の行には3つの末尾スペースがあることに注意してください。

入力を長方形に埋め込む必要があります。

オンラインでお試しください!

説明

これはかなり標準的な垂直方向のマッチングです:

(?<=(.)*)

これは、その数の文字をgroupに取り込むことにより、一致する前の文字をカウントし1ます。

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

これは、次の行の同じ位置に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`),"/~\\")

長方形の入力が必要であるだけでなく、最初の行が入力の唯一の行であっても改行で終わると想定しています。動的に生成された先読みを使用して、3つの非スペースの「上」にある3つのスペースを検出し、穴に混乱しないようにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.