Zeichnen Sie den Weg von Langtons Ameise .
Beschreibung
Quadrate in einer Ebene sind unterschiedlich schwarz oder weiß gefärbt. Wir identifizieren willkürlich ein Quadrat als "Ameise". Die Ameise kann sich bei jedem Schritt in eine der vier Hauptrichtungen bewegen. Die Ameise bewegt sich nach folgenden Regeln:
- Drehe an einem weißen Quadrat um 90 ° nach rechts, drehe die Farbe des Quadrats um und gehe eine Einheit vorwärts
- Drehe dich an einem schwarzen Quadrat um 90 ° nach links, drehe die Farbe des Quadrats um und gehe eine Einheit vorwärts
Spezifikationen
- Eingabe: eine ganze Zahl N zwischen 0 und 725 (einschließlich).
- Ausgabe: Ein Raster von 17 x 17, das den "Pfad" der Ameise ab Schritt N darstellt.
Regeln
- Die Ameise beginnt nach rechts zu schauen (3 Uhr).
- Die Ameise beginnt in der Mitte des Gitters.
- Verwenden Sie
_#@
für weiße Quadrate, schwarze Quadrate und die Ameise. - Das Gitter ist anfangs komplett weiß.
- Sie können entweder ein komplettes Programm oder eine Funktion in einer interpretierten Sprache erstellen.
- Eingabe per stdin oder Argument.
Beispiele
Update: Fall N = 450 Ausgabe war falsch.
N = 0
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 1
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________#________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 450
_________________
_________________
___________##____
____##______##___
___#__##___##_#__
__###_#@#__#__#__
__#_#_#_#__#_#___
_____###___#_____
_____#___________
_____#__###______
___#_#_#__#_#_#__
__#__#_#____###__
__#_##__##___#___
___##______##____
____##___________
_________________
_________________
Antworten:
GolfScript - 67 Zeichen
Die Python-Lösung von hallvabo ähnelt dieser am meisten, daher beschreibe ich nur die Hauptunterschiede.
Die Karte wird als Zeichenfolge anstelle eines Arrays gespeichert. Auf diese Weise können wir einen Wert auf der Platine mit weniger Zeichen aktualisieren (da die Zeichenfolgen immer flach sind), sodass es einfach ist, ihn auf das gewünschte Ausgabeformat zu bringen.
Die Ameisenposition wird durch die Formel
((d&1)*17+1)*((d&2)-1)
(dh.1&17*)\2&(*
) inkrementiert , wobei d die Richtung ist. Wir verwenden die Variable6
, um die Initialisierung zu überspringen.quelle
:6
- so Hipster. Ich würde es hassen, Ihren Code zu debuggen :-)Ruby 1.9, 104 Zeichen
Eingabe über Funktionsargument.
m
r*r>1
anstelle vonr.abs>1
String#scan
diese Option , um die Ausgabe zu generieren. Geändert von a==
zu>
String#tr
eine Bedingung ersetzenquelle
Python, 123
Nur eine kleine Überarbeitung meiner Python-Lösung von http://golf.shinh.org/p.rb?Langtons+Ant .
quelle
GolfScript
969489Meine Lieblings-Hasssprache ist zurück mit einem weiteren Haufen halblesbarer Sorta-Byte-Codes.
89 Version habe ich es endlich geschafft, @ in die Ausgabeschleife zu integrieren.
94 version:
Kommentiert:
Bearbeiten, ich könnte auch eine große Version machen, hier sind 59 * 59 und 10500 Iterationen:
.
quelle
Windows PowerShell,
119118quelle
PHP,
350309307312174161166159151149147144143Ungolfed
350 -> 309: Verschiedene Komprimierungstechniken mit den for () - Schleifen, die ebenfalls aktualisiert wurden, um die korrekte Ausgabe anzuzeigen.
309 -> 307: Konvertierte main for () -Schleife in eine while () -Schleife.
307 -> 312: Vergessen, es zu ändern, um argv zu verwenden.
312 -> 174: Auf der Grundlage einer anderen Antwort neu codiert.
174 -> 161: Standardmäßig wird nicht mehr das gesamte Array verwendet.
161 -> 166: Argv gewinnt erneut.
166 -> 159: Keine Notwendigkeit, argv neu zu definieren [1].
159 -> 151: Keine Voreinstellung mehr, PHP macht das automatisch.
151 -> 149: Ein Satz von Klammern wurde entfernt, die Reihenfolge der Operationen beseitigt die Notwendigkeit.
149 -> 147: Die letzte for () -Schleife wurde gekürzt, Klammern werden nicht benötigt.
147 -> 144:Last for () Schleife ist jetzt eine while () Schleife.
144 -> 143: Verwendet eine temporäre Variable zum Speichern eines Zeichens.
quelle
C
166,162Hier eine Übersetzung meines Delphi-Ansatzes nach C, die zeigt, wie kompakt C sein kann. Ich habe mir den bedingten Newline-Trick von fR0DDY ausgeliehen (danke Kumpel!):
Die eingerückte, kommentierte Version sieht folgendermaßen aus:
quelle
"_@#"[g[i]]
unda+=(1-(d&2))*(1+(16*(d&1)))
(1+d%2*16)
spart ein paar Zeichen.Delphi, 217
Der eingerückte und kommentierte Code lautet wie folgt:
Eingang:
Ausgabe :
quelle
C 195 Zeichen
http://www.ideone.com/Dw3xW
Ich bekomme das für 725.
quelle
p+=t+4;x+=a[p%4];
stattp=(p+t+4)%4;x+=a[p];
drei Zeichen speichern.sed, 481 Zeichen
Kann auf 478 Zeichen reduziert werden, indem die erste Zeile entfernt und mit ausgeführt wird
-n
Benötigt N Zeilen für die Eingabe, z. wenn ausgeführt als
Ausgänge:
quelle
Perl, 110 Zeichen
Die Nummer wird aus der ersten Zeile von STDIN gelesen. Der Rest der Eingabe wird ignoriert.
Etwas besser lesbar:
Bearbeitungen
(112 → 111) Keine Aktualisierung
$d
mit dem Modulo-4-Wert erforderlich .(111 → 110) Kann jetzt das
$d
Inkrement inline setzenAnhang (109 Zeichen)
Wir können es ein Zeichen kürzer haben, wenn Sie froh sind, den Sonderfall des
N=0
Scheiterns zu haben (er gibt das@
Zeichen für die Ameise nicht aus). Alle anderen Eingaben funktionieren korrekt:Die Unterschiede sind, dass wir jetzt
%f
statt verwenden,@f
damit wir negative Indizes verwenden können, und wir iterieren-144..144
statt0..288
. Das erspart das Initialisieren$p
.quelle
Mathematica, 94 Zeichen
quelle
> <> 122 Bytes
Auf die Gefahr einer kleinen Threadnekromantie dachte ich, eine Antwort in> <> zu schreiben, wäre eine interessante Herausforderung ...
Dieses Programm erwartet, dass die Anzahl der zu berechnenden Schritte vor der Ausführung auf dem Stapel vorhanden ist.
quelle