Tipps zum Golfen in 2D-Sprachen

18

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 " MOperation verwenden" sind keine Antworten).

Bitte posten Sie einen Tipp pro Antwort.

Weizen-Assistent
quelle
Sollte diese Frage nicht auf Meta stehen?
Mr Lister,
2
Es gibt eine ähnliche Meta - Frage hier: was ist die Größe eines 2D - Programm? Überdachte Fläche? Fläche der konvexen Hülle? Bereich des achsenausgerichteten enthaltenden Rechtecks? Alles könnte bessere Maße sein als irgendeine Form von ASCII-Größe.
MSalters
Fragen zu @ MrLister-Tipps beziehen sich auf die Hauptseite. Wenn Sie schauen, können Sie sehen, dass wir bereits viele Fragen unter dem Stichwort tips haben.
Weizen-Assistent
@MSalters Wie jede andere Programmiersprache wird die Länge in Bytes gemessen. Einige Sprachdesigner erlauben es, 2D-Sprachen wie Hexagony oder Cubix auf unterschiedliche Weise anzuordnen.
Weizen-Assistent

Antworten:

19

Vermeiden Sie horizontale Lücken

Oft hinterlässt Code große Leerzeichen auf der linken Seite des Programms.

abc
  d
  e

Dies fügt 4 Bytes hinzu, wenn dies durch Linksausrichtung vermieden werden könnte.

cde
b
a

Wenn Sie große Leerzeichen verwenden müssen, versuchen Sie, diese nicht horizontal, sondern vertikal auszurichten.

########
#      #
#      #
#      #

vs

####
#
#
#
#
#
#
####
Ein Taco
quelle
11

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:

>iv
^o<

Aber man könnte das Wickelverhalten missbrauchen und folgendes machen:

io

Oder in Sprachen ohne ein solches Umbruchverhalten:

> ?oi<

(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:

abc >de?v;
    ^hgf<

Dies könnte auch sein:

abc de?!;hgf04&

(wenn !es sich um ein Trampolin handelt und &auf Position springt)

Conor O'Brien
quelle
Tut nicht Ihr drittes Beispiel ioiioiioiusw.?
Nur ASCII
@ Nur ASCII In der Tat. Hoppla.
Conor O'Brien
1
Sie sollten wahrscheinlich angeben, was einige der weniger regulären Befehle tun. Zum Beispiel weiß ich nicht was 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.
Weizen-Assistent
2
In einigen 2D-Sprachen ohne Befehle zum bedingten Überspringen (wie Labyrinth) können Sie auch häufig einzeilige Programme schreiben, indem Sie das Programm mit einer Division durch Null bedingt beenden.
Martin Ender
10

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

###
###
###
##
#
#
#
#
MickyT
quelle
Zeilenumbrüche sind nicht immer Bytes. \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.
wizzwizz4
9

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.

Cyoce
quelle
8

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.

Nur ASCII
quelle
2

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.

Nur ASCII
quelle
2

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:

v
\"line 1"
\"line 2"
.
.
\"line N"

Vorausgesetzt \und vgemeint, 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:

>v
^<

Wenn Sie Ihren Code zu einem 1-Liner machen , können Sie einfach ^oder vals solches verwenden:

i?vo;

Dadurch vwird 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:

<quote><generate "><output stack><terminate>

Für> <> würde dies so aussehen:

":1-r>o<#

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.

Conor O'Brien
quelle
Dies scheint nicht wirklich ein Tipp zu sein.
Weizen-Assistent
@WheatWizard Ich habe sie zusammengehalten, weil es für mich weniger sinnvoll war, sie aufzuteilen, da es sich um alle gängigen Programmlayout-Idiome handelt.
Conor O'Brien
Warum hast du die <in der> <> quine?
Jo King
@JoKing Ich bin nicht besonders sicher, lol
Conor O'Brien
Auch die "landet auf der falschen Seite. Ansonsten ist der Tipp gut. Ich habe diesen allgemeinen Rahmen in vielen meiner Antworten verwendet
Jo King,