Ich habe eine ASCII-Art-Box und benötige ein Programm, um sie zu öffnen.
Beispiele
Eingang:
-------
| |
|_____|
Ausgabe:
/
/
/
/
/
/
/
| |
|_____|
Spezifikation
- Die erste Zeile besteht nur aus
-
mindestens 3 Zeilen - Die mittleren Zeilen beginnen mit
|
Leerzeichen und enden mit|
- Alle mittleren Reihen sind gleich
- Die letzte Zeile beginnt mit
|
haben_
mit einem und beenden|
- Alle Zeilen sind gleich lang
Öffnen der Box:
- Jedes
-
sollte durch ein/
in aufsteigender Linie und Position ersetzt werden.
Antworten:
CJam, 14 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript ES6, 57 Byte
Gibt eine führende Newline aus. Arbeiten Sie, indem Sie die Reihe von
-
s nehmen und sie in ein Dreieck umwandeln und dann das-
s durch Leerzeichen ersetzen .Bearbeiten: 5 Bytes dank @ edc65 gespeichert.
quelle
f=s=>s[R='replace'](/-+/,s=>s[R](/-/g,"\n$'/"))[R](/-/g,' ')
\n
und konvertiere danach).pb (NICHT KOMPETIEREND), 125 Bytes
Die Version von pbi, die Sie zum Ausführen dieser Antwort benötigen, ist neuer als die Frage. Es hätte in älteren Versionen funktioniert, außer dass ich nie dazu gekommen bin, neue Zeilen in der Eingabe zuzulassen. Naja.
Zunächst wird die Höhe der Box durch Zählen der Zeilenumbrüche in der Eingabe bestimmt. Sobald es das weiß, geht es zur Y-Position auf der rechten Seite des Kastens, geht dort hinunter, wo es sein muss, zeichnet die Wände und den Boden und schließt mit dem Deckel.
Schauen Sie sich diese lustige Animation an!
Die lange Pause ist der Pinsel, der über die Eingabe geht.
Ungolfed:
quelle
Pyth,
16 bis14 BytesErläuterung
Danke @FryAmTheEggman für den neuen Algorithmus!
Probieren Sie es hier aus.
quelle
Retina,
3420 BytesIm ersten Schritt wird jeder
-
durch die-
folgenden/
Zeilen ersetzt: a und newline. Die neue Zeile am Ende der ursprünglichen ersten Zeile wird gelöscht. Im zweiten Schritt ändern wir die neuen-
in Leerzeichen, was zur gewünschten Ausgabe führt.Probieren Sie es hier online aus.
quelle
$%'
erfassen,-
wodurch Sie 5 Bytes sparen: Probieren Sie es online aus!MATL , 14
15BytesDie Eingabe sollte einen nachgestellten Zeilenumbruch haben.
Probieren Sie es online!
Erläuterung
quelle
Japt,
28,26,25,221817 BytesOnline testen!
Gibt einen führenden Zeilenumbruch aus, der laut OP akzeptabel ist.
Wie es funktioniert
Dies wäre 4 Bytes kürzer, wenn sich das Scharnier am rechten Rand der Box befinden darf:
quelle
JavaScript (ES6), 66
PRÜFUNG
quelle
Java 8,
158118 BytesDies ist nur ein Anfang, aber hey, FGITWFTW.
Erwartet die Eingabe als Zeichenfolge und gibt die Box zurück.
quelle
Python 3, 1̶7̶0̶ 88 Bytes
Hier ist mein kurzer (er) Code: EDIT: Jetzt 82 Bytes kürzer mit @Dennis 's Code Edit!
Python 3, 421 Bytes
Alternativ können Sie zum Spaß auch eines verwenden, das es langsam öffnet:
Um eines von beiden zu verwenden, müssen Sie eine Textdatei in demselben Verzeichnis erstellen, die ein ASCII-Feld beliebiger Breite oder Tiefe mit dem Namen "f.txt" enthält. Es wird dann diese Box öffnen.
quelle
Schlag,
85 ,8479 Zeichen(Pure Bash-Version, keine externen Befehle verwendet.)
Gibt eine führende Newline aus.
Probelauf:
quelle
echo
ist ein externer Befehl -/usr/bin/echo
;)echo
ausführbare Datei existiert für die Übereinstimmung des Betriebssystems mit den Standards. Wenn Portabilität heutzutage , dass man nur verwendet wird , ist wichtig, da , dass man auf die ist bis Standard , aber die meisten modernen Schalen haben ihre eigenen eingebautenecho
, die standardmäßig verwendet wird: pastebin.com/RnxhweBv @Levi, wenn Sie umbenennen / bewegen Sie/usr/bin/echo
, meine Code wird immer noch funktionieren.Perl,
615433 + 3 = 36 ZeichenFühren Sie es als
Jeder
-
in erster Linie durch eine Kette ersetzt, ist ein Ergebnis der Verkettung von einer Anzahl von,
/
und\n
.${chr 39}
wertet zu Perls (in) berühmter$'
aka$POSTMATCH
spezieller Variable aus. Zuletzt entfernt chomp das abschließende Newline-Zeichen, das für das letzte-
Zeichen hinzugefügt wurde .Vielen Dank an @manatwork für das Speichern von mehr als 7 Zeichen.
Bonus -
s^-^" "x$i++."\\\n"^ge&&chop
öffnet die Box vom rechten Rand in 29 + 3 Zeichen :). Führen Sie es aus als:quelle
-
, also kann ich ja noch mehr Golf spielen. Vielen Dank!$.==1
→$.<2
,&&chop
→&chop
, entferne das zusätzliche Klammerpaar umlength
, zähle{chr 39}
als 1, da es aufgrund der Shell-Syntax nicht nur von der Kommandozeilenversion benötigt wird:$.<2&&s^-^" "x(length$')."/\n"^ge&chop
+ 2 Zeichen für Kommandozeilenoptionen = 40 nach meiner Zählung. pastebin.com/iDhUs9XX$.==1
oder$.<2
kann beseitigt werden, weil nur die erste Zeile enthält-
\n
.s^-^$'=~y/-/ /r."/\n"^ge&chomp
Pyth,
2623 BytesYuck. Kann definitiv kürzer sein; arbeite immer noch daran.
quelle
Python3, 76 Bytes
/
denen eine abnehmende Anzahl von Leerzeichen vorangestellt ist.stdin
gerade nachstdout
.BEARBEITEN: Ich habe gerade bemerkt, dass mein Code fast identisch mit @Dennis 'Kommentarbearbeitung von @ Monsters kürzerem Python3-Code ist. Der einzige Unterschied besteht darin, den Rest
stdin
direkt zu drucken, anstatt ihn in einer Variablen zu speichern. Großartige Köpfe!quelle
Canvas ,
64 BytesProbieren Sie es hier aus!
Erläuterung:
quelle
Python 2, 100 Bytes
Definiert eine Funktion
o
, die eine Zeichenfolge als Eingabe verwendet. (Vollständiges Programm wurde in der Frage nicht angegeben).quelle
PowerShell, 55 Byte
Übernimmt Eingaben
$args
als Zeichenfolge,-split
s in Zeilenumbrüchen`n
( Referenzlink ) , speichert die erste Zeile in$d
(als Zeichenfolge) und die verbleibenden in$b
(als Array von Zeichenfolgen). Wir durchlaufen dann die Schleife von derlength
ersten Zeile (minus 1) bis0
und geben bei jeder Iteration die Anzahl der Leerzeichen plus a aus/
. Schließlich wird eine Ausgabe$b
(der Rest der Eingabezeichenfolge) ausgegeben, die standardmäßig eine Ausgabe pro Zeile enthält.Beispiellauf
quelle
JavaScript (Node.js) , 56 Byte
Probieren Sie es online!
Sollte als Kommentar von geschrieben werden @Neil s‘ Antwort , aber ich kann nicht Kommentare erstellen noch
quelle
05AB1E (Legacy) , 9 Byte
Probieren Sie es online! (nur Legacy)
Wie es funktioniert
quelle
Holzkohle , 14 Bytes
Probieren Sie es online (ausführlich) oder online (rein) .
Erläuterung:
Teilen Sie die Eingabe durch Zeilenumbrüche, nehmen Sie die Länge der ersten Zeile und drucken Sie eine Zeile dieser Länge von oben rechts nach unten links:
Einmal nach rechts bewegen:
Teilen Sie die Eingabe erneut durch Zeilenumbrüche, entfernen Sie das erste Element und drucken Sie implizit das, was noch übrig ist:
(HINWEIS: Das Einfügen der durch Zeilenumbrüche aufgeteilten Eingabe in eine Variable (da ich es oben zweimal mache) ist
1 Byte längerund 14 Byte mit einer etwas anderen Methode (dank @Neil ):≔⮌⪪θ¶θ↙L⊟θM→⮌θ
Probieren Sie es online (ausführlich) oder versuchen Sie es online (rein) ).quelle
JavaScript ES6, 106 Bytes
Ganz einfach: Ermitteln der Länge der ersten Zeile, Erstellen eines nachgestellten Abstandsdreiecks
/
und Hinzufügen dieser Länge zum Original, geschnitten und verbunden.Probieren Sie es aus! (Nur ES6
:(
)Code-Snippet anzeigen
quelle
.repeat(n-i-1)
=>.repeat(n+~i)
Python 2.7,
120122 ZeichenBenötigt eine Datei
f
mit der Original / geschlossenen Box, die Ausgabe ist die geöffnete. Ein Hoch auf @Monster für die Idee ... wird später versuchen, mehrzeilige Eingaben herauszufinden und festzustellen, ob sie kürzer sind.Bearbeiten
/
habe gerade bemerkt, dass ganz links ein Leerzeichen vorne ist. +2 Bytesquelle
Ruby, 59 Zeichen
(57 Zeichen Code + 2 Zeichen Befehlszeilenoptionen.)
Probelauf:
quelle
Bash, 129 Zeichen
Benötigt eine Datei, die
a
mit der geschlossenen Box aufgerufen wird und auf stdout ausgegeben wird.Es könnte möglich sein, es durch Verwendung
sed
und Verwendung von Standard und Rohrleitungen zu verkürzen.quelle
for i in $(seq `awk 'NR<2&&$0=length-1' a` -1 1);{ for j in `seq 1 $i`;{ printf \ ;};echo /;};echo /;tail -n2 a
PHP, 127 Zeichen
Ungolfed-Version:
quelle
$argv
. Es gibt ein paar kleine Tricks, die Sie anwenden können:$l=strlen(strtok($s=$argv[1],"↵"));while($l)$s=preg_replace("/-/","↵".str_repeat(" ",--$l-$i)."/",$s,1);echo$s;
(Verwenden Sie eine wörtliche Newline in Ihrem Code, in der "↵" steht: pastebin.com/36t2fb0P )Python, 125 Bytes (110 ohne Box)
Wenn jemand eine Idee hat, wie man es verkürzt, lass es mich wissen!
quelle
Awk,
4746 Zeichen(44 Zeichen Code + 2 Zeichen Befehlszeilenoption.)
Probelauf:
quelle
Gema,
514931 ZeichenProbelauf:
quelle
K (ngn / k) , 18 Bytes
Probieren Sie es online!
quelle
05AB1E (Legacy) , 12 Byte
Probieren Sie es online!
quelle