Einführung
Ich denke, alle sind sich einig, dass schöne Bilder einen schönen Rahmen haben müssen. Aber die meisten Herausforderungen auf dieser Seite über ASCII-Kunst wollen nur das Rohbild und kümmern sich nicht um dessen Erhaltung.
Wäre es nicht schön, wenn wir ein Programm hätten, das etwas ASCII-Art enthält und es mit einem schönen Rahmen umgibt?
Die Herausforderung
Schreiben Sie ein Programm, das ASCII-Art als Eingabe und Ausgabe verwendet und von einem schönen Rahmen umgeben ist.
Beispiel:
***** *** * *** *****
wird
╔═══════╗ ║ ***** ║ ║ *** ║ ║ * ║ ║ *** ║ ║ ***** ║ ╚═══════╝
- Sie müssen genau die gleichen Zeichen für den Rahmen verwenden wie im Beispiel:
═ ║ ╔ ╗ ╚ ╝
- Der obere und der untere Rand des Frames werden vor der ersten und nach der letzten Zeile der Eingabe eingefügt.
- Der linke und der rechte Teil des Frames müssen genau einen Abstand zur breitesten Zeile der Eingabe haben.
- Die Ausgabe enthält möglicherweise keine führenden oder nachfolgenden Leerzeichen. Es ist nur eine abschließende Zeile zulässig.
- Sie können davon ausgehen, dass die Eingabe keine unnötigen führenden Leerzeichen enthält.
- Sie können davon ausgehen, dass die Eingabe in keiner Zeile nachgestellte Leerzeichen enthält.
- Sie müssen keine leeren Eingaben verarbeiten.
- Die Eingabe enthält nur druckbare ASCII-Zeichen und Zeilenumbrüche.
Regeln
- Funktion oder Vollprogramm erlaubt.
- Standardregeln für die Eingabe / Ausgabe.
- Es gelten Standardlücken .
- Dies ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Vorlage.
Viel Spaß beim Codieren!
Es wird dringend empfohlen, einige großartige ASCII-Grafiken zu verwenden, die in jeder Herausforderung auf dieser Website erstellt wurden, da die Eingabe in Ihr Programm und die Darstellung mit einem schönen Rahmen sehr empfehlenswert sind!
#
viermaliges Anhängen gelöst werden . Die Anpassung eines solchen Ansatzes ist hier bestenfalls schwierig und im schlimmsten Fall nicht lebensfähig.)Antworten:
CJam, 45 Zeichen / 52 Bytes
Der Versuch, diese teuren 3-Byte-Zeichen zu vermeiden, war ... interessant.
Probieren Sie es online aus
Erläuterung
quelle
Haskell, 139 Bytes
Als Beispiel rahm ich den Schneemann "12333321" .
Wie es funktioniert:
quelle
JavaScript (ES6), 138 Byte
Dies sind 138 Byte in der IBM866-Codierung, die zum Zeitpunkt des Schreibens in Firefox noch unterstützt wird, in UTF-8 jedoch 152 Byte.
quelle
Bash,
173171150148147 Bytes,157136134133 ZeichenMehrzeilig:
Beispielausführung:
Beispiellauf vom Skript:
quelle
...?${#2}+2:n))
stattdessen+1
2 Leerzeichen undprintf -v z %${n}s;
stattdessen fallen lassenprintf -v z " %*.s" $n
.AWK, 159 Bytes
awk
Kann anscheinend Unicode drucken, wenn Sie herausfinden können, wie man es in den Code bekommt.quelle
Perl, 111 Zeichen
(Punktzahl beinhaltet +5 für die Interpreter-Flags)
Zuerst ermitteln wir die längste Zeilenlänge
$n
, indem wir die Längen aller Zeilen numerisch sortieren.Wir setzen
$l
die Kopf- / Fußzeile als$n
Wiederholung des horizontalen Rahmenzeichens.Dann drucken wir jede Zeile, die so formatiert ist, dass sie linksbündig in einem Feld mit einer Breite
$n
zwischen den Rahmenzeichen liegt.Ergebnis:
quelle
Pyth, 44 Zeichen (58 Bytes)
Erläuterung
Probieren Sie es hier aus.
quelle
PHP 5.3, 209 Bytes
Dies funktioniert nur mit der Codierung OEM 860 . Es ist eine erweiterte ASCII-Obermenge, die in portugiesischen DOS-Versionen verwendet wird. Da ich Portugiese bin (und es liebte, diese "Frames" in Pascal zu machen) und dies eine Standardkodierung ist, habe ich Folgendes ausgeführt:
Hier ist die base64:
Diese Antwort basierte auf meiner Antwort auf: https://codegolf.stackexchange.com/a/57883/14732 (das schwere Heben wurde alles dort gemacht, musste nur ein bisschen zucken).
quelle
22+58+11+5+11+24+66+12=209
Die letzten 12 sind Zeilenumbrüche und wie bei DOS bedeutet dies CRLF oder zwei Bytes pro Zeile. Auf der Website von charactercountonline werden keine Zeilenumbrüche gezählt.\n
in\r\n
, beim Öffnen der Datei in ASCII / Textmodus.Python 3, 119 Bytes
126 BytesEingang:Ausgabe:
quelle
print"╔"+h+"╗\n"+"".join(o)+"╚"+h+"╝"
.def f(x):
n='\n';s="║ ";e=" ║";h=(x.find(n)+2)*"═";return"╔"+h+"╗"+n+s+x.replace(n,e+n+s)+e+n+"╚"+h+"╝"
<s>...</s>
). Sie können auch<!-- language-all: lang-python -->
vor Ihrem Codeblock hinzufügen, um Ihrem Code eine Syntaxhervorhebung hinzuzufügen.Python 2, 115 Bytes
Sieht hier kürzer aus als 115, aber die Arbeitsdatei enthält eine 3-Byte-UTF-8-Stücklistensignatur, die auf 115 Byte erhöht wird. Wenn Sie es in Python 3 ausführen würden, würden Sie die Stückliste nicht benötigen und es würde auf 112 Bytes herunterkommen.
quelle
sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' codeGolf.py
C 290 Bytes
Golf-Funktion
B
mit Abhängigkeiten; Nimmt Eingaben als nullterminiertes Zeichen *Etwas ungolfed Funktion im vollen Programm
Eingang
Ausgabe
C Golftipps erwünscht!
quelle