Herausforderung
Mit einer Ganzzahl n
(wobei 4<=n<=10**6
) als Eingabe erstellen Sie eine ASCII-Kunst "Gefängnistür" *, die n-1
Zeichenbreite und n
Zeichenhöhe anhand der Symbole aus dem folgenden Beispiel misst .
Beispiel
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Folgende Zeichen werden verwendet:
┌───────────────┬─────────┬───────┐
│ Position │ Symbol │ Char │
├───────────────┼─────────┼───────┤
│ Top Left │ ╔ │ 9556 │
├───────────────┼─────────┼───────┤
│ Top │ ╦ │ 9574 │
├───────────────┼─────────┼───────┤
│ Top Right │ ╗ │ 9559 │
├───────────────┼─────────┼───────┤
│ Right │ ╣ │ 9571 │
├───────────────┼─────────┼───────┤
│ Bottom Right │ ╝ │ 9565 │
├───────────────┼─────────┼───────┤
│ Bottom │ ╩ │ 9577 │
├───────────────┼─────────┼───────┤
│ Bottom Left │ ╚ │ 9562 │
├───────────────┼─────────┼───────┤
│ Left │ ╠ │ 9568 │
├───────────────┼─────────┼───────┤
│ Inner │ ╬ │ 9580 │
└───────────────┴─────────┴───────┘
Regeln
- Sie können Eingaben auf jede vernünftige und bequeme Weise vornehmen, sofern dies nach den Standard-E / A-Regeln zulässig ist .
- In Sprachen, in denen die für die Erstellung der "Tür" verwendeten Symbole Mehrbytezeichen sind, werden sie möglicherweise als ein Byte für Ihre Punktzahl gezählt.
- Alle anderen Zeichen (Einzel- oder Multibyte) sollten als normal gezählt werden.
- Die Ausgabe darf keine nachgestellten Leerzeichen enthalten, jedoch ist ein nachstehender Zeilenumbruch zulässig, wenn dies unbedingt erforderlich ist.
- Dies ist Codegolf, also gewinnt die niedrigste Bytezahl.
Testfälle
Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝
Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝
* Ja, ich weiß, je größer es wird, desto weniger sieht es aus wie eine Gefängnistür! : D
╬
auch Talspuren enthalten , die╬
nicht in seiner Codepage enthalten sind? Wenn nicht, dann ist"'Z“ζ
als ein Byte kosten (oder 2) erlaubt? (9580 drücken, in Unicode konvertieren)?"'Z“ζ
entspricht einem Byte wie in Javascript,"╬"
kostet 1 ByteAntworten:
Java 8,
156151148118 Bytes-30 Bytes durch Erstellen eines Ports mit der Antwort @raznagul C # (.NET Core) , nachdem ich 5 Bytes golfen habe.
Probieren Sie es online aus.
Alte 148-Byte-Antwort:
-5 Bytes dank @raznagul .
Erläuterung:
Probieren Sie es hier aus.
quelle
-->
) Operator.i-->3
,i-->2
undj-->3´ you can save 5 bytes by removing the
n- = 3` undn+1
.Holzkohle , 34 - 5 = 29 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Die 5-Byte-Reduzierung gilt für Zeichen, die in Kästchen gezeichnet werden.
ReflectOverlapOverlap(0)
sollte gleichbedeutend mit sein,ReflectMirror()
aber stattdessen tut Charcoal einfach aReflectTransform()
, ansonsten würde diese Lösung auch für funktionierenn=3
. Hier ist eine Problemumgehung, die zeigt, wasn=3
für 38 - 5 = 33 Bytes passieren würde :Besser noch, wenn es
ReflectOverlapOverlap(0)
funktioniert, aber ich habe mich nicht darum gekümmert zu unterstützenn=3
, dann könnte ich das für 31 - 4 = 27 Bytes machen:quelle
╠
zu╣
und so reflektiert . „Der Bytezähler von Charcoal funktioniert aus irgendeinem Grund nicht. “ Vielleicht funktioniert der Bytezähler von Charcoal nicht, weil diese Zeichen nicht Teil der Codepage sind? Sie können sie jedoch gemäß den Herausforderungsregeln jeweils als 1 Byte zählen. Das ist also in der Tat 27.Holzkohle ,
4442 BytesDurchgestrichen 44 ist immer noch regulär 44
Probieren Sie es online!
quelle
Haskell, 75 Bytes
Probieren Sie es online!
Function verwendet
w
eine Ganzzahli
und eine Liste, wobeia
es sich um das erste,b
das zweite undc
den Rest der Liste handelt, und erstellt eine neue Listea
, gefolgt voni-3
Kopien vonb
, gefolgt vonc
. Wenden Siew
zuerst auf jedes Element der Liste["╔╦╗\n","╠╬╣\n","╚╩╝"]
und dann erneut (miti
Erhöhung um1
) auf die resultierende Liste an. In eine einzelne Liste verketten.quelle
<$
stammt ursprünglich ausData.Functor
und wurde inPrelude
. Es ist fast das gleiche wie>>
.a <$ b
Ersetzt jedes Elementb
durcha
, wobeib >> a
erwartet wirda
, dass es eine Liste ist, und verkettet die Länge derb
Kopien vona
.[1,2] >> "aa"
->"aaaa"
,"aa" <$ [1,2]
->["aa","aa"]
. Anmerkung:'x' <$ [1,2]
entspricht[1,2] >> "x"
.Vim, 29 Bytes
Da es Steuerzeichen gibt, folgt ein xxd-Dump:
Probieren Sie es online! (Der V-Interpreter scheint Probleme mit exotischen Zeichen zu haben, so dass für die Verknüpfung einfachere verwendet werden.)
Erläuterung
quelle
GNU sed, 74 + 1 = 75 Bytes
+1 Byte für
-r
Flag. Nimmt die Eingabe als unäre Zahl an.Probieren Sie es online!
Erläuterung
Das ist ziemlich einfach. Angenommen, die Eingabe ist 6 (unär 111111). Die erste Zeile löscht vier
1
Sekunden und wandelt die verbleibende Eingabe in folgende um:Die dritte Zeile in einer Schleife ersetzt jede Zeile
1
durch das vorangestellte Zeichen. Dadurch werden unsere Spalten erstellt:Beachten Sie, dass dies auch das
;
Zeichen dupliziert hat . Schließlich ersetzt die fünfte Zeile in einer Schleife jedes;
Zeichen durch eine Kopie der folgenden Zeile:quelle
Gelee , 33 Bytes
... ist es 33? - Die Konvertierung von Ein-Byte-String-Literalen (Codepage-Indizes) in Unicode-Zeichen kostet 5 Euro.
Ein vollständiges Programm druckt das Ergebnis aus.
Probieren Sie es online!
Wie?
quelle
Y
am Ende,+⁽"7Ọ
addieren 9556 zu diesen und werden dann in Zeichen umgewandelt. Sind sie (die 5) frei? Ich glaube, das wäre das Gleiche, als könnte ich die Unicode-Zeichen direkt verwenden. (Ich könnte auch tatsächliche Zeichen anstelle von Codepage-Indizes verwenden und eine Zuordnung für mehr Bytes verwenden).Python 3 , 75 Bytes
Probieren Sie es online!
quelle
n-3
:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
n+1
ist gleichbedeutend mit-~n
.Dyalog APL, 71 Bytes
Probieren Sie es online!
quelle
(some expr)f Y
mitY f⍨ some expr
.Japt ,
60 52 49 4836 BytesProbieren Sie es online!
Eine andere Version (47 Bytes +
-R
Flag)Benötigt das
-R
Flag (zum Eingabefeld hinzugefügt). Probieren Sie es online!Wie funktioniert es?
Da ich ursprünglich davon ausgegangen war, dass die 'Türzeichen' mehr als ein Byte kosten, dachte ich, ich könnte einige Bytes einsparen, indem ich sie codiere. Dann subtrahierte ich 9500 von den Zeichencodes, was mich mit den Zeichen zurückließ
8J; DPG >MA
, die jeweils nur ein Byte kosteten. Dann könnte ich jedem Zeichencode 9500 hinzufügen, und alles wäre in Ordnung.quelle
05AB1E , 29 Bytes
Probieren Sie es online!
quelle
Schnell, 161 Bytes
Nicht golfen:
Sie können diese Antwort hier ausprobieren
quelle
QBIC , 78 Bytes
Glücklicherweise befinden sich alle in der Tür der Zelle verwendeten Symbole auf der QBasic-Codepage.
Erläuterung
Beispielausgabe
quelle
PHP , 131 Bytes, 113 Zeichen
Probieren Sie es online!
PHP , 133 Bytes, 115 Zeichen
Probieren Sie es online!
quelle
JavaScript (ES6), 86 Byte
Dies ist deutlich länger als die andere Antwort von JS , aber ich wollte es mit einer alternativen Methode versuchen.
Wie?
Wir weisen jeder Kante des Gitters ein Gewicht zu: 1 für rechts, 2 für links, 3 für unten und 6 für oben. Die Summe der Gewichte gibt den Index des zu verwendenden Zeichens an.
Demo
Code-Snippet anzeigen
quelle
JavaScript (ES6),
80 bis74 Bytequelle
Ruby,
5452 Bytes-2 Bytes dank ymbirtt.
Probieren Sie es online!
Ungolfed
Das ist super langweilig:
quelle
(n+1)
ein wenig verkürzen, indem Sie schreiben-~n
- die Rangfolge der Operatoren erspart Ihnen auch die Klammern.Java 8, 102 + 101 Bytes
Dies ist ein weiterer String-Repeater der gleichen Länge:
Probieren Sie es online!
quelle
BiFunction
:n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}
undString r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);}
Online ausprobieren. Die zweite Methode kann ebenfalls inString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
(63 Byte) geändert werden , sodass sie insgesamt 141 Byten->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"
undString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
es online versuchen.C # (.NET Core) ,
Ergebnis 123 (141 Bytes)Ergebnis 118 (136 Bytes)Probieren Sie es online!
-5 Bytes dank @KevinCruijssen
Erläuterung:
quelle
b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};
zufor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}
Online ausprobieren.Stax , 23 Bytes
Führen Sie es aus und debuggen Sie es
Hier ist die ungolfed Version. Amüsanterweise ist es für stax tatsächlich kleiner , die wörtlichen Zeichen nicht zu verwenden, da das Einschließen dieser Zeichen als wörtliches Zeichen das Packen der Quelle verhindern würde.
Führen Sie dieses aus
quelle
Mathematica, 106 Bytes
quelle
OK, 38 Zeichen
Probieren Sie es online aus.
k scheint mit unicode nicht gut umgehen zu wollen, also bin ich mit ok gefahren.
quelle
Batch, 126 Bytes
Funktioniert in CP437 oder CP850. In diesen Codepages sieht das so aus:
quelle
Netzhaut ,
5650 BytesProbieren Sie es online! Bilden Sie ein Quadrat mit ╬s und befestigen Sie dann die Kanten (insbesondere drei Spalten werden gelöscht, wenn die Seiten hinzugefügt werden).
quelle
PowerShell , 67 Byte
Nimmt Eingaben auf
$args[0]
, subtrahiert3
, speichert diese in$x
, verwendet diese bei der Konstruktion der Türoberseite, um die entsprechende Anzahl von Mittelteilen auszugeben. Dann geben wir die mittleren Reihen aus, von denen wir haben$x+1
. Schließlich ähnelt die untere Reihe der oberen Reihe. Alle diese werden in der Pipeline belassen und implizitWrite-Output
Elemente verbleiben Element fügt kostenlos eine neue Zeile zwischen die Elemente ein.Probieren Sie es online!
quelle
Perl 5 , 61
60 Zeichen Code (90 einschließlich der Multibyte-Türzeichen) + 1 für
-p
Probieren Sie es online!
quelle
C # (.NET Core), 130 Byte
Port von @RobertoGrahams Java 8 Antwort , nachdem ich ungefähr 70 Bytes golfen hatte.
Probieren Sie es online aus.
quelle
J ,
4137 BytesProbieren Sie es online!
Das Zeichnen der Standardbox dauert 13 Bytes , leider kostet der beste Weg , die Zeichen, die ich finden konnte, zu ersetzen , 28.
quelle