Aufgabe
Nehmen Sie bei einer nicht leeren Zeichenfolge aus ASCII-Kleinbuchstaben a
- z
das erste Zeichen und:
- Umgeben Sie es mit einem Quadrat von Kopien des zweiten Zeichens,
- Umgeben Sie das mit einem Diamanten von Kopien des dritten Zeichens,
- Umgeben Sie das mit einem Quadrat mit Kopien des vierten Zeichens…
… Abwechselnd quadratische und rautenförmige Ränder bis zum Ende der Saite. Leerzeichen zwischen den Rändern sollten durch ASCII-Leerzeichen ( ) dargestellt werden.
Zeichnen Sie zum Hinzufügen eines quadratischen Rahmens ein Quadrat genau um das gesamte aktuelle "Arbeitsarray":
sssssssssss
t s t s
t t s t t s
t t s t t s
t aaa t s t aaa t s
t aca t => st aca ts
t aaa t s t aaa t s
t t s t t s
t t s t t s
t s t s
sssssssssss
Um einen Diamantrand hinzuzufügen , zeichnen Sie eine zentrierte Diamantform, die das äußerste Quadrat diagonal , aber nicht orthogonal berührt :
s
s s
s s
s s
s s
s s
s s
wwwwwwwwwww s wwwwwwwwwww s
w o w s w o w s
w o o w s w o o w s
w o o w s w o o w s
w o eee o w s w o eee o w s
wo eme ow => s wo eme ow s
w o eee o w s w o eee o w s
w o o w s w o o w s
w o o w s w o o w s
w o w s w o w s
wwwwwwwwwww s wwwwwwwwwww s
s s
s s
s s
s s
s s
s s
s
Ihr Programm muss das endgültige Array ausgeben.
- Jede Zeile darf beliebig viele nachgestellte Leerzeichen enthalten.
- Sie können eine Liste von Zeichenfolgen ausgeben, die Zeilen darstellen, oder eine einzelne durch Zeilenumbrüche getrennte Zeichenfolge mit einer optionalen nachgestellten Zeile.
- Führende / nachfolgende Leerzeilen sind nicht zulässig.
- Führende Spalten mit Leerzeichen sind ebenfalls nicht zulässig.
Das ist Code-Golf . Der kürzeste Code in Bytes gewinnt.
Testfälle
Die obigen Beispiele sind erwartete Ausgänge für cat
, cats
, meow
, und meows
, um beim Lesen. Einige andere Fälle, die es wert sind, behandelt zu werden:
Für die Eingabe
a
sollte Ihr Programm Folgendes ausgeben:a
Für die Eingabe
ab
sollte Ihr Programm Folgendes ausgeben:bbb bab bbb
Für die Eingabe
codegolf
sollte Ihr Programm Folgendes ausgeben:fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff f l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l ooooooooooooooooooooooooooo l f f l o g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g eeeeeeeeeee g o l f f l o g e d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d ooo d e g o l f fl og ed oco de go lf f l o g e d ooo d e g o l f f l o g e d d e g o l f f l o g e d d e g o l f f l o g e d e g o l f f l o g eeeeeeeeeee g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g g o l f f l o g o l f f l ooooooooooooooooooooooooooo l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l l f f l f fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Referenzimplementierung
Ich habe Julia-Code geschrieben, mit dem die Ausgabe Ihres Programms übereinstimmen sollte (zumindest visuell). Probieren Sie es online!
\r\n
) anstelle von einem (\n
) zählen?prompt
und Bytes gespart werdenconsole.log
. Sie können auch Template-Strings verwenden, wodurch Sie 2 Bytes pro Funktionsaufruf auf Strings (wiefill(' ')
wirdfill` `
)S-i-1
aufS+~i
undi%2||o--
auf kürzeno-=~i&1
.a=Array(D*2+1).fill
.map((_,$,a)=>[...a])
spart Ihnen 10 Bytes.Haskell,
138137136 BytesDefiniert eine Funktion,
f
die das Ergebnis als Zeilenliste zurückgibt-1 Byte dank @Lynn
quelle
C ++ -
373 366 362359 Bytes-1 von @TuukkaX, -6 von @Kevin Cruijssen, -4 von Importen, -3 von @Baum mit Augen
http://ideone.com/5y54mx
Hinweis: Bei dieser Lösung wird der Punkt ('.') Als "Leerzeichen" verwendet, um die Leerzeichen besser sichtbar zu machen. Um ein Leerzeichen zu verwenden , stattdessen muss man Änderung
S(s,46)
zuS(s,32)
. Die Punktzahl bleibt gleich.Ungolfed:
Online ungolfed versuchen
Wie benutzt man:
Ausgabe:
quelle
std::vector<S> V
hat ein nutzloses Leerzeichen.if(A(i)<=R(k)&&A(j)<=R(k)&&k%2?A(i)==R(k)||A(j)==R(k)
der&&
und||
sein kann&
und|
für -3 Bytes; undint r=R(w.size()-1),...
kann werdenint l=w.size(),r=R(l-1),...
undfor(k=0;k<w.size();++k)
kann dannfor(k=0;k<l;++k)
für weitere -3 Bytes werden.using S=std::string;
zwei Bytes pro sicherntypedef
.Mathematica, 167 Bytes
Die Eingabe muss eine Liste von Zeichen sein.
z.B
quelle
JavaScript (ES6), 252 Byte
Wobei
\n
das wörtliche Zeilenumbruchzeichen darstellt.quelle
JavaScript (ES6), 204
229 238Eine anonyme Funktion, die ein Array von Zeichenfolgen zurückgibt
Weniger golfen
Prüfung
quelle
Java -
429417 BytesDer Kredit geht an @Anedar, da dies einen Einfluss auf die Struktur dieser Antwort hatte
Ungolfed:
quelle
JavaScript (ES6), 322 Byte
Nicht wettbewerbsfähig
Weniger Golphed
Testen Sie mit
Einfache Gewinne durch Weglassen der führenden
var L=
und.join("\n")
in der return-Anweisung für -17 Bytes, aber geben Sie sie erneut ein, um den Code zu testen : DEs handelt sich um eine Antwort mit zwei Durchgängen, bei der die Breite (
w
) bewertet wird, die zum Zeichnen eines Quadrat- oder Diamantplots erforderlich ist, bevorP
im zweiten Durchgang Punkte mithilfe von Rotation und Translation gezeichnet werden.d
ist die Abmessung (Höhe oder Breite) eines nicht gedrehten Quadrats vor der Verschiebung oder Drehung.Drehung und Skalierung um √2 Details aus der Mathematica-Antwort . Verwendung der getaggten String-Vorlage aus der ersten Antwort in diesem Thread . Vielen Dank an beide für das Lernen. Stimmen für die Frage und Antworten.
quelle
Powershell,
269245238 BytesUngolfed, erklärt & testgeschrieben:
quelle