Créez un programme qui détermine, étant donné une entrée du chemin, si Mario peut atteindre la fin, désigné par E
, dès le début, désigné par S
.
Un chemin ressemblera à ceci:
S = E
=====
Dans un chemin, les différents symboles et ce qu'ils représentent sont:
=
: mur / sol / plafond. Mario ne peut pas traverser un mur et ne peut pas tomber devant un sol ou sauter par-dessus un plafond (il se heurterait la tête)S
: air, sauf pour montrer où commence Mario. Cela apparaîtra toujours dans la colonne la plus à gauche de l'entrée, au niveau du sol.E
: air, sauf pour montrer où Mario veut aller. Cela apparaîtra toujours dans la colonne la plus à droite de l'entrée, au niveau du sol.
L'entrée aura des espaces à chaque endroit où Mario pourrait marcher.
Mario ne peut que progresser; dans cet exemple, Mario ne peut pas atteindre l'objectif
S
===
===
E
====
il ne peut pas non plus dans celui-ci
E
==
==
#==
==
==
==
S ==
======
Cependant, il peut atteindre l'espace désigné par #
(qui n'apparaîtra pas en entrée), car il peut sauter jusqu'à quatre cellules de haut; Mario est surhumain. Comme autre exemple de sa surhumanité:
S
=
=
=
=
=
= #
= =
=
=
=
= E
=======
Mario peut accéder à la E
distance en parcourant la grande distance, en survivant et en marchant calmement vers E
. Notez qu'il ne peut pas atteindre le #
, car Mario tombe droit vers le bas.
Mario peut sauter très haut, mais pas très loin en comparaison.
S E
== ==
= =
Mario peut tenter de sauter l'écart, mais il échouera et tombera directement. Il ne peut pas atteindre la fin.
Mario peut atteindre l'objectif dans tous ces exemples:
E
=
=
=
S=
==
=
= E
S= =
== =
= =
=====
S
=
= E
====
C'est le golf de code, donc le moins d'octets gagne!
la source
#
, car Mario tombe tout droit". Si je vois cela correctement, ne tomberait-il pas directement sur le#
? De plus, les sauts sont-ils définis comme un maximum de 4 espaces vers le haut et un maximum de 1 espace, n'est-ce pas?#
. Quant à la deuxième question: je ne suis pas OP mais je suppose que vous avez raison. (c'est ce que j'ai supposé dans ma solution)E
n'apparaît pas dans la colonne la plus à droite car le niveau du sol s'étend de un à droite à partir du reste de la carte.Mario cannot walk through wall , and cannot fall past a floor, or jump past a ceiling
Réponses:
Slip ,
382725 octetsNécessite que l'entrée soit complétée par un rectangle de sorte qu'il y ait des espaces dans chaque cellule que Mario doit traverser (potentiellement avec une ligne de tête pleine d'espaces). Imprime soit une chaîne représentant le chemin valide (qui inclut
S
,E
et tous les parcours=
sauf le dernier) ou rien si aucun chemin n'existe.Testez-le ici.
Explication
Slip était l'entrée de Sp3000 dans notre défi de conception de langage de correspondance de motifs 2D. C'est un peu comme une extension 2D de regex où vous pouvez donner des instructions au curseur du moteur quand il est autorisé ou nécessaire de faire des virages à gauche ou à droite. Il a également une fonction pratique où vous pouvez empêcher le curseur d'avancer, vous permettant de faire correspondre une seule position deux fois de suite (avec des motifs différents).
Le glissement n'a pas quelque chose de comparable à des contournements dans l'expression régulière, mais comme vous pouvez vous déplacer plusieurs fois sur n'importe quelle position, il suffit de tester la condition, puis de revenir. Nous utilisons cela pour nous assurer que nous ne sautons que sur le sol en nous déplaçant dans la tuile au sol après chaque étape.
la source
Java
234230221216208207205179179octetsEcoute, j'ai battu C et python? J'ai atteint la vraie transcendance parmi les mortels! Toutes blagues à part, ce fut un défi amusant. La fonction suivante prend en entrée un tableau de chaînes de colonnes ayant chacune la même longueur. Si cela est contraire aux règles, veuillez me le faire savoir. Il renvoie 1, ce qui signifie une exécution mario réussie, et toute autre valeur impliquant une exécution mario échouée.
Voici l'ancienne logique (qui est similaire à la version actuelle) avec des exemples d'utilisation et de sortie. Plus quelques commentaires expliquant la logique
la source
Python,
260239222215209206 octets,essayez-le sur ideone (avec des cas de test)
appeler comme:
f([' S=', ' E='])
notes de mise à jour:
Maintenant, comme certaines des autres solutions, suppose que l'entrée est un tableau de chaînes de colonnes, chacune commençant par un ""
Wrapper pour l'ancien formulaire de saisie:
g=lambda x:f(map("".join,zip(*([" "*x.index("\n")]+x.split("\n")))))
De plus, j'ai corrigé un bug où Mario pouvait sauter à travers les blocs au-dessus de lui.
version non golfée avec explications:
f
s'appelle récursivement dans toutes les directions vers lesquelles Mario peut se déplacery,x
. Il revientTrue
quand il atteint le"E"nd
, qui reprend ensuite tous les appels de fonction jusqu'à ceg
qu'il revienne finalementTrue
.la source
else
avant la finalereturn
?Escargots ,
413729 octetsMerci à feersum pour son aide à éviter les chemins qui se chevauchent et pour avoir économisé 4 octets.
Nécessite que l'entrée soit complétée par un rectangle de sorte qu'il y ait des espaces dans chaque cellule que Mario doit traverser (potentiellement avec une ligne de tête pleine d'espaces).
Essayez-le en ligne!
Explication
Snails était l'entrée de feersum dans notre défi de conception de langage de correspondance de motifs 2D. Comme Slip, il est également similaire à regex, mais la principale différence est que a) celui-ci prend en charge les assertions (lookarounds) et b) en dehors de ces assertions, il n'est pas possible de parcourir deux cellules de la grille deux fois. Cela rend ce problème un peu délicat, car il y a des cas où Mario doit tomber dans un trou et sauter en arrière, par exemple:
En dehors de ces différences, la syntaxe des deux langues diffère également beaucoup.
Pour contourner le problème selon lequel nous ne pouvons pas traverser une cellule deux fois, nous alternons toujours une étape horizontale avec une étape verticale. Cependant, cela signifie que nous devons gérer une chute avant de franchir le rebord. Ainsi, les chutes passeront techniquement par des tuiles au sol, mais nous veillerons à ce qu'elles ne se produisent qu'à côté d'un espace ouvert.
la source
C,
256236213197 octets20 octets enregistrés par "Cela apparaîtra toujours dans la colonne la plus à gauche de l'entrée"
23 octets enregistrés grâce au système basé sur les colonnes de @ RohanJhunjhunwala
Essayez-le sur ideone, avec des cas de test ...
Usage:
Non golfé avec explication:
la source
PHP,
399338284265251 octetsattend l'entrée comme argument de ligne de commande avec des sauts de ligne de style Unix et des espaces de fin dans chaque ligne, renvoie le code de sortie
1
pour le succès,0
pour l'échecpanne pour fonctionner
tests (sur la fonction m)
la source
Rubis,
153147 octetsDésolé, Java ... votre place en tant que meilleure langue non golfique pour le travail est prise en charge!
L'entrée est une liste de chaînes de colonnes, précédée d'un espace unique dans le style de la façon dont les solutions Slip et Snails nécessitent que leurs entrées soient complétées par un rectangle d'espace vide.
Essayez-le en ligne!
la source
Grime, 46 octets (non concurrent)
J'ai mis à jour Grime plusieurs fois après la publication de ce défi, cette réponse n'est donc pas éligible pour gagner. Certains des changements sont si nouveaux que je n'ai pas pu les intégrer à TIO, mais une fois que je le fais, vous pouvez essayer le programme . Dans tous les cas, mon référentiel contient une version qui gère correctement ce code.
Le programme imprime
1
si Mario peut atteindre l'objectif, et0
sinon. L'entrée doit contenir des espaces dans tous les endroits que Mario doit visiter. Pour les entrées générales, j'ai la solution suivante de 57 octets :Explication
L'explication de haut niveau est que le non-terminal
A
, défini sur la première ligne, correspond à un sous-rectangle 1 × 1 de l'entrée où Mario peut atteindre le but.A
est défini soit comme le littéralE
(Mario est déjà au but), soit comme un motif 1 × 1 qui se trouve dans la colonne de gauche d'un rectangle 2 × n contenant un saut Mario valide vers une autre correspondance deA
dans la colonne de droite. La deuxième ligne compte le nombre de correspondancesA
qui contiennent également le caractère de départS
et l'imprime.Voici une ventilation du code:
L'idée est que la
\ {,-4}
partie de gauche correspond à l'espace à travers lequel Mario saute vers le haut, et la\ /*
partie de droite correspond à la goulotte d'espace où il tombe ensuite. Nous exigeons qu'il atterrisse sur un match deA
(puisque nous voulons atteindre le but) qui est au-dessus d'un=
. Les piles verticales sous les deux colonnes garantiront simplement que les colonnes ont la même hauteur, afin que nous puissions les concaténer (c'est ce que fait l'espace unique au milieu). Voici un diagramme d'art ASCII d'un exemple de saut, divisé en rectangles susmentionnés et avec des espaces remplacés par*
s:Sur la deuxième ligne, l'option
n
déclenche le comptage de toutes les correspondances, au lieu de trouver la première correspondance. Dans la solution générale, les espaces peuvent également être des caractères spéciaux hors entrée et une optionb
entraîne le remplissage de l'entrée avec des caractères hors entrée.J'espère que tout cela a du sens!
la source