ASCII টেবিল হিসাবে 2d অ্যারে প্রদর্শন করুন


15

কাজটি হল একটি প্রদত্ত অ্যারের জন্য ascii টেবিল প্রদর্শন করা।

ইনপুট

ইনপুটটি 2 ডি ম্যাট্রিক্স। ম্যাট্রিক্সের সারির দৈর্ঘ্য একটি অ্যারের দৈর্ঘ্যের সাথে সমান। বিকল্পভাবে, আপনি প্রথম সারিতে 2D ম্যাট্রিক্সের ইনপুট নিতে পারেন শিরোনাম। বাইরের মাত্রাটি সারি।

উদাহরণ ইনপুট:

[["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],["GPLv2","58.69%","52.2%","42.5%","33%","23%"],["GPLv3","1.64%","4.15%","6.5%","12%","9%"],["LGPL 2.1","11.39%","9.84%","?","6%","5%"],["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]]

আউটপুট

একটি টেবিলের আউটপুট নীচের মত দেখাচ্ছে।

+---------------------+-------------------+------------+------------+------------+------------+
| License             | 2008-05-08        | 2009-03-11 | 2011-11-22 | 2013-08-12 | 2015-11-19 |
+---------------------+-------------------+------------+------------+------------+------------+
| GPLv2               | 58.69%            | 52.2%      | 42.5%      | 33%        | 23%        |
| GPLv3               | 1.64%             | 4.15%      | 6.5%       | 12%        | 9%         |
| LGPL 2.1            | 11.39%            | 9.84%      | ?          | 6%         | 5%         |
| LGPL 3.0            | ? (<0.64%)        | 0.37%      | ?          | 3%         | 2%         |
| GPL family together | 71.72% (+ <0.64%) | 66.56%     | ?          | 54%        | 39%        |
+---------------------+-------------------+------------+------------+------------+------------+

প্রতিটি কক্ষের বামে ঠিক এক স্থান এবং ডানদিকে কমপক্ষে একটি স্থান রয়েছে, বারগুলি সারিবদ্ধ না করা পর্যন্ত প্যাড করে। তবে কমপক্ষে একটি ঘরে তার ডানদিকে কেবল একটি স্থান রয়েছে।

পরীক্ষার মামলা

Input:
[["Hello", "World", "!!!"],["aa", "bbbbbbbbb", "CcC"], ["Pyth",  "CJam", "GolfScript"]]

Output:
+-------+-----------+------------+
| Hello | World     | !!!        |
+-------+-----------+------------+
| aa    | bbbbbbbbb | CcC        |
| Pyth  | CJam      | GolfScript |
+-------+-----------+------------+

উদাহরণ জমা দেওয়া

function ascii_table(array, header) {
    var lengths = array[0].map(function(_, i) {
        var col = array.map(function(row) {
            if (row[i] != undefined) {
                return row[i].length;
            } else {
                return 0;
            }
        });
        return Math.max.apply(Math, col);
    });
    array = array.map(function(row) {
        return '| ' + row.map(function(item, i) {
            var size = item.length;
            if (size < lengths[i]) {
                item += new Array(lengths[i]-size+1).join(' ');
            }
            return item;
        }).join(' | ') + ' |';
    });
    var sep = '+' + lengths.map(function(length) {
        return new Array(length+3).join('-');
    }).join('+') + '+';
    if (header) {
        return sep + '\n' + array[0] + '\n' + sep + '\n' +
            array.slice(1).join('\n') + '\n' + sep;
    } else {
        return sep + '\n' + array.join('\n') + '\n' + sep;
    }
}

এটি , তাই সর্বনিম্ন পরিমাণ বাইটের সাথে জমা দেওয়া!


দেখে মনে হচ্ছে প্রথম উত্তরদাতা। দয়া করে সমাধানের উদাহরণ ব্যবহার করবেন না।
আকাংকা

পুনঃটুইট করেছেন
jcubic

মুছবেন না, আমি চ্যালেঞ্জটি বের করার চেষ্টা করব।
আকংকা

