PPCG Senior Prank

19

Logo estaremos nos formando em um site completo, e só resta uma coisa a fazer antes da formatura: faça uma brincadeira sênior! Acho que devemos fazer uma variação do clássico "encher um corredor com copos de água".

Desafio

Seu programa lerá o texto e o produzirá, coberto de xícaras de água de cabeça para baixo. Um copo de água de cabeça para baixo se parece com o seguinte: /~\
Esses copos só podem ser colocados no espaço em branco da entrada e apenas para que os três caracteres do copo fiquem diretamente acima de um caractere que não seja do espaço em branco (caso contrário, a água derramaria Fora!). Os copos não podem ser empilhados sobre outros copos. Copos devem ser colocados em todas as aberturas disponíveis, e supõe-se que cada entrada seja cercada por um campo infinito de espaço em branco.

Você pode assumir que a entrada está preenchida em um retângulo com espaços.

Precisamos fazer a brincadeira rapidamente e sem que ninguém perceba, o menor número de bytes em cada idioma vence.

Casos de teste

Entrada:

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

Resultado:

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

Entrada:

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

Resultado:

 L   /~\/~\/~\/~\/~\/~\/~\
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\/~\/~\  ____I____
    ========/~\ |  |[\
            \___O==___)
            ___I_I__/
Mike Bufardeci
fonte
11
Este pode ser o momento para ressuscitar algumas dessas línguas padrão correspondentes 2D ...
mbomb007

Respostas:

10

Retina , 41 bytes

A contagem de bytes assume a codificação ISO 8859-1.

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

Observe que a primeira linha possui três espaços à direita.

Requer que a entrada seja preenchida em um retângulo.

Experimente online!

Explicação

Essa é uma correspondência vertical bastante padrão:

(?<=(.)*)

Isso conta os caracteres que precedem a partida capturando muitos caracteres no grupo 1.

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

Isso verifica se há três caracteres não espaciais na mesma posição na próxima linha. Isso é feito pulando do grupo 1até ficar vazio (?<-1>.)*e impedindo o retorno com o grupo atômico (?>...).

Finalmente, combinamos os espaços reais. Esses são simplesmente substituídos pela string literal /~\. Convenientemente, as correspondências são encontradas da esquerda para a direita e não podem se sobrepor.

Martin Ender
fonte
3

JavaScript (ES6), 163 bytes

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

Solução rapidamente cortada em conjunto, pode definitivamente ser jogada para baixo. Adiciona uma linha em branco acima, localiza espaços triplos e substitui por um copo se a próxima linha não contiver espaços. Faz a suposição permitida de que a entrada será retangular. Quaisquer backspaces na entrada precisam ser escapados (como seria de esperar com JS).

Mwr247
fonte
Eu acho que isso retorna a saída errada para a test.
305 Neil
1

JavaScript (ES6), 109 bytes

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

Além de exigir entrada retangular, também pressupõe que a primeira linha termine com uma nova linha, mesmo que seja a única linha de entrada. Usa uma cabeça de impressão gerada dinamicamente para garantir que encontre três espaços "acima" de três não espaços, para não ficar confuso com os buracos.

Neil
fonte