Ich habe das bereits in Python gemacht, aber es scheint, dass es viel gekürzt werden könnte:
txt = input("Type something.. ")
c = "#"
b = " "
print(c * (len(txt) + 4))
print(c, b * len(txt), c)
print(c, txt, c)
print(c, b * len(txt), c)
print(c * (len(txt) + 4))
Also, wenn der Benutzer Folgendes eingibt:
Hello World
Das Programm druckt:
###############
# #
# Hello World #
# #
###############
Es gewinnen nur wenige Bytes - und natürlich kann die Antwort in jeder Sprache geschrieben werden.
Antworten:
CJam,
2220 BytesTeste es hier.
Erläuterung
Wie wird ein 2D-Zeichenraster in eine Ebene mit Leerzeichen (oder in ein beliebiges anderes Zeichen) gewickelt? Richtig: Sie fügen vier Mal ein Leerzeichen an jede Linie an und drehen das Raster dann um 90 Grad. Genau das mache ich hier mit acht Umdrehungen: vier für Leerzeichen, vier für
#
:quelle
Vim,
2827 TastenanschlägeAngenommen, die Eingabe wird als einzelne Textzeile in der aktuell geöffneten Datei bereitgestellt.
Erläuterung:
Dies kann auch als "Programm" wie folgt ausgeführt werden:
Welches ist ein bisschen gewunden, aber es funktioniert.
quelle
pb - 89 Bytes
Dies ist die Art von Herausforderung, für die pb gemacht wurde! Nicht, dass es für diese Art von Herausforderung oder irgendetwas konkurrenzfähig wäre . Es ist immer noch eine schreckliche Golfsprache. Herausforderungen wie diese sind jedoch in pb weitaus weniger schmerzhaft als andere. Da pb seine Ausgabe als 2D-Zeichenfläche behandelt und in der Lage ist, in beliebige Koordinaten zu schreiben, wird alles, was das Positionieren von Text / Zeichnen um Text (dh diese Herausforderung) betrifft, eher intuitiv gehandhabt.
Sehen Sie es sich an:
Diese Visualisierung wurde mit einer in der Entwicklung befindlichen Version von pbi, dem pb-Interpreter, erstellt. In der blau hinterlegten Zeile wird die
Y=-1
Eingabe beim Programmstart gespeichert. Das Rechteck mit dem roten Hintergrund ist die aktuelle Position des Pinsels. Die Rechtecke mit gelbem Hintergrund befinden sich überall dort, wo das ASCII-Zeichen 32 (ein Leerzeichen) explizit auf die Zeichenfläche geschrieben wird. Leerzeichen ohne diesen Hintergrund haben tatsächlich den Wert0
, der in ein Leerzeichen umgewandelt wird.Hier ist der Code mit den Kommentaren, die ich beim Schreiben verwendet habe, mit einigen thematisch relevanten Abschnittsüberschriften;)
quelle
Not that it's competitive... It's still a horrible golf language.
Ich sage das, aber im Moment bin ich nur für das letzte Mal gebunden . Ich hatte damit gerechnet, dass es das letzte Mal sein würde. : DBrainfuck - 156 Bytes
Das ist wahrscheinlich golfen. Es gibt einige Stellen, an denen ich nicht wusste, ob es besser ist, einen Wert irgendwo für die Wiederverwendung zu speichern oder ihn neu zu erstellen / von einer anderen Stelle auf dem Band abzurufen. Anstatt die Arbeit zu erledigen, um es herauszufinden, habe ich das nicht getan. : D
Mit Kommentaren:
quelle
K, 21 Bytes
Tragen Sie die Zeichenfolge ein, fügen Sie allen vier Seiten einer Zeichenfolge ein Leerzeichen hinzu, und fügen Sie dann jeder Seite der Zeichenfolge ein Oktothorpe hinzu. In Aktion:
Arbeitet in OK, Kona und K5.
Es gibt einige Variationen innerhalb eines Zeichen der Länge, die die Redundanz in der obigen Beschreibung beseitigen, aber keine scheint zu brechen, selbst wenn wir die "Umbruch" -Operation nur zweimal ausführen müssen:
quelle
Pyth, 31 Bytes
Dank der Kommentare von Leuten, die Hinweise zum weiteren Golfspielen geben, kenne ich die Sprache wirklich nicht so gut, wie Sie (wahrscheinlich) sagen können.
quelle
"#"
ist gleich\#
. Wenn Sie viele Objekte verketten müssen, verwenden Sie besser,j""[
gefolgt von einer Liste von Objekten, die gleich istjk[
.s[
ist gleichjk[
für Arrays von Strings. Außerdem können Sie die Zuweisung auch spontanK
vornehmenjk[K\#
und einfach die ursprüngliche Zuweisung fallen lassen. Zuweisenlz
zuJ
hilft nicht, wenn es nur zweimal verwendet wird. Sparen Sie alsoJ
für etwas anderes. Hier, wenn SieZ
fürJ
Sie tauschen , können Sie das entfernen=
. Schließlich können Sie im laufenden Betrieb zuweisenJ
. Der Code sieht dann so aus:_Js[K\#*d+2lzKb*K+4lz)jd[KzK)J
Python 3, 88 Bytes
Danke @WorldSEnder
Beispiel I / O:
quelle
s=" "
am anfang spart man insgesamt 1 byte denke ich.;
btw anstatt neuer Zeilen? Beides sollte ein Byte sein, oder?Perl,
4376 BytesTransformieren Sie jede Texteingabezeile wie angegeben:
Beispielsweise:
So können Sie sehen, was es wirklich tut:
So etwas ähnliches:
quelle
e
Modifikator entfernen$x="#"x(4+($z=y!!!c));$y="#".$"x(2+$z)."#\n";$_="$x\n$y# $_ #\n$y$x"
. Verwenden Sie stattdessen tatsächliche Zeilenumbrüche\n
und es sind nur 65 Bytes plus 2 für-lp
.JavaScript (ES6), 73
Die 2 Zeilenumbrüche, die häufig Template-Strings verwenden, sind signifikant und werden gezählt.
Testen Sie das folgende Snippet in einem EcmaScript 6-kompatiblen Browser (FireFox und das neueste Chrome, möglicherweise Safari).
Dies ist ziemlich kürzer als mein erster Versuch, abgeleitet von dieser anderen Herausforderung :
quelle
z
als Nebenwirkung zuzuweisen ?)Python 2, 74
Nimmt Eingaben in Anführungszeichen wie
"Hello World"
.# _ #
.b
sind# #
die richtige Anzahl von Leerzeichen und sind zu beiden Seiten mit Zeilenumbrüchen umgeben, um alle vier Zeilenumbrüche zu bearbeiten.#
mit der Länge der Eingabe multipliziertDie Zeilen werden verkettet und gedruckt.
quelle
MATLAB,
9391 BytesNicht das schönste, aber es erledigt die Arbeit.
Code-Erklärung
Schritt 1
Lesen Sie einen String aus STDIN ein und platzieren Sie ein einzelnes Leerzeichen in diesem. 32 ist der ASCII-Code für ein Leerzeichen, und beim Einlesen der Eingabe als Zeichenfolgentyp werden die 32er in Leerzeichen zusammengefasst.
Schritt 2
Deklarieren Sie ein Zeichenarray mit 5 Hash-Zeichen in einem Spaltenvektor.
Schritt 3
Erstellen Sie eine 2-zeilige Zeichenmatrix, die zuerst mit Rautezeichen und anschließend mit Leerzeichen gefüllt wird. Die Anzahl der Zeichen entspricht der Länge der Eingabezeichenfolge plus 2, so dass der Abstand vor und nach der Zeichenfolge berücksichtigt werden kann.
Schritt 4
Wir werden alles zusammenfügen. Wir platzieren die erste Spalte mit 5 Hashes, gefolgt vom Mittelteil und gefolgt von einer weiteren Spalte mit 5 Hashes. Der mittlere Teil besteht aus der in Schritt 3 erstellten 2-Zeilen-Zeichenmatrix, der Eingabezeichenfolge selbst mit einem nachgestellten und führenden Leerzeichen, gefolgt von der 2-Zeilen-Zeichenmatrix, jedoch in umgekehrter Reihenfolge.
Beispielläufe
quelle
Perl 5.14+,
5756 Bytes54 Bytes + 2 Bytes für
-lp
(wenn die Eingabe nicht in einer neuen Zeile endet,-l
kann ein Byte gespart werden).Akzeptiert Eingaben über STDIN:
Wie es funktioniert
Der Kern des Programms ist ein Listenausschnitt:
Dies bietet eine kompakte Möglichkeit zum Speichern der drei eindeutigen Zeilen der Ausgabe (die ersten beiden Zeilen des Begrenzungsrahmens sind dieselben wie die letzten beiden, nur gespiegelt). Für die Eingabezeichenfolge
foo
wären die Ergebnisse des Slice:Wenn Sie diese Werte mit verbinden
#\n#
, erhalten Sie unsere Box.Beachten Sie, dass Perl 5.14+ erforderlich ist, um den zerstörungsfreien
r
Modifikator für den Transliterationsoperator zu verwendeny///
.quelle
PHP,
9593 BytesNicht gerade genial oder ähnliches, aber es hat Spaß gemacht!
Nicht gerade hübsch oder so, aber es funktioniert hervorragend!
Vielen Dank an @Titus für das Speichern von 2 Bytes.
quelle
$argv
anstelle von$_GET
und verwenden-r
.C ++, 198 Bytes
Mein erster Versuch mit Codegolf, und obwohl ich C ++ gelernt habe, ist es wahrscheinlich nicht die beste Sprache zum Golfen, hatte ich das Gefühl, dass ich es für meinen ersten Versuch anständig (?) Gemacht habe.
Ungolfed
n, o und t repräsentieren die vollständig gehashten Linien, die Eingabe (mit Hashes an jedem Ende) und die Linien zwischen der Eingabe- und der gehashten Linie.
quelle
> <> ,
106104 BytesIch habe das Gefühl, dass> <> nicht die beste Sprache dafür ist, aber ich bin zu weit gekommen, um aufzugeben und dies nicht zu posten. Das
*
am Ende der Zeile 4 soll ein Leerzeichen sein. Liebst du nicht, wie unglaublich grotesk dieser Code aussieht? Probieren Sie es online aus .Hier ist eine Version ohne Richtungswechsler, die eine Vorstellung davon gibt, wie sich der Zeiger bewegt (beachte, dass ich die "Teleport" -Anweisungen weggelassen habe, dh
.
).Richtung fluss:
Erläuterung
Meine Visualisierung des Stapels basiert auf der Eingabe
input
. > <> ist eine zweidimensionale Sprache, achten Sie also darauf, wo sich der Zeiger zwischen den Zeilen bewegt, während er darunterliegenden Code ausführt (in diesem Code<>v^
werden hauptsächlich Richtungsänderungen verwendet). Ich beginne meine Erklärungen dort, wo der Zeiger beginnt. Beachten Sie, dass zwei Zeilen wiederholt werden, wenn sich der Zeiger nach der fünften Zeile rückwärts bewegt.Was ich an> <> immer cool finde, ist die Möglichkeit, seinen eigenen Quellcode zu ändern, und ich benutze ihn in diesem Programm. Die Zeilen 3 und 4 werden wiederverwendet, um die letzten beiden Zeilen durch eine Änderung eines Zeichens in jedem zu drucken.
Zeile 1: Eingangsschleife
Stapel:
[-1,t,u,p,n,i]
Zeile 2: Erzeugt die dritte Ausgabezeile
Stapel:
[9,9,9,9,#, ,t,u,p,n,i, ,#]
Zeile 3: Druckt die erste Ausgabezeile
Stapel:
[0,9,9,9,#, ,t,u,p,n,i, ,#]
Ausgabe:
Zeile 4: Gibt die zweite Ausgabezeile aus
Stapel:
[0,9,9,#, ,t,u,p,n,i, ,#]
Ausgabe (steht
*
für Leerzeichen):Zeile 5: Gibt die dritte Ausgabezeile aus
Stapel:
[9,9,0]
Ausgabe:
Zeile 6: Legt fest, dass die vierte und fünfte Ausgabezeile gedruckt wird
Stapel:
[0,9,9,0]
Zeile 4: Gibt die vierte Ausgabezeile aus
Stapel:
[0,9,0]
Ausgabe (steht
*
für Leerzeichen):Zeile 3: Letzte Ausgabezeile drucken
Stapel:
[0,0]
Ausgabe:
quelle
PHP,
9391 BytesÜbernimmt Eingaben vom Kommandozeilenargument; Leerzeichen oder einfache Anführungszeichen verwenden. Laufen Sie mit
-r
.quelle
Pyke (nicht konkurrenzfähig), 6 Bytes
Probieren Sie es hier aus!
Pyke wurde nach der Herausforderung geschrieben und ist daher nicht wettbewerbsfähig.
.X
Nimmt einen String und eine String-Konstante arg und umgibt einen String mit dieser Zeichengruppe. Das konstante Argument kann aus bis zu 8 Zeichen bestehen und hat unterschiedliche Auswirkungen auf die Umrandung der Zeichenfolge.quelle
05AB1E,
26 Byte, nicht konkurrierendProbieren Sie es online!
EDIT: Woah! Ich habe nicht bemerkt, dass dies eine alte Herausforderung ist! Es tut uns leid!
quelle
142 Bytes (Methodentext ist 104)
Ungolfed:
quelle
PowerShell,
8482 Bytesquelle
Lua, 90 Bytes
quelle
Ruby, 83 Bytes
Ich vermute, es könnte weiter golfen werden, aber da es noch keine Ruby-Antwort gibt, ist es hier:
quelle
Schläger 172 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
C #
116110 BytesUngolfed:
Erste Version:
Volles Programm mit Testfällen:
quelle
var
anstelle vonstring
.var
Schlüsselwort nur eine Deklaration zulässt.C (gcc) 165 Bytes
Ungolfed-Version
quelle
SmileBASIC, 73 Bytes
quelle