চ্যাটে থাকতে আপনার যথেষ্ট সুনাম রয়েছে। আপনার কি মনে হয় চ্যাটে আমাদের এটিকে উন্নত করার বিষয়ে কথা বলা উচিত? (দেখে মনে হচ্ছে এটি বর্ধিত আলোচনায় পরিণত হবে))
wizzwizz4

2
যদি আমরা অ্যারের পরিবর্তে একক স্ট্রিং হিসাবে ইনপুট নিতে চাই, তবে এটি উদাহরণ ইনপুটগুলির মতো ঠিক একই বিন্যাসে থাকতে হবে? যদি তা হয় তবে কি কোনও পালানো অক্ষর থাকবে (বা ইনপুটটিতে কখনও উদ্ধৃতি থাকবে)? আমরা কি ধরে নিতে পারি যে অ্যারে ডেলিফিটরগুলি ব্যতীত ইনপুটটিতে কোনও বন্ধনী বা কমা নেই? উল্লম্ব বার সম্পর্কে কি? সাধারণভাবে, টেবিলে স্ট্রিংগুলি তৈরি করতে পারে এমন বৈধ অক্ষরগুলি কী কী?
ডোরকনবব

উত্তর:


3

সিজেম, 58 বাইট

সিজেমে গল্ফ করার কৌশল কেউ জানেন?

q~z_{:,:e>)}%_{)'-*'++}%'+\+N+@@.{f{Se]"| "\+}}z'|N+f+1$f+

9

ভিম, 139 138 134

$x0xqq%ls<cr><esc>@qq@q:se nosol|%s/,/\t/g|%s/]/\t./|%!column -t -s'<C-v><Tab>'<cr>qwf";;h<C-v>GI|<esc>@wq@wll<C-v>Gls|<esc>0<C-v>Gs| <esc>:%s/"//g<cr>Yp:s/[^|]/-/g|s/|/+/g<cr>YggpkP

পরীক্ষার ক্ষেত্রে প্রদর্শিত ফর্মটিতে ইনপুট গ্রহণ করে। বা, বৈধ হতে পারে না যেমন এই ইনপুট কখনো কোনো ধারণকারী স্ট্রিং উপর নির্ভর করে ", ,, ], অথবা |অক্ষর।

যদি ইনপুটটিতে ]গুলি রাখতে সক্ষম হয় তবে 2 টি অতিরিক্ত অক্ষরের জন্য :%s/]/\t./<cr>প্রতিস্থাপন করা যেতে পারে qe$s<Tab>.<esc>j@eq@e। ইনপুটটিতে অনুমতি দেওয়ার কোনও সহজ উপায় নেই ",|

এটি ইউনিক্স পরিবেশে চালানো উচিত, কারণ এটি columnকমান্ড লাইন সরঞ্জামের উপর নির্ভর করে ।

সামান্য পুরানো ব্যাখ্যা (একটি সংশোধন দ্বারা, তবে এটি পুনরায় সাজানো ছিল কেবলমাত্র):

:se nosol<cr>    we need this later: G in visual block shouldn't go to BOL
$x0x             delete the surrounding pair of brackets
qq               record a macro
 %ls<cr><esc>    put each element of the big array on its own line
 @qq             recurse
@q               play back the macro until EOF
:%s/,/\t/g<cr>   replace all remaining commas with tabs
:%s/]/\t./<cr>   replace the ] at the end of lines with tabs and a dot
                 we need this for the line at the right edge of the table
