Schreiben Sie ein Programm, das Spiegelbilder von sich selbst erzeugt. Ein Beispiel wäre der fantastische Kamelcode , der seinen eigenen Code liest und zwei kleinere 2x2-Versionen erzeugt. Angesichts der Eingabe:
$_='ev
al("seek\040D
ATA,0, 0;");foreach(1..3)
{<DATA>;}my @camel1hump;my$camel;
my$Camel ;while( <DATA>){$_=sprintf("%-6
9s",$_);my@dromedary 1=split(//);if(defined($
_=<DATA>)){@camel1hum p=split(//);}while(@dromeda
ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif
t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;}
$CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){
$camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift(
@camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\
064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;
print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y
/LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/;
$_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval
("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s
;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124
\1 50\145\040\165\163\145\040\157\1 46\040\1 41\0
40\143\141 \155\145\1 54\040\1 51\155\ 141
\147\145\0 40\151\156 \040\141 \163\16 3\
157\143\ 151\141\16 4\151\1 57\156
\040\167 \151\164\1 50\040\ 120\1
45\162\ 154\040\15 1\163\ 040\14
1\040\1 64\162\1 41\144 \145\
155\14 1\162\ 153\04 0\157
\146\ 040\11 7\047\ 122\1
45\15 1\154\1 54\171 \040
\046\ 012\101\16 3\16
3\15 7\143\15 1\14
1\16 4\145\163 \054
\040 \111\156\14 3\056
\040\ 125\163\145\14 4\040\
167\1 51\164\1 50\0 40\160\
145\162 \155\151
\163\163 \151\1
57\156\056
es produziert:
JXXXXXXXXL. JXXLm. .mJXXL .JXXXXXXXXL
{XXXXXXXXXXX. JXXXmXXXXm mXXXXmXXXL .XXXXXXXXXXX}
.XXXXXXXXXXXXXL. {XXXXXXXXXF 7XXXXXXXXX} .JXXXXXXXXXXXXX.
JXXXXXXXXXXXXXXXXL.`XXXXXX. .XXXXXX'.JXXXXXXXXXXXXXXXXL
JXXXXXXXXXXXXXXXXXXXmXXXXXXX. .XXXXXXXmXXXXXXXXXXXXXXXXXXXL
.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX} {XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX'7XXXXXXXXXXXXXXXXXXXXXXXXXF 7XXXXXXXXXXXXXXXXXXXXXXXXXF`XX
XX {XXXFXXXXXXXXXXXXXXXXXXXF' `7XXXXXXXXXXXXXXXXXXX7XXX} XX
`X}{XXX'7XXXFXXXXX^XXXXX `' `' XXXXX^XXXXX7XXXF`XXX}{X'
`'XXX' {XXX'XXXXX 7XXXF 7XXXF XXXXX`XXX} `XXX`'
.XX} {XXF {XXXX}`XXX} {XXX'{XXXX} 7XX} {XX.
{XX `XXL `7XX} 7XX} {XXF {XXF' JXX' XX}
`XX `XXL mXXF {XX XX} 7XXm JXX' XX'
XX 7XXXF `XX XX' 7XXXF XX
XX. JXXXX. 7X. .XF .XXXXL .XX
{XXL 7XF7XXX. {XX XX} .XXXF7XF JXX}
`XXX' `XXXm mXXX' `XXX'
^^^^^ ^^^^^
.mJXXL .JXXXXXXXXL JXXXXXXXXL. JXXLm.
mXXXXmXXXL .XXXXXXXXXXX} {XXXXXXXXXXX. JXXXmXXXXm
7XXXXXXXXX} .JXXXXXXXXXXXXX. .XXXXXXXXXXXXXL. {XXXXXXXXXF
.XXXXXX'.JXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXL.`XXXXXX.
.XXXXXXXmXXXXXXXXXXXXXXXXXXXL JXXXXXXXXXXXXXXXXXXXmXXXXXXX.
{XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXF
7XXXXXXXXXXXXXXXXXXXXXXXXXF`XX XX'7XXXXXXXXXXXXXXXXXXXXXXXXXF
`7XXXXXXXXXXXXXXXXXXX7XXX} XX XX {XXXFXXXXXXXXXXXXXXXXXXXF'
`' XXXXX^XXXXX7XXXF`XXX}{X' `X}{XXX'7XXXFXXXXX^XXXXX `'
7XXXF XXXXX`XXX} `XXX`' `'XXX' {XXX'XXXXX 7XXXF
{XXX'{XXXX} 7XX} {XX. .XX} {XXF {XXXX}`XXX}
{XXF {XXF' JXX' XX} {XX `XXL `7XX} 7XX}
XX} 7XXm JXX' XX' `XX `XXL mXXF {XX
XX' 7XXXF XX XX 7XXXF `XX
.XF .XXXXL .XX XX. JXXXX. 7X.
XX} .XXXF7XF JXX} {XXL 7XF7XXX. {XX
mXXX' `XXX' `XXX' `XXXm
^^^^^ ^^^^^
The use of a camel image in association with Perl is a trademark of O'Reilly &
Associates, Inc. Used with permission.
(Der Copyright-Text ist optional.)
Ein einfacheres Beispiel würde die Eingabe nehmen:
#######
#
#
######
#
# #
#####
und produzieren:
##### #####
# # # #
# #
###### ######
# #
# #
####### #######
####### #######
# #
# #
###### ######
# #
# # # #
##### #####
Die Einträge sollten Kunst demonstrieren.
Dies ist ein Beliebtheitswettbewerb, daher gewinnt der Eintrag mit maximaler (Aufwärts-) Stimme!
popularity-contest
devnull
quelle
quelle
Antworten:
Bash und gewöhnliche Utensilien
Möglicherweise müssen Sie installieren
rev
Ich war nicht zufrieden damit, nur die Positionen der Charaktere zu reflektieren, es bringt die Eingabe von ASCII-Kunst wirklich durcheinander. Also habe ich versucht, auch Zeichen zu reflektieren, modulo den ASCII-Zeichensatz.
Ohne Argumente druckt sich das Skript wie gewünscht 2x2 aus:
Sie können auch den eingegebenen Dateinamen angeben:
Wenn der Eingabedateiname lautet
-
, liest das Skript die Eingabe von stdin:quelle
echo +1 | ./2x2.sh -
oom
und eine Kuh auf dem Kopf sagtwoo
bash
ein bisschen, um es herauszufinden :-) (Was ich in meinem vorherigen Kommentar gemeint habe war: Katze ist in bestimmten Situationen verdammt nützlich )cat
hat einen schlechten Ruf IMO, und ich werde es schamlos verwenden, wo ich es für angemessen halte ;-)Rubin
Dieser hat definitiv eine Weile gedauert. Aber es hat wirklich Spaß gemacht!
Ausgabe:
Es basiert auf der gleichen Idee wie meine vorherige Antwort .
quelle
Rubin
UPDATE : Schauen Sie sich meine neue Antwort an , basierend auf der gleichen Idee wie diese!
Ausgabe:
Es ist "PPCG!" in der ASCII-Kunst! : D.
Hier ist eine detaillierte Erklärung. Zuerst fand ich heraus, wie die eigentliche Spiegelung durchgeführt wird. Hier ist der Spiegelungscode:
Dann musste ich Leerzeichen und doppelte Anführungszeichen entfernen (weil das Entkommen nur unordentlich wird), also habe ich Ruby's verwendet
Fixnum#chr
.Die Grundstruktur des Programms lautet nun:
Jetzt kann ich es in ASCII-Kunst schaffen! Das habe ich also getan. Dann habe ich die ASCII-
|
Grafik am Ende mit Leerzeichen und s aufgefüllt und es bis hierher geschafft:Das sah jedoch etwas hässlich aus, da die ASCII-Grafik nicht ausreichend gepolstert war. Deshalb habe ich ein bisschen mehr Polsterung hinzugefügt und bin dort angekommen, wo ich jetzt bin! (
$, | x
entspricht äquivalent zux
da$,
istnil
standardmäßig.)quelle
eval
Bash (+
sed
+tee
+tac
) -> 102Probe verwendbar
Beispiel detailliert:
Dies könnte Folgendes ergeben:
oder auf feste Linienbreite formatiert:
geben:
und mit
figlet
:Und zum Spaß:
Er, er ... Das konnte nicht funktionieren, weil halbe Zeichen nicht einfach rückgängig gemacht werden konnten.
Dazu müssen wir den Befehl in umgekehrter Reihenfolge ausführen:
quelle
C ++
Ausgabe
Diese Ausgabe sieht aus wie "Windows 4X4".
quelle