Schreiben Sie ein Programm, das die Abmessungen eines Gemäldes, die Mattierungsbreite und die Rahmenbreite für ein gerahmtes Porträt eingibt. Das Programm sollte ein Diagramm mit dem Symbol X
für das Gemälde, +
für die Mattierung und #
für die Rahmung ausgeben . Die Symbole müssen durch Leerzeichen getrennt sein. Das nachgestellte Leerzeichen ist in Ordnung, solange die Ausgabe den Kriterien visuell entspricht. Die Eingänge können sein 0
.
EINGANG: 3 2 1 2 (Breite, Höhe, Mattbreite, Rahmenbreite)
AUSGABE:
In Textform:
# # # # # # # # #
# # # # # # # # #
# # + + + + + # #
# # + X X X + # #
# # + X X X + # #
# # + + + + + # #
# # # # # # # # #
# # # # # # # # #
Der Gewinncode vervollständigt die Bedingungen in den kleinstmöglichen Bytes.
Antworten:
Python 2 , 98 Bytes
Probieren Sie es online!
Druckt ein durch Leerzeichen getrenntes Raster unter strikter Einhaltung der Spezifikation. Ich bin amüsiert, dass
*=
zum Konvertierena
undb
von Zahlen in Zeichenfolgen verwendet wird.Python 3 kann einige Bytes einsparen, indem es vermeidet
' '.join
, möglicherweise mehr, indem es f-Strings und Zuweisungsausdrücke verwendet. Danke an Jo King für -2 Bytes.Python 3 , 93 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
118 113107 ByteProbieren Sie es online!
Kommentiert
quelle
MATL , 24 Bytes
Die Eingabe ist: Höhe, Breite, Mattbreite, Rahmenbreite.
Probieren Sie es online!
Erläuterung
quelle
Wolfram Language (Mathematica) , 142 Bytes
Probieren Sie es online!
quelle
Kohle ,
484744 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Hinweis: Leerzeichen am Ende. Bearbeiten: Verwendet jetzt den @ xnor-Algorithmus. Erläuterung:
Geben Sie die Breite und Höhe ein und konvertieren Sie sie in Zeichenfolgen von
X
s.Durchlaufen Sie die Zeichen
+
und#
konvertieren Sie sie in Zeichenfolgen mit der Länge, die von den verbleibenden zwei Eingaben vorgegeben wird. Dann schleife über diese beiden Saiten.Präfix und Suffix des Gemäldes mit den Zeichenfolgen für die Mattierung und Rahmung.
Führen Sie eine Schleife über die Zeichenfolgen aus, nehmen Sie das Minimum der horizontalen und vertikalen Zeichen und doppelten Abstand zwischen den Zeilen. Drucken Sie dabei implizit jede Zeile in einer eigenen Zeile.
quelle
05AB1E (legacy) / 05AB1E
--no-lazy
,3231 BytesÜbernimmt die Eingabe in der Reihenfolge
height, width, matte, frame
. Wenn die in der Abfrage angegebene Eingabereihenfolge streng ist (noch auf die Verifizierung des OP wartet),s
kann für +1 Byte ein führender Wert (Swap) hinzugefügt werden.Benötigte das
--no-lazy
Elixir-Compiler-Flag in der neuen Version von 05AB1E, da Elixir aufgrund der verzögerten Auswertung für verschachtelte Maps / Loops ein merkwürdiges Verhalten aufweist ( hier das Ergebnis ohne dieses Flag ).Probieren Sie es online in der Vorgängerversion von 05AB1E aus.
Probieren Sie es online in der neuen Version von 05AB1E mit hinzugefügtem
--no-lazy
Flag aus.Erläuterung:
quelle
Gelee , 17 Bytes
Probieren Sie es online!
Argument 1:
[Frame width, Matte width]
Argument 2:
[Width, Height]
quelle
Canvas , 24 Byte
Probieren Sie es hier aus!
Sollte 5 Bytes kürzer sein, liegt aber nicht daran, dass Canvas fehlerhaft ist.
quelle
R , 119 Bytes
Probieren Sie es online!
quelle
Python 3.8 (Vorabversion) ,
116115113 ByteProbieren Sie es online!
Erster Golfversuch, wird demnächst verbessert.
a
ist die Breite,b
die Höhe,c
die matte Breite undd
die Rahmenbreite.-1 Bytes mit dem
:=
Operatorh
alse * d
-2 Bytes dank Jo King, der mir vorschlug, die Parameter e und f zu entfernen
ERLÄUTERUNG:
quelle
e
Zuweisung entfernen, sparen Sie zwei Bytes, dief
Zuweisung spart Ihnen nichtse
undf
Zuordnungen zu entfernen, nachdem ich dieg
Verknüpfung entdeckt habeJavascript, 158 Bytes
Kann wahrscheinlich ein wenig gekürzt werden
quelle
Perl 6 , 98 Bytes
Probieren Sie es online!
Dies ist eine Portierung der Python-Antwort von xnor .
Perl 6 , 115 Bytes
Probieren Sie es online!
Anonymer Codeblock mit grobem Golfspiel unter Verwendung der mehrdimensionalen Listenzuweisung von Perl 6. Beispielsweise
@a[1;2] = 'X';
wird'X'
dem Element mit Index 2 aus der Liste mit Index 1 zugewiesen und@a[1,2,3;3,4,5]='X'xx 9;
werden alle Elemente mit Indizes3,4,5
der Listen durch Indizes ersetzt1,2,3
mit ersetzt'X'
.Erläuterung:
Zunächst initialisieren wir die Liste als
a+2*(c+d)
byb+2*(c+d)
Rechteck#
s.Dann ordnen wir das innere Rechteck von
+
s zuSchließlich ist das innerste Rechteck von
X
s.quelle
Jelly ,
35312824 BytesProbieren Sie es online!
Übernimmt die Eingabe in der Reihenfolge Frame, Matte, Breite, Höhe; Komma getrennt. Gibt das ASCII-Kunstbild mit Rahmen und Matt aus. Wenn die Eingabereihenfolge streng ist, müsste ich mehr Bytes hinzufügen (gemäß meinem ursprünglichen Beitrag).
Ein paar Golfplätze basierend auf der Antwort von @ EriktheOutgolfer; Ich hatte festgestellt, dass die Zeichen in ASCII-Reihenfolge waren, aber nicht überlegt, wie ich das am besten nutzen könnte, und hatte es vergessen
G
. Seine Antwort ist immer noch besser!quelle
43134
Benötigt 3 Kodierungszeichen, einschließlich eines führenden / nachfolgenden Zeichens, um anzuzeigen, dass es kodiert ist, werden auch 5 Bytes benötigt. Und hat Jelly vielleicht eine Art Duplikat, da die zweite Zahl 100 größer ist als die erste? Sind Sie nicht sicher, ob die Aktionen " 43134", "Duplizieren", "100" und "Plus" drücken oder "Pair" in "Jelly" möglich und kürzer sind?Perl 5, 115 Bytes
TIO
quelle
PowerShell , 132 Byte
Probieren Sie es online!
quelle