একটি ব্লক-ডায়াগোনাল ম্যাট্রিক্স মুদ্রণ করুন


27

এখানে একটি সরল, কামড়ের আকারের (বাইট-সাইজ?) কোড গল্ফ: 10 এর চেয়ে কম ধনাত্মক পূর্ণসংখ্যার একটি খালি খালি তালিকা দেওয়া আছে, একটি ব্লক-তির্যক ম্যাট্রিক্স মুদ্রণ করুন , যেখানে তালিকাটি ব্লকের আকারটি ক্রম অনুযায়ী নির্দিষ্ট করে। ব্লকগুলিতে অবশ্যই 10 এর চেয়ে কম ধনাত্মক পূর্ণসংখ্যা থাকতে হবে। সুতরাং যদি আপনি ইনপুট হিসাবে দেওয়া হয় given

[5 1 1 2 3 1]

আপনার আউটপুট উদাহরণস্বরূপ হতে পারে

1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1

অথবা

1 2 3 4 5 0 0 0 0 0 0 0 0
6 7 8 9 1 0 0 0 0 0 0 0 0
2 3 4 5 6 0 0 0 0 0 0 0 0
7 8 9 1 2 0 0 0 0 0 0 0 0
3 4 5 6 7 0 0 0 0 0 0 0 0
0 0 0 0 0 8 0 0 0 0 0 0 0
0 0 0 0 0 0 9 0 0 0 0 0 0
0 0 0 0 0 0 0 1 2 0 0 0 0
0 0 0 0 0 0 0 3 4 0 0 0 0
0 0 0 0 0 0 0 0 0 5 6 7 0
0 0 0 0 0 0 0 0 0 8 9 1 0
0 0 0 0 0 0 0 0 0 2 3 4 0
0 0 0 0 0 0 0 0 0 0 0 0 5

বা এই জাতীয় কিছু। ম্যাট্রিক্সের উপাদানগুলি অবশ্যই (একক) স্পেস দ্বারা আলাদা করা উচিত এবং সারিগুলি (একক) নিউলাইন দ্বারা পৃথক করা উচিত। কোনও লাইনে অবশ্যই নেতৃত্বের বা পিছনের স্থান থাকা উচিত নয়। আপনি ট্রেলিং নিউলাইনটি প্রিন্ট করতে পারেন বা নাও করতে পারেন।

