Tantangan
Diberikan bilangan bulat n
(di mana 4<=n<=10**6
) sebagai input membuat "pintu penjara" seni ASCII * mengukur n-1
karakter lebar dan n
karakter tinggi, menggunakan simbol dari contoh di bawah ini.
Contoh
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Karakter yang digunakan adalah sebagai berikut:
┌───────────────┬─────────┬───────┐
│ 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 │
└───────────────┴─────────┴───────┘
Aturan
- Anda dapat mengambil input dengan cara yang masuk akal dan nyaman selama diizinkan oleh aturan I / O standar .
- Untuk keperluan tantangan ini, dalam bahasa di mana simbol yang digunakan untuk membangun "pintu" adalah karakter multi-byte, mereka dapat dihitung terhadap skor Anda masing-masing sebagai byte tunggal.
- Semua karakter lain (satu atau multi-byte) harus dihitung sebagai normal.
- Keluaran mungkin tidak mengandung spasi tambahan apa pun, tetapi garis tambahan tertinggal diizinkan jika benar-benar diperlukan.
- Ini adalah kode-golf sehingga jumlah byte terendah menang.
Uji Kasus
Input: 4
Output:
╔╦╗
╠╬╣
╠╬╣
╚╩╝
Input: 8
Output:
╔╦╦╦╦╦╗
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╠╬╬╬╬╬╣
╚╩╩╩╩╩╝
Input: 20
Output:
╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╠╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣
╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝
* Ya, saya sadar bahwa semakin besar semakin tidak terlihat seperti pintu penjara! : D
╬
bahkan melalui╬
tidak ada dalam codepage-nya? Jika tidak, maka"'Z“ζ
diizinkan sebagai biaya satu byte (atau 2)? (tekan 9580, konversi ke unicode)?"'Z“ζ
sama dengan satu byte akan seperti di javascript"╬"
seharga 1 byteJawaban:
Java 8,
156151148118 byte-30 byte dengan membuat port jawaban @raznagul C # (.NET Core) , setelah saya bermain golf 5 byte.
Cobalah online.
Jawaban lama 148 byte:
-5 byte terima kasih kepada @raznagul .
Penjelasan:
Coba di sini.
sumber
-->
operator to ( ).i-->3
,i-->2
danj-->3´ you can save 5 bytes by removing the
n- = 3` dann+1
.Arang , 34 - 5 = 29 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Pengurangan 5 byte untuk karakter menggambar kotak.
ReflectOverlapOverlap(0)
harus setara denganReflectMirror()
tetapi sebaliknya Arang hanya melakukanReflectTransform()
sebaliknya, jika tidak solusi ini juga akan berhasiln=3
. Berikut adalah solusi yang menunjukkan apa yang akan terjadin=3
untuk 38 - 5 = 33 byte:Lebih baik lagi, jika
ReflectOverlapOverlap(0)
berhasil, tapi saya tidak repot mendukungn=3
, maka saya bisa melakukan ini selama 31 - 4 = 27 byte:sumber
╠
to╣
dan semacamnya. " Penghitung byte Charcoal tidak berfungsi karena suatu alasan. " Mungkin byte-counter Charcoal tidak berfungsi karena karakter-karakter itu bukan bagian dari halaman kode-nya? Anda dapat menghitungnya masing-masing 1 byte sesuai dengan aturan tantangan, jadi ini memang 27.Arang ,
4442 byteDicoret 44 masih teratur 44
Cobalah online!
sumber
Haskell, 75 byte
Cobalah online!
Fungsi
w
mengambil bilangan bulati
dan daftar di manaa
elemen pertama,b
elemen kedua danc
sisanya dari daftar dan membuat daftar barua
, diikuti olehi-3
salinanb
, diikuti olehc
. Terapkanw
pertama pada setiap elemen daftar["╔╦╗\n","╠╬╣\n","╚╩╝"]
dan kemudian lagi (dengani
peningkatan oleh1
) pada daftar yang dihasilkan. Bergabung menjadi satu daftar.sumber
<$
berasal dariData.Functor
dan telah dimasukkan ke dalamPrelude
. Hampir sama dengan>>
.a <$ b
menggantikan setiap elemenb
dengana
, sedangkanb >> a
diharapkana
menjadi daftar dan menyatukan panjangb
salinana
.[1,2] >> "aa"
->"aaaa"
,"aa" <$ [1,2]
->["aa","aa"]
. Catatan:'x' <$ [1,2]
sama dengan[1,2] >> "x"
.Vim, 29 byte
Karena ada karakter kontrol, inilah dump xxd:
Cobalah online! (Penerjemah V tampaknya memiliki masalah dengan karakter eksotis, sehingga tautan menggunakan yang lebih biasa.)
Penjelasan
sumber
GNU sed, 74 + 1 = 75 byte
+1 byte untuk
-r
bendera. Mengambil input sebagai nomor unary.Cobalah online!
Penjelasan
Ini sangat sederhana. Misalkan inputnya adalah 6 (unary 111111). Baris pertama turun empat
1
s dan mengubah input yang tersisa menjadi ini:Baris ketiga, dalam satu lingkaran, menggantikan setiap
1
karakter dengan sebelumnya. Ini menciptakan kolom kami:Perhatikan bahwa ini juga telah menggandakan
;
karakter. Akhirnya, baris kelima, dalam satu lingkaran, menggantikan setiap;
karakter dengan salinan baris berikut:sumber
Jelly , 33 byte
... apakah 33? - biayanya 5 untuk mengkonversi dari liter string satu byte (indeks halaman kode) ke karakter Unicode.
Program lengkap mencetak hasilnya.
Cobalah online!
Bagaimana?
sumber
Y
di akhir+⁽"7Ọ
,, menambahkan 9556 untuk ini dan kemudian dilemparkan ke karakter. Apakah mereka (5) bebas? Saya merasa itu akan sama seperti jika saya dapat menggunakan karakter Unicode secara langsung. (Saya juga bisa menggunakan karakter aktual daripada indeks halaman kode dan menggunakan pemetaan untuk lebih banyak byte).Python 3 , 75 byte
Cobalah online!
sumber
n-3
:n=int(input())-3;print("╔"+"╦"*n+"╗\n"+("╠"+"╬"*n+"╣\n")*(n+1)+"╚"+"╩"*n+"╝")
n+1
setara dengan-~n
.Dyalog APL, 71 byte
Cobalah online!
sumber
(some expr)f Y
denganY f⍨ some expr
.Japt ,
60 52 49 4836 byteCobalah online!
Versi lain (47 byte +
-R
bendera)Membutuhkan
-R
flag (ditambahkan ke bidang input). Cobalah online!Bagaimana cara kerjanya?
Karena saya awalnya mengasumsikan 'karakter pintu' harganya lebih dari satu byte, saya pikir saya bisa menghemat beberapa byte dengan mengkodekannya. Kemudian, saya mengurangi 9500 dari kode karakter, yang membuat saya dengan karakter
8J; DPG >MA
, yang hanya biaya satu byte. Lalu, saya bisa menambahkan 9500 ke setiap kode karakter, dan semuanya akan baik-baik saja.sumber
05AB1E , 29 byte
Cobalah online!
sumber
Swift, 161 byte
Tidak golf:
Anda dapat mencoba jawaban ini di sini
sumber
QBIC , 78 byte
Untungnya, semua simbol yang digunakan di luar sel ada di QBasic codepage.
Penjelasan
Output Sampel
sumber
PHP , 131 byte, 113 karakter
Cobalah online!
PHP , 133 byte, 115 karakter
Cobalah online!
sumber
JavaScript (ES6), 86 byte
Ini jauh lebih lama daripada jawaban JS lainnya , tetapi saya ingin mencobanya dengan metode alternatif.
Bagaimana?
Kami menetapkan bobot untuk setiap tepi kisi: 1 untuk kanan, 2 untuk kiri, 3 untuk bawah dan 6 untuk atas. Jumlah bobot memberikan indeks karakter untuk digunakan.
Demo
Tampilkan cuplikan kode
sumber
JavaScript (ES6),
8074 bytesumber
Rubi,
5452 byte-2 byte terima kasih kepada ymbirtt.
Cobalah online!
Tidak disatukan
Ini sangat membosankan:
sumber
(n+1)
sedikit dengan menulis-~n
- prioritas operator akan menghemat kurung juga.Java 8, 102 + 101 byte
Ini adalah pengulang senar lain dengan panjang yang sama:
Cobalah online!
sumber
BiFunction
:n->{n-=3;return"╔"+r("╦",n)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝";}
andString r(String c,int n){return c.valueOf(new char[n]).replace("\0",c);}
Try it online. And the second method can also be changed toString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
(63 bytes), so it becomes 141 bytes in totaln->"╔"+r("╦",n-=3)+"╗\n"+r("╠"+r("╬",n)+"╣\n",-~n)+"╚"+r("╩",n)+"╝"
andString r(String c,int n){String r=c;for(;n-->1;r+=c);return r;}
Try it online.C# (.NET Core),
Score 123 (141 bytes)Score 118 (136 bytes)Try it online!
-5 bytes thanks to @KevinCruijssen
Explanation:
sumber
b+="╣\n";c+="╝";for(;n-->2;)a+=b;return a+c;};
tofor(b+="╣\n";n-->2;)a+=b;return a+c+"╝";}
Try it online.Stax, 23 bytes
Run and debug it
Here's the ungolfed version. Amusingly, it's actually smaller for stax not to use the literal characters because including them as a literal would prevent source packing.
Run this one
sumber
Mathematica, 106 bytes
sumber
oK, 38 chars
Try it online.
k does not seem to want to handle unicode well, so I went with oK.
sumber
Batch, 126 bytes
Works in CP437 or CP850. Looks like this in those code pages:
sumber
Retina,
5650 bytesTry it online! Works by building up a square of ╬s and then fixing up the edges (in particular three colums are deleted when the sides are added).
sumber
PowerShell, 67 bytes
Takes input
$args[0]
, subtracts3
, saves that into$x
, uses that in the construction of the top of the door to output the appropriate number of middle sections. Then we're outputting the middle rows, of which we have$x+1
of. Finally, the bottom row is similar to the top row. All of those are left on the pipeline, and the implicitWrite-Output
inserts a newline between elements for free.Try it online!
sumber
Perl 5, 61
60 characters of code (90 including the multibyte door characters) + 1 for
-p
Try it online!
sumber
C# (.NET Core), 130 bytes
Port of @RobertoGraham's Java 8 answer, after I golfed about 70 bytes.
Try it online.
sumber
J,
4137 bytesTry it online!
Default box drawing takes 13 bytes, unfortunately the best way of replacing the characters I could find costs 28.
sumber