अससी यूजर इंटरफेस


18

इस चुनौती में, हम Ascii उपयोगकर्ता इंटरफ़ेस प्रस्तुत करते हैं।

+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title ==       |
|                      |
|Lorem ipsum dolor     |
|sit amet...           |
|+--------------+      |
||Post a comment|      |
|+--------------+      |
|+-----------------+   |
||User X commented:|   |
||                 |   |
||This is amazing! |   |
|+-----------------+   |
|+-----------------+   |
||User Y commented:|   |
||                 |   |
||lol              |   |
|+-----------------+   |
+----------------------+

इस तरह की प्रत्येक ड्राइंग एक तत्व से बनी होती है , जिसमें सबलेमेंट्स हो सकते हैं। संभावित तत्वों को नीचे सूचीबद्ध किया गया है:

  1. पाठ तत्व। पाठ की एक या अधिक पंक्तियाँ समाहित करता है।
  2. बॉक्स तत्व। इसमें एक सबलेमेंट है जो सीमाओं से घिरा हुआ है। सीमाओं है +किनारों में और रों -रों और |किनारों पर।
  3. क्षैतिज सूची। इसमें एक या अधिक तत्व होते हैं जो क्षैतिज रूप से संरेखित होते हैं।
  4. लंबवत सूची। एक या एक से अधिक तत्व होते हैं जो एक दूसरे पर लंबवत और क्षैतिज रूप से बाईं ओर संरेखित होते हैं।

हर तत्व एक आयत है।

प्रत्येक तत्व, अपनी सामग्री के अलावा, एक संपत्ति है जिसे बेसलाइन कहा जाता है । आधार रेखा का उपयोग तत्वों को लंबवत रूप से संरेखित करने के लिए किया जाता है: क्षैतिज सूची के प्रत्येक तत्व को ऐसे संरेखित किया जाता है कि उनकी आधार रेखा एक ही रेखा पर हो। नीचे दिए गए उदाहरण में, आधार रेखा में वर्ण हैं aeg। तीन बॉक्स तत्वों की आधार रेखाएं (0-अनुक्रमित) हैं 1, 3और 2

   +-+   
   |c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+   +-+

आधारभूत नियम निम्नलिखित नियमों के साथ निर्धारित किए जाते हैं:

  1. पाठ तत्वों के लिए, पाठ की पहली पंक्ति आधार रेखा है, अर्थात। 0
  2. बॉक्स तत्वों के लिए, बेसलाइन 1 + सबलेमेंट की आधार रेखा है।
  3. क्षैतिज सूचियों के लिए, आधार रेखा सूची में अधिकतम आधार रेखा है ( 3ऊपर उदाहरण में)।
  4. ऊर्ध्वाधर सूचियों के लिए, आधार रेखा एक तत्व की आधार रेखा है, जिसे इनपुट में निर्दिष्ट किया जाना चाहिए।

इनपुट

इनपुट कुछ प्रारूप में एक इंटरफ़ेस का एक विनिर्देश है (उदाहरण के लिए, json)। उदाहरण इनपुट में निम्न प्रारूप है:

  1. एक स्ट्रिंग तत्व एक स्ट्रिंग है: "..."
  2. एक बॉक्स तत्व एक सूची है पहला तत्व है "b":["b", subelement]
  3. एक क्षैतिज सूची एक सूची है जो पहला तत्व है "h":["h", items...]
  4. एक ऊर्ध्वाधर सूची एक सूची है, जो पहला तत्व है "v"और दूसरा तत्व है (0-अनुक्रमित) तत्व का आधार नंबर यानी आधार रेखा का उपयोग किया जाता है:["v", n, items...]

उत्पादन

आउटपुट में मेरे द्वारा निर्दिष्ट नियमों का उपयोग करके संरेखित तत्व शामिल होने चाहिए। आउटपुट स्टडआउट हो सकता है, स्ट्रिंग्स की सूची या सार्थक कुछ भी हो सकता है।

स्कोरिंग

यह , सामान्य नियम लागू होते हैं।

परीक्षण के मामलों

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    

2
स्वीट जीसस ... यह सब फिर से भूतावेश है।
मैजिक ऑक्टोपस Urn

मुझे पूरा यकीन नहीं है कि आधार रेखा कैसे काम करती है, क्या आप इसे आगे बता सकते हैं?
स्टेन स्ट्रम

