MATL , 56 53 Bytes
:"'!!((!((!!#*```).?p0```!!!]'8eP!P]'p(.' '.a-'XE&hqc
Probieren Sie es online!
Erläuterung
Wach auf, Ziege
Die wache Ziege kann in die Schnur gepackt werden
'' '' ")___(->o/___ \
und ausgepackt, wie noch erläutert wird. Die Symbole mit einfachen Anführungszeichen müssten jedoch dupliziert werden, um sie zu umgehen. Daher müsste das Zeichenfolgenliteral definiert werden als (beachten Sie die einschließenden Symbole mit einfachen Anführungszeichen und die Duplizierung der ursprünglichen Symbole):
' '''' '''' ")___(->o/___ \'
Um Bytes zu sparen, definieren wir die Zeichenfolge mit Zeichen, die einen Codepunkt darüber liegen , um Doppelungen zu vermeiden. Das String-Literal wird
'!!((!((!!#*```).?p0```!!!]'
Am Ende des Codes werden wir 1 subtrahieren und in char konvertieren. (Wir könnten es jetzt tun, direkt nach dem String-Literal; aber wenn wir es für das Ende belassen, sparen wir eine weitere Duplikation mit einfachen Anführungszeichen, wie wir sehen werden.)
Um zu erklären, wie die Zeichenfolge entpackt wird, arbeiten wir mit den Originalzeichen (die am Ende des Codes durch Untertakten von 1 erzeugt werden), damit die Erklärung leichter zu befolgen ist. Wir formen zuerst die Saite um
'' '' ")___(->o/___ \
in ein 8-zeiliges 2D-Zeichen-Array in Spalten-Hauptreihenfolge (nach unten, dann quer). Dadurch wird die letzte Spalte automatisch mit char 0 aufgefüllt (am Ende des Codes wird 1 durch Subtrahieren in die Zahl −1 umgewandelt, was wiederum char 0 ergibt). Char 0 wird als Leerzeichen angezeigt. So effektiv füllen wir uns mit Leerzeichen. Das Ergebnis der Umformung ist
>
"o\
')/
'__
__
'__
'(
-
Wir kippen jetzt vertikal:
-
'(
'__
__
'__
')/
"o\
>
und dann transponieren und wieder vertikal drehen, um die wache Ziege zu produzieren:
\
___/o>
-(___)"
'' ''
Die beiden Flip-Operationen sind erforderlich, da die ursprüngliche gepackte Zeichenfolge "in umgekehrter Reihenfolge" vorliegt. Dies dient dazu, die Tatsache auszunutzen, dass das tatsächliche 2D-Zeichen-Array, das die Ziege darstellt, in seiner ersten Zeile 6 Anfangsräume aufweist, die automatisch durch Auffüllen gefüllt werden, wenn die Zeichenfolge in ein 8-zeiliges 2D-Array umgewandelt wird. Das Auffüllen erfolgt jedoch am Ende (nicht am Anfang) der letzten Spalte (nicht der Zeile), daher das Umdrehen und Transponieren.
Schlafende Ziege
Ein schlafender Ziege ist aus einer Wach Ziege durch Transliteration Zeichen erzeugt o
, '
, -
in -
, `
, ,
bzw.. Aufgrund der Ein-Code-Punkt-Über-Transformation transliterieren wir Zeichen in " ," , " ," p
, " (
," , " ," , " ," , " ," , " ," , " ," , " ," , " ," , " ," , " ," , "." Aus diesem Grund wurde die Subtraktionsoperation für das Ende des Programms belassen.'
.
a
-
Code-Struktur
- Generiere eine Wachziege
N
und arbeite mit um 1 erhöhten Codepunkten.
- Verwandle die letzte Ziege in eine schlafende Ziege.
- Verketten Sie alle Ziegen horizontal. Subtrahiere 1, um Punkte zu codieren und wirke zu char.
Kommentierter Code
: % (Step 1) Implicitly input N. Push range [1 2 ... N]
" % For each (i.e. repeat N times)
'!!((!((!!#*```).?p0```!!!]' % Push this string. Quotes are escaped by duplicating
8e % Reshape into an 8-row 2D array of char, in
% column-major order, padding last column with
% char 0
P % Flip vertically
!P % Transpose and flip vertically
] % End
'p(.' % (Step 2) Push this string: source for transliteration
'.a-' % Push this string: target for transliteration
XE % Transliterate. Transforms last goat into sleeping
&h % (Step 3) Horizontally concat all 2D char arrays
qc % Subtract 1 and convert to char. 0 becomes −1, which
% is converted to char 0, which is displayed as a space
% Implicitly display