PPCG Senior Prank

19

Nous allons bientôt passer à un site complet, et il ne reste qu'une chose à faire avant la remise des diplômes: tirer une farce senior! Je pense que nous devrions faire une variante du gag classique "remplir un couloir avec des tasses d'eau".

Défi

Votre programme lira le texte et affichera ce texte, recouvert de tasses d'eau à l'envers. Une tasse d'eau à l'envers ressemble à ceci: /~\
Ces tasses ne peuvent être placées que dans un espace blanc dans l'entrée, et ne peuvent être placées que de sorte que les trois caractères de la tasse soient directement au-dessus d'un caractère non blanc (sinon l'eau se renverserait en dehors!). Les tasses ne peuvent pas être empilées sur les autres tasses. Les tasses doivent être placées dans chaque ouverture disponible, et il est supposé que chaque entrée est entourée d'un champ infini d'espaces blancs.

Vous pouvez supposer que l'entrée est complétée par un rectangle avec des espaces.

Nous devons retirer la farce rapidement et sans que personne ne le remarque, donc le moins d'octets dans chaque langue gagne.

Cas de test

Contribution:

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

Production:

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

Contribution:

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

Production:

 L   /~\/~\/~\/~\/~\/~\/~\
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\/~\/~\  ____I____
    ========/~\ |  |[\
            \___O==___)
            ___I_I__/
Mike Bufardeci
la source
1
C'est peut-être le moment de ressusciter certains de ces langages de correspondance de motifs 2D ...
mbomb007

Réponses:

10

Rétine , 41 octets

Le nombre d'octets suppose un codage ISO 8859-1.

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

Notez que la première ligne a trois espaces de fin.

Nécessite que l'entrée soit complétée par un rectangle.

Essayez-le en ligne!

Explication

Il s'agit d'une correspondance verticale assez standard:

(?<=(.)*)

Cela compte les caractères précédant le match en capturant autant de caractères dans le groupe 1.

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

Cela vérifie qu'il y a trois caractères non-espace à la même position sur la ligne suivante. Cela se fait en sautant du groupe 1jusqu'à ce qu'il soit vide avec (?<-1>.)*et en empêchant le retour en arrière avec le groupe atomique (?>...).

Enfin, nous faisons correspondre les espaces réels. Ceux-ci sont simplement remplacés par la chaîne littérale /~\. De façon pratique, les correspondances se trouvent de gauche à droite et ne peuvent pas se chevaucher.

Martin Ender
la source
3

JavaScript (ES6), 163 octets

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

Solution rapidement piratée ensemble, peut certainement être étudiée. Ajoute une ligne vide au-dessus, trouve des espaces triples et remplace par une tasse si la ligne suivante ne contient aucun espace. Fait l'hypothèse autorisée que l'entrée sera rectangulaire. Tout espace arrière dans l'entrée doit être échappé (comme on pourrait s'y attendre avec JS).

Mwr247
la source
Je pense que cela renvoie la mauvaise sortie pour a test.
Neil
1

JavaScript (ES6), 109 octets

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

En plus de nécessiter une entrée rectangulaire, suppose également que la première ligne se termine par une nouvelle ligne, même s'il s'agit de la seule ligne d'entrée. Utilise un lookahead généré dynamiquement pour s'assurer qu'il trouve trois espaces "au-dessus" de trois non-espaces, afin de ne pas être dérouté par les trous.

Neil
la source