Dalam tantangan ini, kami membuat antarmuka pengguna Ascii.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Setiap gambar seperti ini terbuat dari satu elemen , yang dapat berisi sub bagian. Elemen yang mungkin tercantum di bawah ini:
- Elemen teks. Berisi satu atau lebih baris teks.
- Elemen kotak. Berisi satu subelemen yang dikelilingi dengan perbatasan. Perbatasan memiliki
+
s di sudut dan-
s dan|
di tepi. - Daftar horisontal. Berisi satu atau lebih elemen yang disejajarkan secara horizontal.
- Daftar vertikal. Berisi satu atau lebih elemen yang disejajarkan satu sama lain secara vertikal dan ke kiri secara horizontal.
Setiap elemen adalah persegi panjang.
Setiap elemen, selain kontennya, memiliki properti yang disebut garis dasar . Baseline digunakan untuk menyelaraskan elemen secara vertikal: setiap elemen dari daftar horizontal disejajarkan sedemikian rupa sehingga garis dasarnya berada pada garis yang sama. Dalam contoh di bawah ini, garis dasar berisi karakter aeg
. Garis dasar dari tiga elemen kotak adalah (0-diindeks) 1
, 3
dan 2
.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Baseline ditentukan dengan aturan berikut:
- Untuk elemen teks, baris teks pertama adalah garis dasar, yaitu.
0
. - Untuk elemen kotak, garis dasar adalah 1 + garis dasar subelemen.
- Untuk daftar horizontal, garis dasar adalah garis dasar maksimum dalam daftar (
3
dalam contoh di atas). - Untuk daftar vertikal, garis dasar adalah garis dasar elemen, yang harus ditentukan dalam input.
Memasukkan
Input adalah spesifikasi antarmuka dalam beberapa format (mis. Daftar, json). Input contoh memiliki format berikut:
- Elemen string adalah string:
"..."
- Elemen kotak adalah daftar, elemen pertama adalah
"b"
:["b", subelement]
- Daftar horizontal adalah daftar yang elemen pertamanya adalah
"h"
:["h", items...]
- Daftar vertikal adalah daftar yang merupakan elemen pertama
"v"
dan elemen kedua adalah (0-diindeks) jumlah elemen yang digunakan baseline:["v", n, items...]
Keluaran
Output harus mengandung elemen yang diluruskan menggunakan aturan yang saya sebutkan di atas. Outputnya bisa stdout, daftar string atau apa pun yang bermakna.
Mencetak gol
Ini kode-golf , aturan yang biasa berlaku.
Uji kasus
1
["b", ["v", 0, ["h", ["b", "<- Previous"], ["b", "Next ->"]], "== The title ==\n\nLorem ipsum dolor\nsit amet...", ["b", "Post a comment"], ["b", "User X commented:\n\nThis is amazing!"], ["b", "User Y commented:\n\nlol"]]]
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
2
["h", ["b", ["v", 0, "a", "b"]], ["b", ["v", 2, "c", "d", "e"]], ["b", ["v", 1, "f", "g", "h"]]]
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
3
["h", ["b", ["v", 0, ["b", ["h", "a\nb", "c"]], "d", "e", ["h", ["h", "f"], ["b", ["h", "g"]], "h"]]], ["b", "ijk\nl\nmn\no"], ["v", 2, ["b", "pqrst"], ["b", "uv\nw"], ["b", "x"]], ["b", ["b", ["b", "yz"]]]]
+-----+
|pqrst|
+-----+
+--+
|uv|
|w | +------+
+-----+ +--+ |+----+|
|+--+ |+---++-+ ||+--+||
||ac| ||ijk||x| |||yz|||
||b | ||l |+-+ ||+--+||
|+--+ ||mn | |+----+|
|d ||o | +------+
|e |+---+
| +-+ |
|f|g|h|
| +-+ |
+-----+
4
["h", "a * b = ", ["v", 0, "a + a + ... + a", "\\_____________/", " b times"]]
a * b = a + a + ... + a
\_____________/
b times
a
berada di baris yang samae
, karena keduanya berada di garis dasar kotak mereka. Saya tidak sepenuhnya yakin apakah "garis dasar" adalah kata yang tepat untuk ini, saya hanya tahu itu digunakan dalam bidang tipografi untuk tujuan yang sama.Jawaban:
Python 3 ,
721694693671661 byteSunting: Disimpan 27 byte karena @Arnold Palmer dan @Langkah Hen
Sunting: Disimpan 1 byte
Sunting: Disimpan 22 byte berkat @Arnold Palmer
Sunting: Disimpan 10 byte
Ini mungkin bisa golf sedikit
Cobalah online
sumber
P,L,M,R,K=[" "],len,max,range,map
ke atas program (variabel di atas), dan di luarF
. Dengan melakukan itu, Anda bisa mendapatkannya hingga setidaknya 711 byte. (TIO tautan terlalu besar untuk dikirim).map
karena mereka dapat diganti dengan hal-hal pemahaman daftar normal. Karena saya dapat memangkas begitu banyakmap
, saya juga menghapusK
variabel karena harganya 2 byte.