আপনি কোনও ফাংশন বা প্রোগ্রাম লিখতে পারেন, এসটিডিআইএন (বা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে কোনও সুবিধাজনক স্ট্রিং বা তালিকার বিন্যাসে (যতক্ষণ না এটি প্রস্রোসেসড নয়)। যাইহোক, ফলটি অবশ্যই কোনও কার্য থেকে ফিরে যাওয়ার বিপরীতে স্টাডুটে (বা নিকটতম বিকল্প) মুদ্রণ করা উচিত say

ব্লক-ডায়াগোনাল ম্যাট্রিক্সগুলি তৈরি করতে আপনার কোনও বিল্ট-ইন ফাংশন ব্যবহার করা উচিত নয়।

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম জমা (বাইটে) জিতেছে।

লিডারবোর্ড

আমি আশা করি অ্যারে-ভিত্তিক ভাষাগুলি (জে এবং এপিএল এর মতো) এখানেও প্রান্ত থাকবে তবে আমি চাই না যে তারা তাদের পছন্দমতো ভাষায় যেমন করতে পারে তেমন করার চেষ্টা থেকে নিরুৎসাহিত করবে। তাই এখানে নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করার জন্য একটি স্ট্যাক স্নিপেট is সুতরাং কেন চেষ্টা করে না এবং পরের দিকে একটি জায়গা দখল?

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

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

# Ruby, <s>104</s> <s>101</s> 96 bytes

উত্তর:


20

জে, 7 বাইট

FUZxxl এর জন্য ধন্যবাদ2 বাইট উন্নতির

অ্যারে ভিত্তিক ভাষাগুলি এখানে একটি পৃথক প্রতিযোগিতায় গণনা করা উচিত কারণ তাদের বিশাল সুবিধা রয়েছে। :)

   =/~@#<\

   (=/~@#<\) 3 1 1 2
1 1 1 0 0 0 0
1 1 1 0 0 0 0
1 1 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 1 1
0 0 0 0 0 1 1

অন্য 7 বাইট পদ্ধতির:

#]=@##\

পুরানো সংস্করণের ব্যাখ্যা ([:=/~]#<\) :

প্রথম পদক্ষেপটি nপ্রতিটি তালিকার উপাদানগুলির জন্য একই ধরণের জিনিস (যেমন সংখ্যা) তৈরি করে n। এগুলি অন্যান্য উপাদানগুলির থেকে পৃথক হওয়া উচিত। যেমন প্রাকৃতিক সংখ্যা ব্যবহার করে 3 1 1 2হয়ে যায় 0 0 0 1 2 3 3

বাইটগুলিকে সঞ্চয় করতে আমরা তালিকার বাক্সযুক্ত উপসর্গগুলি ব্যবহার করি:

   ]#<\ 3 1 1 2
┌─┬─┬─┬───┬─────┬───────┬───────┐
│3│3│3│3 1│3 1 1│3 1 1 2│3 1 1 2│
└─┴─┴─┴───┴─────┴───────┴───────┘

সঙ্গে =/~ক্রিয়া আমরা এই বাক্সযুক্ত উপসর্গ এর ডেস্ক্রেটের পণ্য একটি টেবিল তৈরি করুন এবং প্রতিটি কক্ষে হতে হবে 1যদি দুটি এন্ট্রি সমান 0অন্যথায়।


2
আমি মনে করি না কাছাকাছি থাকা প্রথম বন্ধনীগুলি [:=/~]#<\ আপনার স্কোরের দিকে গুনছে। এছাড়াও, =/~@#<\ দুটি অতিরিক্ত বাইট জন্য শেভ বন্ধ।
FUZxxl

"তবে, ফলাফলটি অবশ্যই কোনও কাজ থেকে ফিরে যাওয়ার বিপরীতে , স্টাডুটে (বা নিকটতম বিকল্প) মুদ্রণ করা উচিত ।" আপনার সম্ভবত সম্ভবত সুস্পষ্ট ইনপুট (তাই এটি কেবল কোনও ফাংশন নয়) বা স্পষ্ট আউটপুট প্রয়োজন।
মেরিনাস

@ মারিনাস জে যদি কোনও ভেরিয়েবলের সাথে আবদ্ধ না হয় তবে একটি অভিব্যক্তির ফলাফলটি স্টাডাউটকে মুদ্রণ করে।
FUZxxl

@FUZxxl: হ্যাঁ, তবে (=/~@#<\)এটি কেবল একটি ফাংশন। আপনাকে একটি অভিব্যক্তি পেতে আসলে এটি কোনও কিছুতে প্রয়োগ করতে হবে, সুতরাং আপনার স্পষ্ট ইনপুট প্রয়োজন ( ".1!:1[1), বা যদি আপনি কোনও ফাংশন জমা দিতে চান তবে সেই ফাংশনটি আসলে মানটি মুদ্রণ করে এবং কেবল এটি ফিরিয়ে না দেয় (যেমন echo@বা অন্য কিছু) )।
মেরিনাস

=/~&I.­­­­­­­
এনজিএন

11

এপিএল, 10

∘.=⍨∆/⍋∆←⎕

উদাহরণ:

      ∘.=⍨∆/⍋∆←⎕
⎕:
      5 1 1 2 3 1 
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1

ব্যাখ্যা:

  • ∆←⎕: ইনপুট পড়ুন, স্টোর ইন করুন
  • ⍋∆: সাজানোর ক্রম অনুসন্ধান করুন ( এটি ইনপুটটিতে প্রতিটি মানের জন্য একটি অনন্য মান দেয়)
  • ∆/: এই অনন্য মানের প্রত্যেকটির জন্য, বারবার এটি পুনরাবৃত্তি করুন, ইনপুটটির সাথে সম্পর্কিত মানটি Nকোথায়N
  • ∘.=⍨: সেই তালিকার প্রতিটি মানকে অন্য মানের সাথে তুলনা করে একটি ম্যাট্রিক্স তৈরি করুন।

এটি পরীক্ষা করার জন্য http://tryapl.org, আপনি ডিএফএন ব্যবহার করতে চাইতে পারেন {∘.=⍨⍵/⍋⍵}, কারণ সাইটটি সমস্ত ব্যবহার ফিল্টার করে ( ⎕IOযেমন এবং এর মতো স্টাফ বাদে )।
FUZxxl

1
@ ফুজজেক্সএল: এতে বলা হয়েছে "তবে কোনও ফলাফল থেকে ফেরার বিপরীতে ফলাফলটি অবশ্যই STDOUT (বা নিকটতম বিকল্প) এ মুদ্রিত করতে হবে , বলুন ।", সুতরাং {∘.=⍨⍵/⍋⍵}এটি বৈধ নয়। আপনার প্রয়োজন হবে {⎕←∘.=⍨⍵/⍋⍵}, যার জন্য কেবল দুটি অক্ষর ব্যয় হবে না তবুও ট্রাইএপিএলে কাজ করবে না। (এবং সাধারণভাবে, ট্রাইএপিএল খুব কার্যকর হিসাবে সীমাবদ্ধ))
মেরিনাস

যদি ফলাফলটি মুদ্রণ করতে হয় তবে আপনার কী প্রয়োজন হবে না ⎕←, এমনকি ডিএফএন ছাড়াও?
FUZxxl

@FUZxxl: না, কোনও এক্সপ্রেশন আউটপুট এটির সাথে আর কিছু না করা থাকলে স্বয়ংক্রিয়ভাবে মুদ্রিত হবে।
মেরিনাস

আহ আমি দেখি. আমি অনুভূতির মধ্যে ছিলাম যে আপনি কেবল ইন্টারেক্টিভভাবে দোভাষীটি ব্যবহার করছেন এমন সময় এটি ঘটে।
FUZxxl

8

আর, 69 63

function(x)write(+outer(i<-rep(1:length(x),x),i,"=="),1,sum(x))

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

(function(x)write(+outer(i<-rep(1:length(x),x),i,"=="),1,sum(x)))(c(5,1,1,3,1))
1 1 1 1 1 0 0 0 0 0 0 
1 1 1 1 1 0 0 0 0 0 0 
1 1 1 1 1 0 0 0 0 0 0 
1 1 1 1 1 0 0 0 0 0 0 
1 1 1 1 1 0 0 0 0 0 0 
0 0 0 0 0 1 0 0 0 0 0 
0 0 0 0 0 0 1 0 0 0 0 
0 0 0 0 0 0 0 1 1 1 0 
0 0 0 0 0 0 0 1 1 1 0 
0 0 0 0 0 0 0 1 1 1 0 
0 0 0 0 0 0 0 0 0 0 1

বাহ্যিক ফাংশনটি এখানে বেশিরভাগ কাজ করে, তারপরে আউটপুটটি ঠিক দেখাচ্ছে এটির একটি ক্ষেত্রে - তার সাথে সাহায্য করার জন্য @ ভ্যালোকে ধন্যবাদ


খুব সুন্দর সমাধান
মিকিটি

দুর্দান্ত সমাধান। -/+যৌক্তিক জোর করে ব্যবহার করার কথা কখনও ভাবেননি । কয়েকটি বাইট function(x)write(+outer(i<-rep(1:length(x),x),i,"=="),1,sum(x))63 সংরক্ষণ করুন
ভ্লো

6

পাইথন 3, 103 97 82 78 76 বাইট

def P(L,n=0):k,*L=L;exec("print(*[0]*n+[1]*k+[0]*sum(L));"*k);L and P(L,n+k)

স্প্ল্যাট ব্যবহার করে স্পেস-বিভাজন প্রকৃতির printকিছুটা পুনরাবৃত্তি নিয়ে সুবিধা নিতে ।


6

রুবি, 86 90 83 বাইট

আমার প্রথম গল্ফ!

->l{n=l.reduce :+;s=0;l.map{|x|x.times{puts ([0]*s+[1]*x+[0]*(n-x-s))*" "};s+=x}}

পূর্ণসংখ্যার সাথে একটি অ্যারে প্রাপ্ত করে, প্রত্যাশিত ফলাফল মুদ্রণ করে:

$ (->l{n=l.reduce :+;s=0;l.map{|x|x.times{puts ([0]*s+[1]*x+[0]*(n-x-s))*" "};s+=x}}).call([5, 1, 1, 2, 3, 1])
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1

সম্পাদনা:

আমাকে কিছু জিনিস সংক্ষিপ্ত করতে সাহায্য করার জন্য মার্টিন বাটনারকে ধন্যবাদ!


1
আপনি আরও কিছু অক্ষর সংরক্ষণ করতে পারেন: ->(l)হতে পারে ->lmapতুলনায় খাটো each.join(" ")সংক্ষিপ্ত করা যেতে পারে *" "
মার্টিন এন্ডার

6

মতলব, 60 54 বাইট

এটি মতলবের বিশেষ ক্ষেত্র IF হবে আমরা বিল্টিন ফাংশনগুলি ব্যবহার করতে পারি হবে ...

আমি যে ভুলটি মিস করেছি তা ঠিক করার জন্য @ সানচাইজসকে ধন্যবাদ।

c=0;a=input('');for A=a;v=c+1:c+A;d(v,v)=1;c=c+A;end;d

Wooow, এটা না হওয়া পর্যন্ত ছিল এখন আমি লক্ষ্য করেছি যে এই JS snippet যে আসলে একটি লিডারবোর্ডের উত্পাদন করে !!! আমি কখনই এটা খেয়াল করিনি ??? এটি নির্দেশ করার জন্য ধন্যবাদ =)
flawr

