Dans le monde de l'art ASCII, il y a de l'eau, des murs de hachage et des mécanismes de lettres.
Vous êtes dans une pièce composée de murs de hachage ( #
panneaux):
#######
# #
# #
# #
# ### #
# #
#######
Vous installez une source d'eau S ( S
panneau) et un réservoir d'eau E ( E
panneau) qui peut recevoir de l'eau de n'importe quelle direction, mais vous n'avez qu'une source S et un réservoir E.
#######
# S #
# #
# #
# ### #
# E #
#######
Vous devez donc choisir judicieusement où placer la source. C'est là que vous retirez vos compétences de golf de code .
La tâche
Vous obtenez une entrée composée d'une chaîne représentant une pièce avec la source et le réservoir:
#######
# S #
# #
# #
# ### #
# E #
#######
Vous devez savoir si l'eau atteint finalement le réservoir. L'eau coule, si possible, sinon à gauche et à droite, si possible. L'eau ne s'accumule pas car elle ne monte pas.
Ainsi, pour l'entrée ci-dessus, le résultat est:
#######
# * #
# * #
#*****#
#*###*#
#**O**#
#######
L'eau atteint joyeusement le réservoir, vous devez donc produire une valeur vraie.
Mais si l'eau n'atteint pas le réservoir:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
#* #
#* #
#* X #
#*### #
#*****#
#######
Ensuite, vous devez sortir une valeur falsifiée.
Écrivez un programme pour décider si l'eau atteint finalement le réservoir. Votre code doit être aussi court que possible.
Hypothèses
Supposons que l'entrée est toujours valide (toute la pièce est une région rectangulaire fermée avec le S et l'E).
Supposons qu'une seule pièce soit fournie en entrée.
Cas de test
Votre programme doit renvoyer une valeur véridique pour les cas de test suivants:
#######
# S #
# #
# #
# ### #
# E #
#######
#######
# S #
# #
# E #
# #
# #
#######
#######
# #
# #
# SE #
# ### #
# #
#######
###############################################
# S #
# #
# #
# #
# ############### #
# #
# ################## ################## #
# #
# #
# ##### #
# E #
###############################################
#######
# S #
# #
# #
# ### #
# # #
### ###
## E ##
# #
#######
Mais une valeur fausse pour les cas de test suivants:
#######
#S #
# #
# E #
# ### #
# #
#######
#######
# #
# SE #
# #
# #
# #
#######
#######
# #
# E #
# #
# S #
# #
#######
####################################
# #
# #
# #
#S # E#
####################################
L'avant-dernière salle de la catégorie True et la dernière salle de la catégorie False ont été volées sans vergogne à Koth: Jump and Run by Manu (qui a supprimé le post sandbox).
La dernière salle de la catégorie True provient de la réponse de Martin Buttner dans Retina .
from
/to
/ vraiment (ce qui facilite le traitement des tests par les participants cas à la fois).Réponses:
Escargots , 20 octets
Imprime
0
pour la valeur falsey et1
pour la valeur véridique.Essayez-le en ligne!
\S
matchsS
au départd
fixe la direction vers le bas{...},
correspond à la substance entre accolades 0 fois ou plus=\#
est une assertion qui réussit s'il y a un#
omble chevalier devant l'escargot, mais qui ne le déplace pasn
tourne à 90 degrés dans les deux sens(...)?
correspond au motif entre parenthèses 0 ou 1 fois\
correspond à un espace et y déplace l'escargot!(...
est une affirmation négativet
se téléporte vers n'importe quel carré inégalé de la grille\E
allumettesE
la source
Caleçon , 20 + 2 = 22 octets
Donc, Slip est toujours aussi cassé que jamais, mais pour une fois, c'était un défi qu'il pouvait réellement relever. Il n'a jamais été vraiment conçu pour être aussi golfique, donc il ne battra jamais les escargots à quoi que ce soit: P
A besoin de
r
indicateur (pas de cellules répétitives) pour se terminer.Essayez-le en ligne . La sortie est le chemin emprunté pour la vérité, vide pour la fausseté.
la source
Rétine , 87 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
Autant le traitement de chaînes 2D est possible dans Retina (ou l'expression régulière .NET en général), il n'est pas exactement concis ...
Explication
C'est un remblai qui marque toutes les cellules atteintes par l'eau
S
. Il le fait en faisant correspondre les caractères pouvant être atteints, puis en les translittérantS
avecT
-mode. Ce remblai traverse à la fois les espaces etE
. Au+
début, cela se répète jusqu'à ce que la sortie cesse de changer.Quant à l'expression rationnelle réelle, elle contient deux cas distincts:
Cela correspond à un espace ou
E
qui est exactement une cellule sous unS
. La correspondance verticale se fait en comptant le préfixe sur la ligne actuelle à l'aide de groupes d'équilibrage afin que nous puissions nous assurer que la position horizontale est la même. Celui-ci s'occupe des chutes d'eau.Ceci est très similaire: il correspond à un
S
et le cas échéant le caractère avant et après, à condition que le caractère directement sous l'S
est#
. Cela prend soin de l'eau qui se répand sur le sol.Lorsque nous avons terminé, il est très facile de déterminer si l'eau a atteint
E
. Si c'est le cas, alorsE
a été supprimé de la chaîne dans le remplissage, et sinon, ilE
est toujours là. Comptons donc le nombre deE
s:Mais maintenant, c'est
0
(ce que je considérerais comme de la fausse) pour des cas de test véridiques et1
(que je considérerais comme vrai) pour des cas de test de fausseté. On peut inverser cela très facilement en comptant le nombre de0
s dans ce résultat:Terminé.
la source