SQL आउटपुट तालिका बनाएँ


12

मुझे यकीन है कि हम में से अधिकांश ने एक परिणाम में SQL परिणाम देखे हैं, सभी बड़े करीने से पंक्तियों और स्तंभों में स्वरूपित हैं। यदि आपने नहीं किया है, तो यहाँ एक उदाहरण है:

+----------+-----------+----------------+
| 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
यदि इनपुट की केवल एक पंक्ति है तो आउटपुट क्या होना चाहिए?
जगरब

आप मान सकते हैं कि इनपुट की हमेशा कम से कम दो पंक्तियाँ होंगी। MySQL एक खाली सेट के लिए एक तालिका भी प्रदर्शित नहीं करता है; आप या तो नहीं है।
ग्लेन स्मिथ

जवाबों:



2

जावास्क्रिप्ट (ईएस 6), 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 है, इसलिए यह डेमो इस समय फ़ायरफ़ॉक्स और एज में काम करता है। किसी कारण से यह क्रोम / ओपेरा में भी काम नहीं करता है यहां तक ​​कि प्रयोगात्मक जावास्क्रिप्ट सुविधाओं के साथ भी सक्षम है।

// 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>

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