আমি ঠিক জানি? এটা আসলেই চমৎকার!
অ্যালেক্স এ।

1
আমি প্রায় একই উত্তর পোস্ট করতে
চলেছিলাম

ঠিক একই বা কিছুটা আলাদা? =) (পরিবর্তনশীল নামগুলি ছাড়াও Well)
flawr

এটি পোস্ট করার জন্য আমার পক্ষে খুব অনুরূপ :-)
লুইস মেন্ডো

6

মতলব, 53 বাইট

যদিও এটি অন্য মতলব খণ্ডের চেয়ে মাত্র একটি চর খাটো, তবে আমি বুঝতে পেরেছি যে একটি নতুন উত্তরের নিশ্চয়তা দেওয়ার জন্য কোডটি যথেষ্ট আলাদা:

d=[];a=input('');for A=a;v=1:A;d(end+v,end+v)=1;end;d

মূল কৌশলটি অবশ্যই সীমাবদ্ধতার সূচকের বাইরে, তবে endএটি আরও কমপ্যাক্ট করতে ভেরিয়েবল হিসাবে ব্যবহারের সাথে মিলিত হয় ।


1
জঘন্য - আমি end+1:end+vএকটি 'কাউন্টার' পরিবর্তনশীল থেকে মুক্তি পেতে গল্ফ চেষ্টা করে আধ ঘন্টা ব্যয় করেছি এবং আমি এই সমাধানটির কথা ভাবি নি।
সান্চাইজস

