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__/
Réponses:
Rétine , 41 octets
Le nombre d'octets suppose un codage ISO 8859-1.
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
.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
1
jusqu'à 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.la source
JavaScript (ES6), 163 octets
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).
la source
a test
.JavaScript (ES6), 109 octets
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.
la source