Définissons un langage simple 2D, que nous allons donner le nom d' origine incroyablement befinge . Befinge a 5 instructions:
<>^v
, comme dans la plupart des esolangs 2D, redirigez le pointeur d'instruction dans leurs directions respectives..
est un no-op.
Le pointeur d'instructions commence dans le coin supérieur gauche en allant vers la droite. Si le pointeur d'instruction atteint un bord, le programme s'arrête. Chaque programme Befinge s'arrêtera évidemment ou entrera dans une boucle infinie qui ne fait rien. Voici deux exemples:
Arrêt:
>.v
..<
Sans interruption:
>....v
..v..<
..>v..
^..<..
Le problème d'arrêt n'est pas résolu pour un langage complet de Turing, mais il l'est pour celui-ci. Votre tâche consiste à écrire un programme (ou une fonction) qui prend en entrée une chaîne représentant le programme befinge et renvoie une valeur true ou falsey selon qu'elle s'arrête ou non.
- Vous pouvez supposer que l'entrée ne comprendra que ces caractères et sera complétée par des espaces pour former un rectangle.
- Vous pouvez utiliser n'importe quel ensemble de cinq caractères pour les instructions (par exemple
adws
).
Cas de test
Arrêt:
.
v>
>^
....v....
....>...v
.^..<....
.......v<
.......v.
....^..<.
v<>v>v^
>v^>^>v
<>>^v<v
v^<>v^<
Sans interruption:
>..v
^..<
>v<
v<.
>v.
v<.
>.^
>.>.>.v
.><.<.<
Il s'agit de code-golf , donc le programme le plus court (en octets) l'emporte.
la source
>..>.
ou><
.Réponses:
ES6 (JavaScript),
111, 101 octetsEDIT: a changé les valeurs de sortie en vrai et faux , au lieu de Y et N , pour réduire de 10 octets de plus
Golfé
Tester
Exemple de sortie
la source
Y
etN
en sortie comme en JavaScript, ils sont tous les deux véridiques .Python 2 ,
116105 octetsEssayez-le en ligne!
Le défi est vieux, mais je me suis dit que comme c'est le Python le plus court, je le posterai. L'entrée est une liste de chaînes, mais les caractères utilisés sont inhabituels.
Par exemple, le troisième exemple d'arrêt se transforme en
['LLLLCLLLL', 'LLLLGLLLC', 'LFLLBLLLL', 'LLLLLLLCB', 'LLLLLLLCL', 'LLLLFLLBL']
. La sortie se fait via le code de sortie, 0 (succès) pour la non-interruption et 1 (erreur) pour l'arrêt. Tous les trucs ou astuces sont appréciés.la source
Befunge-98 (PyFunge) ,
217209200 octetsEssayez-le en ligne!
Un problème d'arrêt de befinge a besoin d'une solution de befunge. Renvoie 0 pour véridique et 1 pour falsey. Place l'entrée sur la grille à partir de 1,15 puis se déplace en haut, en remplaçant les flèches par des zéros. Dès que nous atteignons un zéro, nous savons qu'il boucle. Autre chose que> <^ v. et zéro est considéré comme interrompant le programme, ce qui inclut la frontière des espaces que nous contournons en le plaçant sur la grille légèrement décalée.
Un moyen facile de raser quelques bouchées serait d'utiliser des nombres au lieu de> <^ v. mais je ne pense pas que cela en vaille la peine.
la source
A befinge halting problem needs a befunge solution.
Précisément. +1Turtlèd , 146 octets
Ce programme prend les E / S différemment: veuillez terminer chaque ligne avec un espace, y compris le dernier. Turtlèd n'aime pas les nouvelles lignes, car il utilise une grille pour sa deuxième dimension de personnages.
Essayez-le en ligne!
0 pour les boucles pour toujours, 1 pour les arrêts.
Explication générale:
Il écrit l'entrée sur la grille, puis il suit en fait le chemin que les flèches font autour de la grille, remplaçant chaque flèche par un * au fur et à mesure, enregistrant également la direction dans la var char. S'il rencontre un *, une flèche qu'il a frappée auparavant, le programme ne s'arrêtera pas, il définit donc la variable char sur
0
, quitte la boucle. Sinon, il atteindra la fin de la grille et quittera la boucle. Il écrira le char var. S'il atteint la fin de la grille, il utilise la direction stockée dans le var var pour revenir à la grille et définit le var var sur1
, pour les arrêts. Si le caractère var était en fait 0, pas une direction, il n'a pas besoin de revenir en arrière, car il est toujours là, et il le remet à0
. Il efface la grille, puis écrit le var var,1
pour les arrêts, sinon0
.la source
JavaScript (Node.js) , 80 octets
Essayez-le en ligne!
JavaScript (Node.js) , 86 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
158127 octetsPrend l'entrée comme un tableau de caractères à deux dimensions et retourne
true
pour l'arrêt etfalse
pour une boucle infinie. Fonctionne en définissant les caractères de direction visités sur~
s lors de leur traversée récursive. Edit: économisé 31 octets en mettant à jour mon vecteur de direction avant de revenir.Abuser des caractères d'instruction (
1=^ 4=< 5=. 6=> 9=v
) me ramène à 101 octets:la source
f=
nombre d'octets mais pas le code ...SmileBASIC,
158145 octetsSi la même flèche est rencontrée plus d'une fois, le programme ne s'arrêtera jamais. Lorsque le pointeur d'instruction passe devant une flèche, il est remplacé par un symbole différent, ce qui fera que la fonction retournera 0 si elle est à nouveau atteinte. Si l'IP sort des limites, elle renvoie 1.
Prend l'entrée comme un tableau de chaînes.
<any non-digit chracter>
,1
,2
,3
,4
=.
,>
,<
,v
,^
la source
Python 2, 182 octets
Prend un tableau de chaînes en entrée. Je dois jouer davantage au golf, mais pour l'instant, il est temps de souligner les élections.
Non golfé:
la source
[-1,1][d=='v'] -> 2*(d>'>')-1
et[-1,1][d=='>'] -> 2*(d>'<')-1
enregistrez un total de 6 octets.["<>"]
Clojure, 143 octets
Une fonction avec 4 arguments d'état: position
p
, vitessev
, index de pasi
et taille d'une lignes
. Renvoie1
si nous ne sommes pas sortis des limites en 10 ^ 9 étapes etnil
sinon. En fait, combien d'étapes devons-nous vérifier pour être sûr(count %)
? Je pense que c'est plus que cela car le même NOP peut être traversé horizontalement et verticalement.Peut être appelé comme ceci (prend des chaînes normales comme arguments,
get
retournenil
en dehors des limites):Les transitions d'états (+1, -1, + s, -s) sont codées dans le dictionnaire
{\> 1\< -1\^(- s)\. v\v s}
.la source
Python 2/3,
201192 octetsEssayez-le en ligne!
Donne la bonne réponse pour
["<>"]
la source
def f(x):
par unex=input()
différence de 0 octet, puis supprimer l'indentation supplémentaire (-8 octets), puis remplacerreturn x
parexit(x)
(autorisé par méta-consensus ), pour 2 autres octets. Quoi qu'il en soit, belle solution!Java, 477
Je sais que ce n'est pas gagnant, n = et peut probablement être joué plus, mais cela implémente une méthode similaire à ce que les autres réponses utilisent, mais celle-ci utilise hashmap pour effectuer des recherches. L'entrée utilise les symboles> <^ v et tout autre chose que pour le no op. L'entrée provient d'arguments.
GOLFED
NON GOLFE
import java.util. *;
Explication à venir bientôt!
la source
String a[]
àString[]a
et omettre l'espace.var
dans de nombreux endroits si vous utilisez Java 10.