PPCG Senior Prank


19

Presto ci diplomeremo in un sito completo e c'è solo una cosa da fare prima della laurea: fare uno scherzo senior! Penso che dovremmo fare una variazione sul classico bavaglio "riempire un corridoio con bicchieri d'acqua".

Sfida

Il tuo programma leggerà nel testo e produrrà quel testo, coperto da tazze d'acqua capovolte. Una tazza d'acqua rovesciata è simile a questa: /~\
queste tazze possono essere posizionate solo nello spazio bianco nell'input e possono essere posizionate solo in modo che tutti e tre i caratteri della tazza siano direttamente sopra un carattere non bianco (altrimenti l'acqua si spanderebbe su!). Le tazze non possono essere impilate sopra altre tazze. Le tazze devono essere posizionate in ogni apertura disponibile e si presume che ogni input sia circondato da un campo infinito di spazi bianchi.

Si può presumere che l'input sia riempito con un rettangolo con spazi.

Dobbiamo liberarci rapidamente e senza che nessuno se ne accorga, quindi vince il minor numero di byte in ogni lingua.

Casi test

Ingresso:

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

Produzione:

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

Ingresso:

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

Produzione:

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

1
Questo potrebbe essere il momento di resuscitare alcuni di quei linguaggi di corrispondenza dei pattern 2D ...
mbomb007

Risposte:


10

Retina , 41 byte

Il conteggio dei byte presuppone la codifica ISO 8859-1.

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

Si noti che la prima riga ha tre spazi finali.

Richiede che l'input sia riempito con un rettangolo.

Provalo online!

Spiegazione

Questa è una corrispondenza verticale abbastanza standard:

(?<=(.)*)

Questo conta i personaggi che precedono la partita catturando così tanti personaggi in gruppo 1.

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

Questo verifica che ci siano tre caratteri non spaziali nella stessa posizione nella riga successiva. Questo viene fatto saltando dal gruppo 1fino al suo svuotamento (?<-1>.)*e impedendo il backtracking con il gruppo atomico (?>...).

Infine abbiniamo gli spazi reali. Questi vengono semplicemente sostituiti con la stringa letterale /~\. Convenientemente, le corrispondenze si trovano da sinistra a destra e non possono sovrapporsi.


3

JavaScript (ES6), 163 byte

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

La soluzione combinata rapidamente può essere sicuramente eliminata. Aggiunge una riga vuota sopra, trova spazi tripli e sostituisce con una tazza se la riga successiva non contiene spazi. Presuppone che l'input sia rettangolare. Eventuali backspaces nell'input devono essere salvati (come ci si aspetterebbe da JS).


Penso che questo restituisca l'output errato per a test.
Neil,

1

JavaScript (ES6), 109 byte

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

Oltre a richiedere un input rettangolare, presuppone anche che la prima riga termini con una nuova riga, anche se è l'unica riga di input. Utilizza un lookahead generato dinamicamente per assicurarsi che trovi tre spazi "sopra" tre non spazi, in modo da non confondersi con i buchi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.