প্রকৃতপক্ষে, যেমন @ জিওবিটস উল্লেখ করেছেন কোনও অনামী দ্বারা সম্পাদিত চেষ্টা blkdiagকরার প্রয়োজনে প্রয়োজনীয়তা লঙ্ঘিত হবে। কেবলমাত্র রেফারেন্সের জন্য আমি এর মূলটি এখানেই blkdiag(A,ones(i))
রাখব

4

সিজেম, 21

q~{T):Ta*~}%_f{f=S*N}

এটি http://cjam.aditsu.net/ এ চেষ্টা করুন

ব্যাখ্যা:

q~          read and evaluate the input array
{…}%        transform each number using the block
    T):T    increment T (initially 0)
    a*      wrap T in an array and repeat it <number> times
    ~       dump the repeated numbers so they end up in a flat array
_           duplicate the array
f{…}        for each array item and the array
    f=      compare the current item with each item, resulting in an array of 1 and 0
    S*      join with spaces
    N       add a newline

4

পাইথন 3, 79

def f(l,s=0):
 for x in l:r=[0]*sum(l);r[s:s+x]=[1]*x;s+=x;exec("print(*r);"*x)

ব্লকের বামতমতম সূচকটিকে সন্ধান করে sএবং xএন্ট্রিগুলি তার পরে তৈরি করে 1, xবর্তমান ব্লকের আকার কোথায় । এই সারিটি তখন মুদ্রিত xবার। পাইথন 3 করতে হবে print(*r)


এটি rহিসাবে প্রকাশের জন্য এটি চারটি খাটো [0]*s+[1]*x+[0]*(sum(l)-s-x), তবে আমি এখনও আরও একটি ভাল উপায় খুঁজছি।
xnor

4

হাস্কেল, 118 116 বাইট

(#)=replicate
f i=putStr$[e#(unwords$sum h#"0"++e#"1"++sum t#"0")|(h,e:t)<-map(`splitAt`i)[0..length i-1]]>>=unlines

ব্যবহার: f [2,1,1,3]

আউটপুট:

1 1 0 0 0 0 0
1 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 1 1
0 0 0 0 1 1 1
0 0 0 0 1 1 1

কিভাবে এটা কাজ করে:

[0..length i-1]           for each index n of the input list i
(h,e:t)<-map(`splitAt`i)  split i at n and
                            let e be the element at index n
                            let h be the list of elements to the left of e
                            let t be the list of elements to the right of e
                          foreach triple h, e, t make a list of
sum h # "0" ++              sh copies of "0" (sh = the sum of the elements of h) followed by
e # "1" ++                  e copies of "1" followed by
sum t # "0"                 st copies of "0" (st = the sum of the elements of t)
unwords                   join those list elements with spaces inbetween
e #                       make e copies
>>=unlines                join those lists with newlines inbetween
putStr                    print

আপনি করছেন দুটি বাইট সংরক্ষণ করতে পারবেন (h,e:t)<-map(`splitAt`i)[0..length i-1]সাল থেকে nবাহিরে ব্যবহার করা হয় না letবাঁধাই।
Zgarb

@ জাগারব: চমৎকার সন্ধান করুন। ধন্যবাদ!
নিমি

3

পাইথ, 23 21 বাইট

পাইথের জন্য গিটহাবের সংগ্রহস্থল

Ju+G*]GHQYFNJjdmsqdNJ

ইনপুটটি পূর্ণসংখ্যার মতো একটি তালিকা [3, 1, 1, 2]। এটি অনলাইনে ব্যবহার করে দেখুন: পাইথ সংকলক / নির্বাহক

এলোমেলো জে কোড হিসাবে বেশ অনুরূপ ধারণা ব্যবহার করে। কোডের প্রথম অংশটি অনুরূপ জিনিসের অংশ Ju+G*]GHQYতৈরি করে n। উদাহরণস্বরূপ ইনপুটটির [3, 1, 1, 2]জন্য ফলাফলটি এরকম দেখাচ্ছে:

[
 [], 
 [], 
 [], 
 [[], [], []], 
 [[], [], [], [[], [], []]], 
 [[], [], [], [[], [], []], [[], [], [], [[], [], []]]], 
 [[], [], [], [[], [], []], [[], [], [], [[], [], []]]]
]

এক উপাদান থেকে প্রথম তিনটি অভিন্ন উপাদান, তারপরে একটি উপাদান আবার এবং শেষে দুটি অভিন্ন উপাদান।

Ju+G*]GHQY
 u      QY  reduce the input Q, start with empty list G=[]
            for each H in input, replace the value of G by:
  +G*]GH       G+[G]*H
J           store the result in J

কোডের দ্বিতীয় অংশটি কার্টেসিয়ান পণ্যটির উপাদানগুলির সাথে তুলনা করে এটি মুদ্রণ করছে।

FNJjdmsqdNJ
FNJ          for N in J:
     m    J     map each element d of J to
       qdN          the boolean value of d == N
      s             and convert it to an integer (0 = False, 1 = True)
   jd           print the resulting list seperated by d (=space)

3

সি ++, 294 বাইট

সংকলক ব্যবহৃত - GCC 4.9.2

#include<bits/stdc++.h>
using namespace std;
#define F(a,b) for(a=0;a<b;a++)
#define V vector<int>
int n,i,j,s,o;
main(){V v;while(cin>>n)v.push_back(n),s+=n;vector<V> m(s,V(s,0));F(i,v.size()){F(j,v[i])F(n,v[i])m[j+o][n+o]=1;o+=v[i];}F(j,s){F(n,s)cout<<m[j][n]<<((n==s-1)?"":" ");cout<<"\n";}}

ব্যাখ্যা -:

#include<bits/stdc++.h>
using namespace std;
#define F(a,b) for(a=0;a<b;a++)
#define V vector<int>
int n, i, j, s, o;
/*
 n = Used to take inputs, and as an iterator after that
 i, j = Iterators
 s = sum of all the inputs
 o = offset ( used to find the location of the starting cell of the next matrix of 1's )
*/

main()
{
    V v;
    while ( cin >> n )  // Take input
    {
        v.push_back( n ), s += n;
    }

    vector<V> m( s, V( s, 0 ) ); // m is a matrix of size (s*s) with all elements initialized to 0
    F( i, v.size() )
    {
        F( j, v[i] )F( n, v[i] )m[j + o][n + o] = 1; // Assign 1 to the required cells
        o += v[i]; // Add the value of the current element to the offset
    }

    F( j, s )  // Output the matrix
    {
        F( n, s )cout << m[j][n] << ( ( n == s - 1 ) ? "" : " " ); // Prevent any trailing whitespace
        cout << "\n";
    }
}

3

কে, 30 বাইট

