Definieren wir eine einfache 2D-Sprache, die den unglaublich ursprünglichen Namen enthält . Befinge hat 5 Anweisungen:
<>^v
Richten Sie, wie in den meisten 2D-Esolangs, den Befehlszeiger in die entsprechenden Richtungen um..
ist ein No-Op.
Der Anweisungszeiger beginnt oben links und geht nach rechts. Wenn der Befehlszeiger an eine Kante gelangt, wird das Programm angehalten. Jedes Befinge-Programm wird offensichtlich entweder anhalten oder in eine Endlosschleife geraten, die nichts bewirkt. Hier sind zwei Beispiele:
Anhalten:
>.v
..<
Nicht haltend:
>....v
..v..<
..>v..
^..<..
Das Halteproblem ist für eine Turing-vollständige Sprache nicht lösbar, aber für diese. Ihre Aufgabe ist es, ein Programm (oder eine Funktion) zu schreiben, das / die eine Zeichenfolge als Eingabe verwendet, die das befinge- Programm darstellt, und einen Wahrheits- oder False-Wert zurückgibt, je nachdem, ob es anhält oder nicht.
- Sie können davon ausgehen, dass die Eingabe nur aus diesen Zeichen besteht und mit Leerzeichen aufgefüllt wird, um ein Rechteck zu bilden.
- Sie können einen beliebigen Satz von fünf Zeichen für die Anweisungen verwenden (z
adws
. B. ).
Testfälle
Anhalten:
.
v>
>^
....v....
....>...v
.^..<....
.......v<
.......v.
....^..<.
v<>v>v^
>v^>^>v
<>>^v<v
v^<>v^<
Nicht haltend:
>..v
^..<
>v<
v<.
>v.
v<.
>.^
>.>.>.v
.><.<.<
Das ist Code-Golf , also gewinnt das kürzeste Programm (in Bytes).
quelle
>..>.
oder macht><
.Antworten:
ES6 (JavaScript),
111101 BytesBEARBEITEN: Die Ausgabewerte wurden in " wahr" und " falsch" anstatt in " y" und " falsch" geändert N , um weitere 10 Byte zu sparen
Golf gespielt
Prüfung
Beispielausgabe
quelle
Y
undN
als Ausgabe wie in JavaScript sind sie beide wahr .Python 2 ,
116105 BytesProbieren Sie es online!
Die Herausforderung ist alt, aber ich dachte, da dies das kürzeste Python ist, werde ich es veröffentlichen. Die Eingabe ist eine Liste von Zeichenfolgen, die verwendeten Zeichen sind jedoch ungewöhnlich.
Zum Beispiel wird das dritte Beispiel zum Anhalten zu
['LLLLCLLLL', 'LLLLGLLLC', 'LFLLBLLLL', 'LLLLLLLCB', 'LLLLLLLCL', 'LLLLFLLBL']
. Die Ausgabe erfolgt über den Exit-Code, 0 (Erfolg) für das Nicht-Anhalten und 1 (Fehler) für das Anhalten. Alle Tipps oder Tricks geschätzt.quelle
Befunge-98 (PyFunge) ,
217209200 BytesProbieren Sie es online!
Ein befinge haltendes Problem braucht eine befunge Lösung. Gibt 0 für wahr und 1 für falsch zurück. Setzt die Eingabe ab 1,15 in das Raster und bewegt sich dann nach oben, wobei die Pfeile durch Nullen ersetzt werden. Sobald wir eine Null erreicht haben, wissen wir, dass es Schleifen gibt. Alles andere als> <^ v. und Null wird in Betracht gezogen, um das Programm anzuhalten. Dies schließt die Grenze der Leerzeichen ein, die wir um das Programm herum erhalten, indem wir es leicht versetzt auf das Raster setzen.
Ein einfacher Weg, um ein paar Bissen abzukratzen, wäre die Verwendung von Zahlen anstelle von> <^ v. aber ich glaube nicht, dass es sich lohnt.
quelle
A befinge halting problem needs a befunge solution.
Genau. +1Turtlèd , 146 Bytes
Dieses Programm verwendet E / A anders: Bitte schließen Sie jede Zeile mit einem Leerzeichen ab, einschließlich des letzten. Turtlèd mag keine Zeilenumbrüche, da ein Raster für die zweite Dimension der Zeichen verwendet wird.
Probieren Sie es online!
0 für Schleifen für immer, 1 für Pausen.
Allgemeine Erklärung:
Es schreibt die Eingabe in das Raster und folgt dann tatsächlich dem Pfad, den die Pfeile um das Raster legen. Dabei wird jeder Pfeil durch ein * ersetzt und die Richtung in der Zeichenvariable gespeichert. Wenn das Programm auf einen Pfeil (*) stößt, den es zuvor getroffen hat, wird es nicht gestoppt. Setzen Sie daher das Zeichen var auf
0
, und beenden Sie die Schleife. Andernfalls wird das Ende des Gitters erreicht und die Schleife verlassen. Es wird das Zeichen var geschrieben. Wenn es das Ende des Rasters erreicht, verwendet es die in der char-Variable gespeicherte Richtung, um zum Raster zurückzukehren, und setzt die char-Variable1
für Pausen auf. Wenn das Zeichen var tatsächlich 0 war, keine Richtung, muss es nicht zurückgegeben werden, da es noch vorhanden ist, und setzt es zurück auf0
. Es löscht das Raster und schreibt dann die Zeichenvariable1
für Unterbrechungen0
.quelle
JavaScript (Node.js) , 80 Byte
Probieren Sie es online!
JavaScript (Node.js) , 86 Byte
Probieren Sie es online!
quelle
JavaScript (ES6),
158127 ByteNimmt die Eingabe als zweidimensionales Zeichenarray und gibt sie
true
zum Anhalten undfalse
für eine Endlosschleife zurück. Arbeitet, indem besuchte Richtungszeichen auf~
s gesetzt werden, während sie rekursiv durchlaufen werden. Bearbeiten: Speichert 31 Bytes, indem mein Richtungsvektor vor der Rekursion aktualisiert wird.Durch den Missbrauch der Anweisungszeichen (
1=^ 4=< 5=. 6=> 9=v
) kann ich auf 101 Bytes reduzieren :quelle
f=
in die Byteanzahl aufgenommen, aber nicht den Code ...SmileBASIC,
158145 BytesWenn derselbe Pfeil mehr als einmal vorkommt, wird das Programm niemals angehalten. Wenn der Befehlszeiger einen Pfeil übergibt, wird er durch ein anderes Symbol ersetzt, wodurch die Funktion bei erneutem Erreichen den Wert 0 zurückgibt. Wenn die IP-Adresse überschritten wird, wird 1 zurückgegeben.
Nimmt Eingaben als ein Array von Zeichenfolgen.
<any non-digit chracter>
,1
,2
,3
,4
=.
,>
,<
,v
,^
quelle
Python 2, 182 Bytes
Nimmt ein String-Array als Eingabe. Ich muss das mehr Golf spielen, aber jetzt ist es Zeit, über die Wahlen nachzudenken.
Ungolfed:
quelle
[-1,1][d=='v'] -> 2*(d>'>')-1
und[-1,1][d=='>'] -> 2*(d>'<')-1
speichern Sie insgesamt 6 Bytes.["<>"]
Clojure, 143 Bytes
Eine Funktion mit 4 Zustandsargumenten: Position
p
, Geschwindigkeitv
, Schrittindexi
und Größe einer Zeiles
. Kehrt zurück1
wenn wir die Grenzen nicht in 10 ^ 9 Schrittennil
überschritten haben. Wie viele Schritte müssen wir tatsächlich überprüfen, um sicherzugehen(count %)
? Ich denke, es ist mehr als das, da derselbe NOP horizontal und vertikal durchlaufen werden kann.Kann wie folgt aufgerufen werden (nimmt normale Strings als Argumente und gibt
get
zurück,nil
wenn sie außerhalb der Grenzen liegen):Zustandsübergänge (+1, -1, + s, -s) werden im Wörterbuch codiert
{\> 1\< -1\^(- s)\. v\v s}
.quelle
Python 2/3,
201192 BytesProbieren Sie es online!
Gibt die richtige Antwort für
["<>"]
quelle
def f(x):
mitx=input()
mit 0 Byte Differenz, dann die zusätzliche Vertiefung entfernen (-8 Bytes), dann ersetzenreturn x
mitexit(x)
(erlaubt pro Meta - Konsens ), für weitere 2 Byte. Wie auch immer, schöne Lösung!Java, 477
Ich weiß, dass dies nicht gewinnt, n = und wahrscheinlich mehr Golf gespielt werden kann, aber es implementiert eine ähnliche Methode wie die anderen Antworten, aber diese verwendet Hashmap, um Lookups durchzuführen. Die Eingabe verwendet die Symbole> <^ v und alles andere als das für die No-Op. Die Eingabe erfolgt über Argumente.
GOLFED
UNGOLFED
import java.util. *;
Erklärung folgt in Kürze!
quelle
String a[]
umString[]a
und lassen Sie den Raum.var
an vielen Orten verwenden, wenn Sie Java 10 verwenden.