আসকি ব্যবহারকারী ইন্টারফেস


18

এই চ্যালেঞ্জের মধ্যে আমরা আসকি ব্যবহারকারী ইন্টারফেস রেন্ডার করি।

+----------------------+
|+-----------++-------+|
||<- 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. উল্লম্ব তালিকার জন্য, বেসলাইনটি কোনও উপাদানটির বেসলাইন, যা ইনপুটটিতে নির্দিষ্ট করা আবশ্যক।

ইনপুট

ইনপুটটি কোনও বিন্যাসে একটি ইন্টারফেসের একটি স্পেসিফিকেশন (উদাঃ তালিকা, জসন)। উদাহরণ ইনপুট নিম্নলিখিত ফর্ম্যাট আছে:

  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
মিষ্টি যীশু ... এটি আবারও জিওসিটিস।
ম্যাজিক অক্টোপাস উরন

বেসলাইন কীভাবে কাজ করে তা আমি পুরোপুরি নিশ্চিত নই, আপনি কি আরও ব্যাখ্যা করতে পারবেন?
স্টান স্ট্রাম

@ স্ট্যানস্ট্রুম বেসলাইনটি অনুভূমিক তালিকায় উল্লম্বভাবে সারিবদ্ধ করার জন্য ব্যবহৃত হয়। আইটেমগুলির বেসলাইনগুলি মিলিত হওয়া উচিত, অর্থাৎ। এগুলির সমস্ত একই শারীরিক সারি হওয়া উচিত। উদাহরণস্বরূপ, সোয়াকন্ড উদাহরণে প্রথম বাক্সটি নীচের দিকে সরানো হয়েছে যাতে চিঠিটি aএকই লাইনে থাকে eযেমন তারা উভয়ই তাদের বাক্সের বেসলাইনতে থাকে। আমি "বেজলাইন" এর জন্য সঠিক শব্দটি কিনা তা সম্পূর্ণরূপে নিশ্চিত নই, আমি কেবল জানি যে এটি টাইপোগ্রাফির ক্ষেত্রে একই উদ্দেশ্যে ব্যবহৃত হয়।
ফার্গুসক

@fergusq প্রথম ধারাটিতে: "পাঠ্যের উপাদানগুলির জন্য, পাঠ্যের প্রথম লাইনটি বেসলাইন হয়, অর্থাৎ ০.", এর অর্থ কি অন্যান্য "বেসলাইনগুলি" পাঠ্যটি সরিয়ে ফেলছে?
স্ট্যান স্ট্রাম

@fergusq বেসলাইনটি সঠিক শব্দটি হওয়া উচিত, আইআইআরসি এটি সিএসএস ফ্লেক্সবক্সের বিবরণেও ব্যবহৃত হয়েছে
ASCII- কেবল

উত্তর:


10

পাইথন 3 , 721 694 693 671 661 বাইট

সম্পাদনা: @ আর্নল্ড পামার এবং @ স্টেপ হেনের কারণে 27 বাইট সংরক্ষণ করা হয়েছে

সম্পাদনা: 1 বাইট সংরক্ষিত

সম্পাদনা: @ আর্নল্ড পামারকে 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 বাইটে নামতে পারেন। (টিআইও লিঙ্কটি পোস্টের চেয়ে বড়।
আর্নল্ড পামার

@ স্টেপহেন আর নয়, আমি সমস্যাটি সমাধান করেছি। :-)
এরিক দি আউটগল্ফার

671 এ নেমে গেছে । টিআইও লিঙ্কটি অনেক দীর্ঘ হওয়ায় টিনিয়্যুরল ব্যবহার করতে হয়েছিল। আমি আপনার প্রচুর পরিমাণে কাজ করেছি mapযেহেতু তারা সাধারণ তালিকা বোঝার স্টাফ দিয়ে প্রতিস্থাপন করতে পারে। যেহেতু আমি অনেকগুলি ছাঁটাই করতে পেরেছিলাম, তাই mapআমি Kভেরিয়েবলটিও সরিয়ে ফেললাম কারণ এটির দাম 2 বাইট।
আর্নল্ড পামার

সাবাশ. আপনি অনুগ্রহ জিতেছেন।
অলিভার নি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.