{"i"$,/x#',:',/'g=\:\:x#'g:<x}

মূলত মেরিনাসের উত্তর চুরি করেছে

k){"i"$,/x#',:',/' g=\:\:x#'g:<x}5 1 1 2 3 1
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1

2

জাভা, 163

a->{int n=a.stream().mapToInt(x->x).sum(),t=0,j,k;for(int i:a){for(j=0;j++<i;System.out.println("\b"))for(k=0;k<n;)System.out.print(k>=t&k++<t+i?"1 ":"0 ");t+=i;}}

একটি ভোক্তা যা পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে।

বয়লারপ্লেট কোড সহ পাঠযোগ্য সংস্করণ:

java.util.function.Consumer<java.util.List<Integer>> c = a -> {
    int n = a.stream().mapToInt(x -> x).sum(), t = 0, j, k;
    for (int i : a) {
        for (j = 0; j++ < i; System.out.println("\b")) {
            for (k = 0; k < n;) {
                System.out.print(k >= t & k++ < t + i ? "1 " : "0 ");
            }
        }
        t += i;
    }
};

ব্যবহার করে দাওয়াত করুন:

List list = Arrays.asList(5, 1, 1, 2, 3, 1);
c.accept(list);

2

পাইথন 2, 163 114 বাইট

gnibbler এটি একটি গুচ্ছ golfed।

h=input()
r=range
l=len(h)
for i in r(l):
 for k in r(h[i]):print" ".join("01"[i==j]for j in r(l)for x in r(h[j]))

3
কীভাবে print" ".join("01"[i==j]for j in r(l(h))for x in r(h[j]))?
gnibbler

একটি হা ! আমি ভেবেছিলাম আমি এরকম কিছু করতে পারি।
কেএসএফটি

এটি প্রতিটি ব্লকের কেবল একটি সারি মুদ্রণ করে বলে মনে হচ্ছে।
xnor

@xnor আপনি ঠিক বলেছেন; আমি এটা ঠিক করেছি.
কেএসএফটি

2

পাইথন 3, 74

def f(a,p=0):n=a.pop(0);exec("print(*'0'*p+'1'*n+'0'*sum(a));"*n);f(a,p+n)

এটি একটি ত্রুটি দিয়ে শেষ হয় না?
xnor

@ এক্সনর হ্যাঁ এটা করে!
feersum

1
@feersum এটি অনুমোদিত? আমি ইস্যুতে কোনও মেটা পোস্ট দেখতে পাচ্ছি না। আপনার কী মনে হয়, মার্টিন? যদি এটি অনুমোদিত হয়, Sp3000 andশর্ট সার্কিট থেকে মুক্তি পেয়ে 6 টি অক্ষর বাঁচাতে পারে ।
xnor

@ xnor ত্রুটিটি প্রোগ্রামটি বন্ধ করে দেয় বা কেবল ফাংশন কল? এটি যদি প্রোগ্রামটি বন্ধ করে দেয় তবে আমি তা মনে করি না এটি অনুমোদিত। আমি এখানে মেটাতে আমার মতামত প্রকাশ করেছি । আমি আরও মনে করি যে যদি ফেয়ারসামের মতামতটি ছিল যে এটি সম্পূর্ণরূপে বৈধ, তবে কেউ তার নজরে আসবে না এমন আশা করার পরিবর্তে তিনি তার উত্তরে এটি বলেছিলেন।
মার্টিন এণ্ডার

@ মার্টিনব্যাটনার প্রোগ্রামটি সমাপ্ত করুন, যদি আমি বুঝতে পারি আপনি কী জিজ্ঞাসা করছেন। যদি আপনি এটি করতে চান f([1,2,3]);print("Done"), ত্রুটিটি ব্লক ম্যাট্রিক্সটি প্রিন্ট করার পরে প্রোগ্রামটি শেষ করবে এবং এটি "সম্পন্ন" মুদ্রণ করতে পারবে না।
xnor

2

জাভাস্ক্রিপ্ট (ES6), 103 107

103 বাইট একটি বেনামে ফাংশন হিসাবে গণনা করা হচ্ছে না F=(তবে এটি পরীক্ষা করার জন্য আপনার এটি প্রয়োজন)

F=l=>alert(l.map((n,y)=>(l.map((n,x)=>Array(n).fill(x==y|0))+'\n').repeat(n))
.join('').replace(/,/g,' '))

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

F([5,1,1,2,3,1])

আউটপুট

1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1


1

পাইথ, 31 30

FbQVbjd++*]0Z*b]b*]0--sQbZ)~Zb

একটি দুর্দান্ত নিষ্পাপ প্রোগ্রাম, স্টিডিনে ইনপুট নেয়। এটি সম্ভবত আরও গল্ফ করা যেতে পারে;)

নষ্ট চারটিকে নির্দেশ করার জন্য @ জাকুবকে ধন্যবাদ

এখানে চেষ্টা করুন


1

পার্ল, 69

#!perl -na
$j=s/./0 x$&/ger;print+($j|$i.1x$_)=~s/\B/ /gr x($i.=0 x$_,$_)for@F

স্ট্যান্ডার্ড ইনপুট ব্যবহার করে:

$ perl a.pl <<<"1 2 3"
1 0 0 0 0 0
0 1 1 0 0 0
0 1 1 0 0 0
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1