:%!column -t     run the whole file through `column' on tabs
 -s'<C-v><Tab>
 '<cr>
qw               record another macro
 f";;            go forward 3 "s--that is, to the next "column"
 h               go back to the middle of the column
 <C-v>GI|<esc>   insert a line behind the cursor from top to bottom
 @wq             recurse
@w               play back until EOF
ll               move right before the line of dots we added earlier
<C-v>Gl          select the dots
s|<esc>          replace with a line (top to bottom)
0<C-v>G          select all the opening brackets
s| <esc>         again, (the leftmost) line
:%s/"//g<cr>     kill all the quotes around the data
Yp               duplicate bottom line
:s/[^|]/-/g<cr>  replace everything that's not a line with a dash
:s/|/+/g<cr>     now replace the lines with plus signs
YggpkP           put the separators before and after the first line

একটি বাইট জন্য এসএমপি ধন্যবাদ !


আপনি প্রতিস্থাপন দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন :setসঙ্গে :se
ব্যবহারকারী530873

5

জাভাস্ক্রিপ্ট (ES6), 210 212 219

2 বাইট সম্পাদনা করুন thx @ নীল

a=>(J=(m,j)=>j+m.join(j)+j,a.map(r=>r.map((c,i)=>s[i]>(l=c.length)?0:s[i]=l),s=[]),t=J(s.map(n=>'-'.repeat(n+2)),'+'),z=a.map(r=>J(r.map((c,i)=>' '+c+' '.repeat(s[i]+1-c.length)),'|')),z[0]+=`
`+t,t+J(z,`
`)+t)

পরীক্ষা

F=a=>(
  J=(m,j)=>j+m.join(j)+j,
  a.map(r=>r.map((c,i)=>s[i]>(l=c.length)?0:s[i]=l),s=[]),
  t=J(s.map(n=>'-'.repeat(n+2)),'+'),
  z=a.map(r=>J(r.map((c,i)=>' '+c+' '.repeat(s[i]+1-c.length)),'|')),
  z[0]+='\n'+t,
  t+J(z,'\n')+t
)  

Z=[["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],["GPLv2","58.69%","52.2%","42.5%","33%","23%"],["GPLv3","1.64%","4.15%","6.5%","12%","9%"],["LGPL 2.1","11.39%","9.84%","?","6%","5%"],["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]]

O.textContent=F(Z)
<pre id=O></pre>


মানে a=>(?
নিল

(c,i)=>s[i]>(l=c.length)?0:s[i]=lআমার মনে হয় আপনাকে দুটি বাইট বাঁচায়
নিল

@ নীল 1. হ্যাঁ 2. ধন্যবাদ
এডকি 65

@ ফিলনটপি সম্মত হয়েছেন
এডসি 65

হু, কেন মন্তব্যটি আমার ইনবক্সে এসেছিল?
নিল

2

পাইথন 2, 190

এই সমাধান তালিকার বোধগম্য এবং জেনারেটর এক্সপ্রেশন ব্যবহার করে। এটি তালিকার একটি তালিকা গ্রহণ করে এবং প্রয়োজনীয় বিন্যাসে একটি স্ট্রিং প্রদান করে।

def b(i):
 d=[max(map(len,c))for c in zip(*i)]
 a='+'+''.join('-'*h+'--+'for h in d)
 e=['|'+''.join(' '+f.ljust(h)+' |'for h,f in zip(d,j))for j in i]
 return'\n'.join([a,e[0],a]+e[1:]+[a])

মিনিফায়ারের আগে কোড:

def mktable(data):
    sizes = [max(map(len, column)) for column in zip(*data)]
    divider = '+' + ''.join('-'*size+'--+' for size in sizes)
    lines = ['|' + ''.join(
                ' ' + value.ljust(size) + ' |' for size, value in zip(sizes, row)
                )
                for row in data]
    return '\n'.join([divider, lines[0], divider] + lines[1:] + [divider])

data = [
    ["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],
    ["GPLv2","58.69%","52.2%","42.5%","33%","23%"],
    ["GPLv3","1.64%","4.15%","6.5%","12%","9%"],
    ["LGPL 2.1","11.39%","9.84%","?","6%","5%"],
    ["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],
    ["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]
    ]

table = mktable(data)
print table

কোন ফলাফল:

+---------------------+-------------------+------------+------------+------------+------------+
| License             | 2008-05-08        | 2009-03-11 | 2011-11-22 | 2013-08-12 | 2015-11-19 |
+---------------------+-------------------+------------+------------+------------+------------+
| GPLv2               | 58.69%            | 52.2%      | 42.5%      | 33%        | 23%        |
| GPLv3               | 1.64%             | 4.15%      | 6.5%       | 12%        | 9%         |
| LGPL 2.1            | 11.39%            | 9.84%      | ?          | 6%         | 5%         |
| LGPL 3.0            | ? (<0.64%)        | 0.37%      | ?          | 3%         | 2%         |
| GPL family together | 71.72% (+ <0.64%) | 66.56%     | ?          | 54%        | 39%        |
+---------------------+-------------------+------------+------------+------------+------------+

আমি দুঃখ পেয়েছি যে এটি প্রায় কিন্তু বেশিরভাগ ক্ষেত্রে কার্যকর হয়নি:from tabulate import*;a=input();print tabulate(a[1:],a[0],'psql',numalign='left')
কুইন্টোপিয়া


1

ম্যাটল্যাব, 244 239 229 226

a=eval(regexprep(input(''),{'], *?[','[[',']]','"'},{';','{','}',''''}));s=size(a);c=repmat(' | ',s(1),1);b=c;for i=1:s(2)
x=char(a{:,i});b=[b x c];end
h=b(1,:);r=h*0+'-';r(h=='|')='+';b=[r;h;r;b(2:end,:);r];disp(b(:,2:end-1))

অনুসরণ করার ব্যাখ্যা।


পরীক্ষা ক্ষেত্রে:

ইনপুট:

'[["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],["GPLv2","58.69%","52.2%","42.5%","33%","23%"],["GPLv3","1.64%","4.15%","6.5%","12%","9%"],["LGPL 2.1","11.39%","9.84%","?","6%","5%"],["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]]'

আউটপুট:

+---------------------+-------------------+------------+------------+------------+------------+
| License             | 2008-05-08        | 2009-03-11 | 2011-11-22 | 2013-08-12 | 2015-11-19 |
+---------------------+-------------------+------------+------------+------------+------------+
| GPLv2               | 58.69%            | 52.2%      | 42.5%      | 33%        | 23%        |
| GPLv3               | 1.64%             | 4.15%      | 6.5%       | 12%        | 9%         |
| LGPL 2.1            | 11.39%            | 9.84%      | ?          | 6%         | 5%         |
| LGPL 3.0            | ? (<0.64%)        | 0.37%      | ?          | 3%         | 2%         |
| GPL family together | 71.72% (+ <0.64%) | 66.56%     | ?          | 54%        | 39%        |
+---------------------+-------------------+------------+------------+------------+------------+

1

রুবি, 129 126 127 126 টি অক্ষর

->a{t=?|
a.transpose.map{|c|t+=" %-#{c.map(&:size).max}s |"}
[d=(t%a[0].map{p}).tr('| ','+-'),a.map{|r|t%r}.insert(1,d),d]*$/}

নমুনা রান:

2.1.5 :001 > puts ->a{t=?|;a.transpose.map{|c|t+=" %-#{c.map(&:size).max}s |"};[d=(t%a[0].map{p}).tr('| ','+-'),a.map{|r|t%r}.insert(1,d),d]*$/}[[["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],["GPLv2","58.69%","52.2%","42.5%","33%","23%"],["GPLv3","1.64%","4.15%","6.5%","12%","9%"],["LGPL 2.1","11.39%","9.84%","?","6%","5%"],["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]]]
+---------------------+-------------------+------------+------------+------------+------------+
| License             | 2008-05-08        | 2009-03-11 | 2011-11-22 | 2013-08-12 | 2015-11-19 |
+---------------------+-------------------+------------+------------+------------+------------+
| GPLv2               | 58.69%            | 52.2%      | 42.5%      | 33%        | 23%        |
| GPLv3               | 1.64%             | 4.15%      | 6.5%       | 12%        | 9%         |
| LGPL 2.1            | 11.39%            | 9.84%      | ?          | 6%         | 5%         |
| LGPL 3.0            | ? (<0.64%)        | 0.37%      | ?          | 3%         | 2%         |
| GPL family together | 71.72% (+ <0.64%) | 66.56%     | ?          | 54%        | 39%        |
+---------------------+-------------------+------------+------------+------------+------------+
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.