Dieser Wettbewerb ist vorbei. Vielen Dank für die interessanten Nicht-Esolang-Einträge und herzlichen Glückwunsch an Jakuje für seine erfolgreiche JavaScript-Einsendung.
In der großen Tradition der ASCII Art Challenges auf dieser Site finden Sie hier eine weitere. Zeichnen Sie bei einer Eingabe eine Spirale.
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Einfach, ja? Heh, heh, heh ... Ja ...
(Inspiriert vom ASCII Dragons Curve- Post und den ASCII Art of the Day- Posts des Optimizers )
Eingang
Die Eingabe erfolgt in Form einer Reihe von Parametern, die aus dem üblichen STDIN / Funktionsargument / usw. Stammen und aus vier Teilen bestehen. Diese Teile können aus vier separaten Argumenten, einem Vierfachen, einem Array der Größe 4 usw. bestehen. Der Einfachheit und Konsistenz halber werde ich die Eingabe als ein einzelnes Wort darstellen.
- Eine Ganzzahl
2 ≤ x ≤ 20
, die die Größe der Spirale in Form von "Quadraten" angibt, wobei jedes gedruckte Zeichen ein "Quadrat" darstellt. Theoretisch könnte dies einen enormen Umfang haben, aber angesichts der Tatsache, dass wir ASCII-Kunst zeichnen, wird eine sichere Obergrenze von 20 festgelegt, damit sie auf den Bildschirm passt. - Ein einzelner Buchstabe von
d u r
oderl
, der die anfängliche Bewegung vom Startquadrat (abwärts, aufwärts, rechts, links) anzeigt. - Ein optionales Symbol
c
, das "gegen den Uhrzeigersinn" anzeigt. Wenn dasc
weggelassen wird, nehmen Sie eine Drehung der Spirale im Uhrzeigersinn an. - Eine letzte Ganzzahl
1 ≤ y ≤ 10
, die angibt, wie oft die Spiralzeichnung wiederholt werden soll, wobei das Endquadrat der vorherigen Spirale als Startquadrat des neuen verwendet wird. Ich wähle eine Obergrenze von 10, weil ich möchte, dass die Zeichnung irgendwann fertig wird. - Einige Beispieleingaben:
20lc5
13d2
2rc1
Es ist von Interesse, dass ungerade Werte für die Größeneingabe dazu führen, dass @
immer der exakte Mittelpunkt einer Spirale ist. Gerade Werte können jedoch in Abhängigkeit von der Anfangsrichtung in jeder der vier diagonalen Richtungen den Startquadratversatz aufweisen Reise. Dies kann zu einigen ... interessanten ... Mustern führen. Siehe die zwei geraden Beispiele unten.
Eingaben, die nicht der Eingabespezifikation entsprechen (z. B. 11q#s
), sind undefiniert, und ich erwarte, dass das Programm entsprechend gesperrt wird. :)
Ausgabe
Bei der Ausgabe handelt es sich um eine druckbare ASCII-Ausgabe über sprachäquivalentes STDOUT mit den folgenden Spezifikationen:
- Das Startquadrat (jeder Rekursion) muss mit einem At-Zeichen gekennzeichnet sein
@
. - Das letzte "Quadrat" muss mit einem kaufmännischen Und markiert werden
&
. Bei mehreren Rekursionen sollte nur das letzte "Quadrat" markiert werden&
. - Ecken der Spiralbahn müssen mit in Fahrtrichtung "zeigen"
< > v ^
. - Die vertikale Bewegung muss durch Rohre erfolgen
|
. - Die horizontale Bewegung muss mit Bindestrichen gezeichnet werden
-
. - "Quadrate", die durch spätere Rekursionen überschrieben werden, sollten die aktuellste Fahrtrichtung anzeigen. Dies führt dazu, dass "neuere" Rekursionen scheinbar über die "älteren" Rekursionen gelegt werden. Siehe das folgende
4rc3
Beispiel. - Ein abschließender Zeilenumbruch ist in Ordnung, führende Leerzeichen können ein Muss sein und sind daher zulässig, abschließende Leerzeichen sind jedoch nicht zulässig.
- Ich werde Sie nicht andocken, wenn Sie Escapesequenzen verwenden, um die ASCII-Grafik für STDOUT zu zeichnen, aber ich werde stumm von Ihnen enttäuscht sein. (Sie sind weiterhin berechtigt, die Prämie zu erhalten, wenn Sie sie verwenden.)
Beispiele
2d4
= Durchmesser von 2, beginnt im Uhrzeigersinn, 4 Rekursionen
&@@@@
^<<<<
In diesem Beispiel beginnt die Zeichnung oben rechts @
, geht eine nach unten, eine nach links und eine nach oben. An diesem Punkt haben wir den 2d
Teil beendet und beginnen die 2. Rekursion, so dass wir einen weiteren haben, einen nach @
unten, einen nach links, einen nach oben; dann die 3. Rekursion; dann der 4. und endlich unser &
.
4rc3
= Durchmesser von 4, rechts beginnend, gegen den Uhrzeigersinn, 3 Rekursionen
&--<
v-<|
|@^|<
>--^|
|@^|<
>--^|
|@^|
>--^
In diesem Beispiel beginnt die Zeichnung unten @
, verläuft eine nach oben und spiralförmig nach rechts, bis sie die Mitte erreicht @
und den 4rc
Abschnitt beendet. Dies wird dann noch zweimal wiederholt, um die vollen 3 angeforderten Rekursionen zu erhalten. Beachten Sie, dass 4rc1
dies nur der obere linke 4x4-Block in diesem Beispiel ist.
7u1
= Durchmesser von 7, beginnt im Uhrzeigersinn, 1 Rekursion (beachten Sie, dass dies dasselbe ist wie das Intro)
&>----v
||>--v|
|||>v||
|||@|||
||^-<||
|^---<|
^-----<
Gewinnen & Einschränkungen
Das ist Code Golf, also gewinnt die kleinste Antwort in Bytes. Die Einreichung sollte in der üblichen Form von Programm / Funktion / CJam Code Block / etc. Erfolgen. Es gelten die üblichen Lückenbeschränkungen. Berufskraftfahrer auf geschlossenem Kurs. Wenn die Reizung anhält, stellen Sie die Anwendung ein und konsultieren Sie Ihren Arzt.
Antworten:
Javascript,
578,575,553,478377 BytesNach der geschlagenen Lua habe ich auf eine kompaktere Sprache umgestellt und die Konkurrenz auf Javascript umgestellt:
Der Algorithmus ist derselbe, aber in einer kompakteren Sprache geschrieben, also habe ich es geschafft, den bösen Lisp zu besiegen :)
Bearbeiten: Einige strukturelle Änderungen waren erforderlich, um wieder unter Lisp zu gelangen und nachfolgende Leerzeichen zu entfernen. Aber wir sind wieder da.
Edit2: Einige Abstraktionen berücksichtigt, um unter 500 zu bekommen. Hoffe, es wird genug sein :)
Edit3: Danke @Timwi, der Code ist noch 100 Zeichen schlanker. Ich habe die Erklärung noch nicht aktualisiert.
Tests ( Online-Version , getestet in Chrome):
Und um fair zu sein, gibt es eine faire Erklärung:
quelle
&optional
Stichwort (und ein Leerzeichen), um 10 Bytes zu speichern, die 576 ... gibt böse Lachen (na ja, Sie sagten , Sie Golf könnte ein wenig mehr, so dass diese sollte nicht schwer zu schlagen sein; bis jemand eine 60-Byte-Antwort in Pyth schreibt, natürlich).i=M/2;j=i;G=i;H=i;I=i;J=i;
ini=j=G=H=I=J=M/2;
undm=1;l=1;
inm=l=1;
Gemeines Lisp,
649617605586576565554527518Alle Tests bestehen weiterhin. Die Funktion "Ungolfed" wurde ebenfalls aktualisiert, um die Änderungen sowie die Kommentare wiederzugeben. Ich habe es endlich
remove-duplicates
geschafft, den Code zu verkürzen, aber jetzt weiß ich nicht, wo ich mehr Bytes finden kann. Gut gemacht, Jakuje.Beispiele
Siehe auch
20lc10
(Pastebin).Ungolfed
Hier handelt es sich nicht um eine Rekursion, sondern nur um einen einfachen Turtle-Grafikansatz mit Schleifen:
(x y char)
Tripel in einem Stapel speichern .y
undx
quelle
Lua 5.2, 740 Bytes
Ich denke, dass es Spaß machen würde, einen Algorithmus zu implementieren, um Lisp zu schlagen, aber Lua ist wahrscheinlich nicht die beste Option. Ich verbringe zu viel Zeit damit, einige Teile zu überarbeiten, um mit dieser ugglen, aber funktionierenden Lösung fertig zu werden. Wahrscheinlich werde ich später eine andere Sprache ausprobieren, um Lisp zu schlagen, da es ungefähr 90 Zeichen gibt, die ich von diesem Algorithmus nicht wegnehmen kann.
Ausgänge testen:
quelle
PHP, 524 Bytes
Ich bin spät zu dieser Party gekommen. Meine PHP-Lösung ist weder die kleinste noch die intelligenteste. Es funktioniert einfach
Wie man es ausführt:
Die ausführliche Version mit Tests, Erklärungen und anderen Extras finden Sie auf Github .
quelle