আশ্চর্যজনকভাবে, এটি আদর্শের জন্য আমার জন্য নিউলাইনগুলি মুদ্রণ করে না । এছাড়াও, এই পোস্ট অনুসারে আপনার কাস্টম শেবাংটি দুটি বাইট হিসাবে 4 বাইট হিসাবে কোড করা উচিত। আপনি শেবাগটি ব্যবহার না করে দোভাষীর ফ্ল্যাগ ব্যবহার করে এবং -eফাইলের পরিবর্তে কোডটি কল করে এটি ঠিক করতে পারেন (সেই মেটা পোস্টের উদাহরণ দেখুন)। এছাড়াও, আমি মনে করি আপনার nপতাকাটির দরকার নেই - পার্লডোক অনুযায়ী, সুস্পষ্টভাবে aসেট করে n
মার্টিন ইন্ডার

প্রোগ্রামটি স্ট্যান্ডার্ড ইনপুট থেকে ইলটিকে পুনরায় ব্যবহার করে। আপনি যখন যুক্ত করেন তখন আপনার আদর্শ সেটআপ কাজ করে works চরিত্রের গণনার ক্ষেত্রে, আমি আমার সমস্ত উত্তরগুলিতে এটি গণনা করি এবং আমি অন্যকেও এইভাবে এটি করতে দেখেছি। আপনি যে লিঙ্কটি আগে লিঙ্ক করেছেন তা আমি দেখেছি, তবে "পার্থক্য গণনা করে" এর অর্থ কী তা আমি পাই না perl -nl file.pl। মূল পার্লগল্ফ বিধিগুলি হাইফেন গণনা করবে তবে এই ক্ষেত্রে 3 টি অক্ষর নয়।
নটকি

@ MartinBüttner, এটা সব তর্ক করা যাহাই হউক না কেন যেমন randomra এর পদক্ষেপ অনেক খাটো সমাধান দেয়: -lna //,print join$",map$'==$_|0,@,for@,=map{(++$i)x$_}@F। BTW পার্ল আমার সংস্করণ সেট করেনি -nসঙ্গে -a, এটি একটি সাম্প্রতিক উপরন্তু হতে হবে।
নটকি

1

আর, 117 144 137 133 129 123 বাইট

এই মুহুর্তে যুক্তিসঙ্গত ভার্বোজ। আরও কয়েকবার শেভ করতে সক্ষম হওয়া উচিত। এটিকে সঠিকভাবে ফর্ম্যাট করে বেশ কয়েকটি বাইটস পেয়েছে তবে অ্যারের জন্য ম্যাট্রিক্সের কিছু অদলবদল করে সঞ্চয় করেছে।

এর সাথে সেপ প্রতিস্থাপন এবং ফাংশনটির নাম মুছে ফেলার জন্য টিপসের জন্য অ্যালেক্সকে ধন্যবাদ।

অ্যারেটি পুরোপুরি ফেলে দেওয়া হয়েছে এবং প্রতিটি লাইন তৈরির জন্য কয়েকটি রেপ ব্যবহার করে used

যদিও মিফের কাছে মারাত্মকভাবে মারধর করা হয়েছে, তার সমাধান আমাকে বুঝতে পেরেছিল আমি s = '' পুরোপুরি ফেলে দিতে পারি।

function(i){s=sum(i);i=cumsum(i);b=0;for(n in 1:s){d=i[i>=n][1];cat(c(rep(0,b),rep(1,d-b),rep(0,s-d)),fill=T);if(d==n)b=d}}

এবং পরীক্ষা

> (function(i){s=sum(i);i=cumsum(i);b=0;for(n in 1:s){d=i[i>=n][1];cat(c(rep(0,b),rep(1,d-b),rep(0,s-d)),fill=T,s=' ');if(d==n)b=d}})(c(5,1,1,3,1))
1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0 1
> 

ফাংশন পরামিতিগুলির আংশিক মিল ব্যবহার করে আপনি 2 বাইট সংরক্ষণ করতে পারেন। ইন cat(), পরিবর্তন sep=করার s=পর থেকে যে ফাংশন জন্য অন্য কোন স্বীকৃত পরামিতি "s" এর সঙ্গে শুরু।
অ্যালেক্স এ।

@ অ্যালেক্স ধন্যবাদ, বুঝতে পারিনি এখনও শেখার বক্ররেখায়
মিকিটি

অপসারণ করে আপনি আরও 2 টি সঞ্চয় করতে পারেন f=। এটি আপনাকে একটি ফাংশন অবজেক্ট দেয়। যদি আপনি এটি করেন, আপনাকে কেবল নির্ধারণ করতে হবে যে এটি f=চালানোর আগে এমন কিছু ব্যবহার করে নির্ধারিত করা হবে। আমি বুঝতে পারি না যে মার্টিন বাটনার রুবির সাথে এটি করার আগে পর্যন্ত আমি এই জাতীয় প্রতিযোগিতায় বৈধ ছিল।
অ্যালেক্স এ।

