একটি এসকিউএল আউটপুট সারণি আঁকুন


12

আমি নিশ্চিত যে আমাদের বেশিরভাগই এসকিউএল ফলাফল টার্মিনালে দেখেছি, সমস্ত সারি এবং কলামে ঝরঝরে ফর্ম্যাট করা হয়েছে। যদি আপনার না থাকে তবে এখানে একটি উদাহরণ দেওয়া আছে:

+----------+-----------+----------------+
| column 1 | column 2  | column 3       |
+----------+-----------+----------------+
| data     | more data | even more data |
| etc      | just goes | on and on      |
+----------+-----------+----------------+

এই চ্যালেঞ্জটির জন্য আপনার লক্ষ্যটি হ'ল, কোনও টেবিলের জন্য কলাম এবং সারি ডেটা দেওয়া হয়েছে, এই স্টাইলে টেবিলটি আঁকুন। টেবিলের উপরের এবং নীচে একটি অনুভূমিক রেখা থাকা উচিত এবং শিরোলেখের সারির নীচে ডানদিকে থাকা উচিত। প্রতিটি কলামের মধ্যে উল্লম্ব রেখা থাকা উচিত এবং টেবিলের উভয় পাশে থাকা উচিত। আপনার উল্লম্ব রেখার জন্য পাইপ, অনুভূমিক রেখার জন্য হাইফেন এবং যেখানে ছেদ করা হয় সেখানে প্লাসগুলি ব্যবহার করা উচিত।

সুনির্দিষ্ট:

  • ডেটা স্টিডিনের মাধ্যমে বা কোনও ফাংশনের যুক্তি হিসাবে প্রবেশ করা যেতে পারে, তবে এটি অবশ্যই স্ট্রিংয়ের কোনও আকারে থাকতে হবে
  • স্ট্রিং ডিলিমিটার দিয়ে ডেটা বিভক্ত করা উচিত ;
  • ডেটাতে কেবল ASCII অক্ষর থাকবে, উদ্ধৃত হয় না এবং এতে ডিলিমিটারও থাকবে না।
  • তথ্যের প্রথম সারিটি কলাম শিরোলেখগুলির জন্য ব্যবহৃত হবে
  • ডেটাতে সর্বদা একই সংখ্যক কলাম থাকবে
  • ইনপুটটিতে সর্বদা কমপক্ষে দুটি সারি থাকবে (একটি শিরোনাম, একটি ডেটা)। আপনাকে খালি সেটগুলি পরিচালনা করতে হবে না।
  • একটি অনুসরণকারী বা পূর্ববর্তী নিউলাইন অনুমোদিত
  • প্রতিটি কলামটি বিস্তৃত উপাদানগুলির মতো প্রশস্ত হওয়া উচিত, ডানদিকে ছোট উপাদানকে প্যাডিং করা (বোনাস -5% আপনি বাম দিকে সংখ্যাগুলি প্যাড করেন)
  • শিরোনাম এবং ডেটা আগে এবং পরে প্যাডিংয়ের 1 স্পেস থাকতে হবে, কলামটি আরও প্রশস্ত হবে
  • mysqlটেবিলটি তৈরি করতে আপনাকে আসল প্রোগ্রামটি ব্যবহার করার অনুমতি নেই
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য

নমুনা ইনপুট:

column 1;column 2;column 3
hello;world;test
longer data;foo;bar

আউটপুট

+-------------+----------+----------+
| column 1    | column 2 | column 3 |
+-------------+----------+----------+
| hello       | world    | test     |
| longer data | foo      | bar      |
+-------------+----------+----------+

স্কোরিং:

অবশ্যই সর্বনিম্ন সংখ্যা বাইট জিতেছে। বাম দিকে প্যাডিং নম্বরগুলির জন্য -5% বোনাস (বিশদগুলি দেখুন)।


তারা কি প্রোগ্রামের চলমান সময়ের কোনও সীমাবদ্ধতা রয়েছে?
ডাউনওয়েট

নাঃ; যতক্ষণ আপনি চান হিসাবে গ্রহণ করুন, যতক্ষণ না এটি আসলে শেষ হয়।
গ্লেন স্মিথ

1
যদি কেবলমাত্র এক সারি ইনপুট থাকে তবে আউটপুটটি কী হওয়া উচিত?
জাগারব

আপনি ধরে নিতে পারেন যে সর্বদা কমপক্ষে দুটি সারি ইনপুট থাকবে। মাইএসকিউএল খালি সেটের জন্য একটি টেবিল প্রদর্শনও করে না; আপনারও দরকার নেই।
গ্লেন স্মিথ

উত্তর:



2

জাভাস্ক্রিপ্ট (ES6), 262 বাইট

f=x=>{w=[],o=z=>y(`| ${z[m]((c,i)=>(c+' '.repeat(w[i]-c.length))).join` | `} |`),(d=x.split`
`[m='map'](r=>r.split`;`))[m](r=>r[m]((c,i)=>w[i]=Math.max(c.length,w[i]||0)));(y=console.log)(s=`+${w[m](c=>'-'.repeat(c+2)).join`+`}+`);o(d.shift());y(s);d[m](o);y(s)}

ডেমো

যেহেতু এটি ES6, তাই এই সময়টি ফায়ারফক্স এবং এজে কাজ করে in কিছু কারণে এটি পরীক্ষামূলক জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি সক্ষম করেও ক্রোম / অপেরাতে কাজ করে না।

// Snippet stuff
console.log = x => document.getElementsByTagName('output')[0].innerHTML += x + '\n';
document.getElementsByTagName('button')[0].addEventListener('click', () => {
  f(document.getElementById('I').value);
});


// Actual code
f = x => {
  w = [], o = z => y(`| ${z[m]((c,i)=>(c+' '.repeat(w[i]-c.length))).join` | `} |`), (d = x.split `
` [m = 'map'](r => r.split `;`))[m](r => r[m]((c, i) => w[i] = Math.max(c.length, w[i] || 0)));
  (y = console.log)(s = `+${w[m](c=>'-'.repeat(c+2)).join`+`}+`);
  o(d.shift());
  y(s);
  d[m](o);
  y(s)
}
<p>
  <textarea id=I cols=80 rows=15>column 1;column 2;column 3
hello;world;test
longer data;foo;bar</textarea>
</p>
<button type=button>Go</button>
<pre><output></output></pre>

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