Welche allgemeinen Tipps haben Sie zum Golfen in 2-dimensionalen Programmiersprachen? Ich suche nach Tipps, die auf Code-Golf-Probleme angewendet werden können und für 2D-Programmiersprachen spezifisch sind, aber für keine Sprache spezifisch sind (Antworten wie "Kommentare entfernen" und " M
Operation verwenden" sind keine Antworten).
Bitte posten Sie einen Tipp pro Antwort.
Antworten:
Vermeiden Sie horizontale Lücken
Oft hinterlässt Code große Leerzeichen auf der linken Seite des Programms.
Dies fügt 4 Bytes hinzu, wenn dies durch Linksausrichtung vermieden werden könnte.
Wenn Sie große Leerzeichen verwenden müssen, versuchen Sie, diese nicht horizontal, sondern vertikal auszurichten.
vs
quelle
Verwenden Sie nach Möglichkeit eine Dimension
Normalerweise können einfachere Programme in eine einzelne Zeile geschrieben werden. Das klassische Katzenprogramm könnte beispielsweise sein:
Aber man könnte das Wickelverhalten missbrauchen und folgendes machen:
Oder in Sprachen ohne ein solches Umbruchverhalten:
(Vorausgesetzt,
?
es wird nicht angezeigt.) Bei einer nicht umschließenden Sprache ist eine explizite Schleife häufig besser.Mit Sprungbefehlen
In 2D-Sprachen mit Sprung- und bedingten Sprungbefehlen könnte ein Programm folgendermaßen aussehen:
Dies könnte auch sein:
(wenn
!
es sich um ein Trampolin handelt und&
auf Position springt)quelle
ioiioiioi
usw.?io;
ich tun soll und alles was ich weiß ist, dass?
es nicht knallt. Es sieht so aus, als wären das Fischkommandos, aber ich glaube nicht, dass sie sehr normal sind.Zeilenumbrüche sind auch Bytes
Je weniger 2D Sie erstellen können, desto besser. Ein Wagenrücklauf ist ein weiteres No-Op. Versuchen Sie, die Y-Dimension so klein wie möglich zu halten, ohne die Tipps von nur @ATaco und @ ASCII zu ignorieren.
Dies
ist besser als
quelle
\n
(Zeilenvorschub) ist ein Zeilenende, das auf POSIX-Systemen regelmäßig in linksbündigem Text verwendet wird, obwohl Windows und Mac OS (Pre-MacOS) Kombinationen aus\n
(Zeilenvorschub) und\r
(Wagenrücklauf) verwenden.TROCKEN (Wiederholen Sie sich nicht)
Während das Abstrahieren mit Funktionen in Code Golf normalerweise länger dauert, kann es für 2D-Sprachen sehr hilfreich sein. Versuchen Sie, Ihren Code zu überarbeiten, damit er dasselbe Snippet wiederverwenden kann, indem Sie es mit zwei verschiedenen Ausführungszweigen eingeben / beenden.
quelle
Pfade verschachteln
Normalerweise gibt es in einer 2D-Sprache eine IP, die sich gemäß Richtungsbefehlen bewegt. Da Leerzeichen Byte kosten, ist es fast immer effizienter, das Programm neu anzuordnen, sodass es so oft wie möglich nach links verschoben wird, um unnötige Auffüllbereiche zu vermeiden.
quelle
Verwenden Sie Spiegel
Spiegel können manchmal gleichzeitig auf zwei Pfaden verwendet werden (jeder Pfad springt von einer Seite des Spiegels ab). Dies scheint nicht zu helfen, aber es kann Ihnen ermöglichen, Ihr Programm neu zu ordnen, oder wenn Sie eine Menge Richtungsänderungen haben, können diese möglicherweise durch weniger Spiegel ersetzt werden.
quelle
Merke dir Redewendungen
Hier sind einige "Redewendungen", die je nach Art der Sprache bestimmte Dinge tun.
Pseudolinearer Code
Wenn jemals eine dynamische Codegenerierung erforderlich sein sollte, kann es hilfreich sein, das pseudolineare Codemodell zu verwenden:
Vorausgesetzt
\
undv
gemeint, was sie normalerweise tun.Endlosschleife
Ist in fast allen 2D-Sprachen
><
eine unendliche, unzerbrechliche Schleife. Wenn Sie dies aus irgendeinem Grund tun müssen, ist dies der beste Weg, ungeachtet dessen, wie schön dies aussehen mag:Wenn Sie Ihren Code zu einem 1-Liner machen , können Sie einfach
^
oderv
als solches verwenden:Dadurch
v
wird die IP an sich selbst gesendet und gewickelt. Möglicherweise können Sie diesen Ansatz auch dann verwenden, wenn ein Richtungsbefehl auf eine Reihe von (relativen) No-Ops verweist.Quine Framework
Normalerweise können Sprachen mit einem String- / Anführungszeichen-Framework ein Quine wie das folgende haben:
Für> <> würde dies so aussehen:
Außer dies wird mit einem Fehler als Kündigung beendet. Es ist wahrscheinlich die kürzeste Quine , oder zumindest die kürzeste, die ich gefunden habe.
quelle
<
in der> <> quine?"
landet auf der falschen Seite. Ansonsten ist der Tipp gut. Ich habe diesen allgemeinen Rahmen in vielen meiner Antworten verwendet