1

ব্যাচ - 226 বাইট

@echo off&setLocal enableDelayedExpansion&set c=0&for %%a in (%*)do set/ac+=1&for /l %%b in (1,1,%%a)do (set l=&set d=0&for %%c in (%*)do (set/ad+=1&for /l %%d in (1,1,%%c)do if !d!==!c! (set l=!l!1)else set l=!l!0)
echo !l!)

স্টিডিন ( C:\>script.bat 5 1 1 2 3 1) এবং প্রতিধ্বনি এর আউটপুট থেকে ইনপুট নেয় । দুর্ভাগ্যক্রমে আমি একই লাইনে শেষ প্রতিধ্বনি পেতে পারি না, অন্যথায় আমি সম্ভবত পুরো লাইনে কল করতে পারিcmd/von/c দীর্ঘতর পথে বিলম্বিত প্রসারণ সক্ষম করতে এড়াতে ।

সুন্দর এবং ঝরঝরে - খাঁটি কাজ ছাড়া কিছুই নয়:

@echo off
setLocal enableDelayedExpansion
set c=0
for %%a in (%*) do (
    set /a c+=1
    for /l %%b in (1,1,%%a) do (
        set l=
        set d=0
        for %%c in (%*) do (
            set /a d+=1
            for /l %%d in (1,1,%%c) do if !d!==!c! (set l=!l!1) else set l=!l!0
        )
        echo !l!
    )
)

1

হাস্কেল, 124

(%)=replicate
d l=fst$foldr(\x(m,n)->(m>>mapM_(\_->putStrLn$unwords$n%"0"++x%"1"++(sum l-n-x)%"0")[1..x],n+x))(return(),0)l

এর মাধ্যমে mapM_এবং এর সাথে আইও ক্রিয়াগুলি সংযুক্ত করে আউটপুট উত্পাদন করে foldr। ফাংশনটি dইনটগুলির একটি তালিকা দেওয়া উচিত।


1

কে (এনএনজি / কে) , 10 বাইট

{x=\:x:&x}

এটি অনলাইন চেষ্টা করুন!

-19 ধন্যবাদ এনএনজি ... হাহার নীচে আমার জমা রাখছি


কে (এনএনজি / কে) , 29 বাইট

{,/d#',:'-':+\[d:x,0]>\:!+/x}

এটি অনলাইন চেষ্টা করুন!

সম্পাদনা: 1-উপাদান ইনপুট ক্ষেত্রে বিরতি, কাজের প্রয়োজন

edit1: এখনই স্থির +4 বাইট ছি-ছি


1
{x=\:x:&x}­­­
এনজিএন

@ngn আসতো ...
আঁকিবুঁকি

এই চ্যালেঞ্জটি এপিএল ঘরে আলোচনা করা হয়েছিল , আমি সেখান থেকে সমাধানটি জানতাম :) কে এবং জে এখানে একটি সুবিধা পেয়েছে কারণ তাদের "যেখানে" -এস ( &কে বা I.জে) ইন্ট ভেক্টরগুলির সাথে কাজ করে, যখন এপিএলের কাজগুলি কেবল বুলিয়ানগুলির সাথেই কাজ করে ।
এনজিএন

1

এপিএল (ডায়ালগ প্রসারিত) , 5 বাইট

∘.=⍨⍸

এটি অনলাইন চেষ্টা করুন!

এপিএল জে এবং কে-র বিপরীতে প্রসারিত ডোমেন সহ জিতল

কিভাবে এটা কাজ করে

∘.=⍨⍸
       Where; convert to an array that,
          for each element n at index i, has n copies of i
∘.=⍨    Outer product by element-wise equality on self

0

স্টাটা, 155 বাইট

di _r(a)
forv x=1/wordcount($a){
gl b=word($a,`x')
gl c=_N+1
set ob _N+$b
forv y=$c/_N{
g d`y'=_n>=$c
}
}
forv z=1/_N{
replace d`z'=0 if d`z'>1
}
l,noo noh

আমি কি এই অনলাইন কোথাও পরীক্ষা করতে পারি?
মার্টিন এন্ডার

@ মার্টিনবাটনার: যতদূর আমি জানি, স্টাটা মালিকানাধীন হওয়ায় কোনও অনলাইন সংকলক নেই। একই এসএএস এর মতো ভাষার জন্য যায়।
অ্যালেক্স এ।

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