@StanStrum आधार रेखा का उपयोग क्षैतिज रूप से लंबवत सूची में आइटम संरेखित करने के लिए किया जाता है। वस्तुओं के आधार रेखा का मिलान होना चाहिए, अर्थात। वे सभी एक ही भौतिक पंक्ति होनी चाहिए। उदाहरण के लिए, swcond उदाहरण में पहले बॉक्स को नीचे की ओर ले जाया गया है ताकि पत्र aउसी पंक्ति में हो e, जैसा कि वे दोनों अपने बक्से की आधार रेखा पर हैं। मुझे पूरी तरह से यकीन नहीं है कि "बेसलाइन" इसके लिए सही शब्द है, मुझे केवल इतना पता है कि यह एक समान उद्देश्य के लिए टाइपोग्राफी के क्षेत्र में उपयोग किया जाता है।
फर्ग्यूस्क

@fergusq पहले क्लॉज पर: "टेक्स्ट एलिमेंट्स के लिए, टेक्स्ट की पहली लाइन बेसलाइन है, यानी? 0.", इसका मतलब यह है कि अन्य "बेसलाइन" टेक्स्ट को शिफ्ट कर रहे हैं?
स्टैन स्ट्रम

@fergusq बेसलाइन सही शब्द होना चाहिए, IIRC इसका उपयोग सीएसएस फ्लेक्सबॉक्स के विवरण में भी किया जाता है
ASCII-only

जवाबों:


10

पायथन 3 , 721 694 693 671 661 बाइट्स

संपादित करें: @Arnold Palmer और @Step Hen के कारण 27 बाइट्स सहेजे गए

संपादित करें: सहेजा गया 1 बाइट

संपादित करें: @Annold Palmer के लिए 22 बाइट्स सहेजे गए

संपादित करें: 10 बाइट्स सहेजे गए

यह शायद थोड़ा बहुत गोल्फ हो सकता है

L,M,R,e=len,max,range,lambda t:([list(r)+[" "]*(M(map(L,t.split("\n")))-L(r))for r in t.split("\n")],0)if str==type(t)else b(t)if"h">t[0]else h(t)if"v">t[0]else v(t);F=lambda t:"\n".join(map("".join,e(t)[0]))
def h(t):
	t=[e(r)for r in t[1:]];Z=M(s[1]for s in t);X=M(L(s[0])-s[1]for s in t)+Z;u=[[]for i in R(X)]
	for a,b in t:u=[u[j]+[Z-b<=j<L(a)+Z-b and a[j-Z+b][i]or" "for i in R(L(a[0]))]for j in R(X)]
	return u,Z
def b(t):t,b=e(t[1]);u=[["+",*"-"*L(t[0]),"+"]];return u+[["|"]+r+["|"]for r in t]+u,1+b
def v(t):w=[e(r)for r in t[2:]];return[a[i]+[" "]*(M(L(a[0])for a,d in w)-L(a[i]))for a,c in w for i in R(L(a))],sum(L(x[0])for x in w[:t[1]])+w[t[1]][1]

इसे ऑनलाइन आज़माएं


आप सभी परिभाषाओं और P,L,M,R,K=[" "],len,max,range,mapकार्यक्रम के शीर्ष (शीर्ष पर चर), और बाहर भी स्थानांतरित कर सकते हैं F। ऐसा करते हुए कि आप इसे कम से कम 711 बाइट्स तक प्राप्त कर सकते हैं। (TIO लिंक पोस्ट करने के लिए बहुत बड़ा है)।
अर्नोल्ड पामर

@StepHen अब और नहीं, मैंने समस्या को ठीक कर दिया है। :-)
आउटगॉल्फ

नीचे 671 पर । TIO लिंक का उपयोग बहुत लंबा होने के बाद से टाइगरेल का उपयोग करना पड़ा। mapजब से वे सामान्य सूची समझ वाले सामान के साथ बदले जा सकते हैं, मैंने आपके बहुत से कामों को फिर से शुरू किया। क्योंकि मैं इतने सारे ट्रिम करने में सक्षम था map, इसलिए मैंने Kवेरिएबल को भी हटा दिया क्योंकि इसकी कीमत 2 बाइट थी।
अर्नोल्ड पामर

बहुत बढ़िया। आप इनाम जीतें।
ओलिवर नी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.