Bu zorlukta Ascii kullanıcı arayüzlerini oluşturuyoruz.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Bu gibi her çizim , alt öğeler içerebilen bir öğeden yapılır . Olası öğeler aşağıda listelenmiştir:
- Metin öğesi. Bir veya daha fazla metin satırı içerir.
- Kutu öğesi. Kenarlıklarla çevrili bir alt öğe içerir. Kenarlıklar
+
köşelerde ve-
s'de ve|
kenarlarındadır. - Yatay liste. Yatay olarak hizalanmış bir veya daha fazla öğe içerir.
- Dikey liste. Birbiri üzerine dikey olarak ve sola yatay olarak hizalanmış bir veya daha fazla eleman içerir.
Her eleman bir dikdörtgendir.
Her öğenin, içeriğine ek olarak, taban çizgisi adı verilen bir özelliği vardır . Taban çizgisi, öğeleri dikey olarak hizalamak için kullanılır: yatay bir listenin her öğesi, taban çizgileri aynı satırda olacak şekilde hizalanır. Aşağıdaki örnekte taban çizgisi karakterler içerir aeg
. Üç kutu elemanlarının taban (0-endeksli) vardır 1
, 3
ve 2
.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Taban çizgileri aşağıdaki kurallarla belirlenir:
- Metin öğeleri için metnin ilk satırı taban çizgisidir, yani.
0
. - Kutu elemanları için taban çizgisi 1 + alt öğenin taban çizgisidir.
- Yatay listeler için taban çizgisi, listedeki maksimum taban çizgisidir (
3
yukarıdaki örnekte). - Dikey listeler için taban çizgisi, girişte belirtilmesi gereken bir öğenin taban çizgisidir.
Giriş
Girdi, bazı formattaki bir arayüzün bir özelliğidir (örn. Listeler, json). Örnek girişler aşağıdaki biçime sahiptir:
- Bir dize öğesi bir dizedir:
"..."
- Bir kutu öğesi, ilk öğenin
"b"
:["b", subelement]
- Yatay liste ilk öğenin listesidir
"h"
:["h", items...]
- Dikey liste, ilk öğenin bulunduğu listedir
"v"
ve ikinci öğe, taban çizgisinin kullanıldığı öğenin (0 dizinli) sayısıdır:["v", n, items...]
Çıktı
Çıktı, yukarıda belirttiğim kurallar kullanılarak hizalanmış öğeler içermelidir. Çıktı stdout, bir dize listesi veya anlamlı başka bir şey olabilir.
puanlama
Bu kod golf , her zamanki kurallar geçerlidir.
Test senaryoları
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
çizgisinde olduğu gibi e
, aynı satırda olacak şekilde aşağı doğru hareket ettirilir . "Taban çizgisi" bunun için doğru kelime olup olmadığından emin değilim, sadece tipografi alanında benzer bir amaç için kullanıldığını biliyorum.