পাস্কালের রম্বস


20

প্যাসকের রম্বস (যা আসলে ত্রিভুজ) প্যাটার্নটিতে যুক্ত করে প্রাপ্ত হয়:

  *
 ***
  x

পরিবর্তে

* *
 x

এর অর্থ হ'ল প্রতিটি ঘর সরাসরি তার ওপরে সারির তিনটি কোষ এবং তার উপরে 2 সারিতে একটি কোষের যোগফল। পাস্কালের ত্রিভুজের মতো জিরোথ সারিটিতে একটি একক রয়েছে 1যা ত্রিভুজটি উত্পন্ন করে।

এখানে পাস্কালের রোম্বসের সারিগুলির প্রথম কয়েকটি

      1
    1 1 1
  1 2 4 2 1
1 3 8 9 8 3 1

কার্য

একটি সারি নম্বর দেওয়া হয়েছে (উপরে থেকে শুরু করে) এবং একটি কলাম নম্বর (সেই সারিটির প্রথম অ-শূন্য আইটেম থেকে শুরু করে) সেই নির্দিষ্ট কক্ষের মান আউটপুট দেয়। উভয় ইনপুট 1 বা 0 সূচকযুক্ত হতে পারে (আপনি ইচ্ছা করলে মেশাতে পারেন এবং মিলতে পারেন) match

এটি তাই আপনার উত্স কোডের ফাইলের আকারটি যতটা সম্ভব ছোট করা উচিত।

OEIS A059317



আপনার উত্স কোডের ফাইলের আকারটি যতটা সম্ভব ছোট হিসাবে তৈরি করা উচিত যদি আমি আমার কোডকে কমান্ড-লাইন আর্গুমেন্ট হিসাবে রাখি? : পি
এরিক আউটগল্ফার

শর্টকাটগুলির জন্য গুগলিং গেছে এবং স্পষ্টতই arxiv.org/abs/1504.04404 বলেছে ফলাফলের সরাসরি গণনা কোড গল্ফের পক্ষে অকার্যকর
জলি জোকার

উত্তর:


12

হাস্কেল , 59 55 বাইট

পাস্কালের রম্বস? হাস্কেলের রোম্বসের মতো আরও! আমি কি সঠিক?

4 বাইট সংরক্ষণ করেছেন আরজান জোহানসেনকে ধন্যবাদ

আমি ভেবেছিলাম আমার নিজের সমস্যার সমাধান করতে হবে এবং আমার হাস্কেলকে অনুশীলন করব। আশা করি এটি আরও বেশি লোককে এর উত্তর দিতে অনুপ্রাণিত করবে।

1!1=1
n!k=sum[(n-2)!(k-2)+sum(map((n-1)!)[k-2..k])|n>1]

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

ব্যাখ্যা

সর্বশেষতম গল্ফটির সাথে এটি কিছুটা পুরানো

পরিবর্তে গণনা

  *
 ***
  x

আমরা গণনা করি

*
***
  x

এটি আমাদের পুরো ত্রিভুজটি হয়ে ওঠে

1
1 1 1
1 2 4 2 1
1 3 8 9 8 3 1

এটি আমাদের সমস্ত সারি সারি রেখা তৈরি করে যে কোনও কলামের নবম আইটেমকে সূচী করা সহজ করে। তারপরে আমরা আমাদের বেস কেসগুলি সংজ্ঞায়িত করি।

জিরোথ সারিটি সমস্ত জিরো তাই

0!_=0

1পজিশনে একটি সিঙ্গল আছে 1,1তাই আমরা এটি সংজ্ঞায়িত করি

1!1=1

এবং আমরা প্রথম সারির বাকী অংশটিও জিরো হিসাবে সংজ্ঞায়িত করি

1!_=0

তারপরে আমরা সাধারণ বর্ণনাকে উপরে বর্ণিত প্যাটার্নটি পুনরাবৃত্তভাবে সংজ্ঞায়িত করি:

n!k=(n-2)!(k-2)+(sum$map((n-1)!)[k-2..k])

আমাকে মার! এটি আমার থেকেও অনেক পরিষ্কার er
জুলিয়ান ওল্ফ

@ জুলিয়ানওল্ফ এর জন্য দুঃখিত, আমি যখন এটি পোস্ট করেছি তখন মনে হয়েছিল জর্গ ব্যতীত অন্য কেউ সমস্যাটি করছে না। আমি এখনও আপনার সমাধান দেখতে চাই
গম উইজার্ড

1
এর মাধ্যমে আপনি চারটি বাইট সংরক্ষণ করতে পারেন n!k=sum[(n-2)!(k-2)+sum(map((n-1)!)[k-2..k])|n>1]
janrjan জোহানসেন

10

পাস্কাল , 122 বাইট

আচ্ছা, এটি পাস্কালের রম্বস।

৩৩ বাইট @ মান্যাটওয়ার্ককে ধন্যবাদ রক্ষা করেছে

function f(n,k:integer):integer;begin f:=1-Ord((k<0)or(k>n*2));if n>0then f:=f(n-1,k-2)+f(n-1,k-1)+f(n-1,k)+f(n-2,k-2)end;

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


পুরো ifঅবস্থার চারদিকে প্যারেন্টেসিস অর্থহীন। (1 ম ifআপনি কীওয়ার্ড এবং পূর্ববর্তী অঙ্কের ifমধ্যে কোনও স্থান না রেখে ২ য় 1 অক্ষরে 2 অক্ষর সংরক্ষণ করুন then)) ওহ এবং ভেরিয়েবল সম্পূর্ণরূপে অপ্রয়োজনীয়।
manatwork

অদ্ভুত প্রাণী যা আইডিয়নে পাস্কাল। এর আগে কোনও পাস্কাল ভেরিয়েন্টে ডাবল কোটস সীমানাঙ্কিত স্ট্রিং কখনও দেখেনি। আরও একটি জিনিস আপনি সরাতে পারেন: ;সামনে function'র end
manatwork

@ মান্যাটওয়ার্ক হ্যাঁ, এখন আপনি যখন এটি উল্লেখ করেছেন, অন্যান্য অনলাইন সম্পাদকরা সকলেই এটি সম্পর্কে অভিযোগ করেছিলেন
উরিল

@ মান্যাটওয়ার্ক আমি নিশ্চিত যে আমি বুঝতে পেরেছি না। যে শুধু সাথে কোড লম্বা >= <=? আমি এখনও সংরক্ষণ করা প্রয়োজনif n=0
ঊরীয়েল

দুঃখিত @ উরিল, আমার কাছে আর সংস্করণ নেই। বর্তমানে আমি আছিfunction f(n,k:integer):integer;begin f:=1-Ord((k<0)or(k>n*2));if n>0then f:=f(n-1,k-2)+f(n-1,k-1)+f(n-1,k)+f(n-2,k-2)end;
manatwork

7

পিএইচপি , 86 বাইট

পুনরাবৃত্তির উপায়ে কেবল ফাংশন সারি এবং কলাম 0-সূচিযুক্ত

function f($r,$c){return$r|$c?$r<0?0:f($r-=1,$c)+f($r,$c-1)+f($r,$c-=2)+f($r-1,$c):1;}

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

পিএইচপি , 114 বাইট

পুনরাবৃত্তির উপায়ে সম্পূর্ণ প্রোগ্রাম সারি এবং কলাম 0-সূচী

<?=f(...$_GET);function f($r,$c){return$r|$c?$r<0|$c<0|$c>2*$r?0:f($r-=1,$c)+f($r,$c-1)+f($r,$c-=2)+f($r-1,$c):1;}

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

পিএইচপি , 129 বাইট

সারি এবং কলাম 0-সূচিযুক্ত

for(;$r<=$argv[1];$l=$t[+$r++])for($c=~0;$c++<$r*2;)$t[+$r][$c]=$r|$c?$t[$r-2][$c-2]+$l[$c]+$l[$c-1]+$l[$c-2]:1;echo$l[$argv[2]];

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


এবং এটির উন্নতি করার জন্য +1 :)
ইউরিয়েল


3

এমএটিএল , 22 20 19 বাইট

Ti:"2Y6Y+FT_Y)]!i_)

উভয় ইনপুট 0-ভিত্তিক।

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

ব্যাখ্যা

যাক rএবং cদুটি ইনপুট যথাক্রমে উল্লেখ 0 ভিত্তিক সারি ও কলাম বোঝান।

পাস্কালের রম্বসের প্রতিটি নতুন সারি কার্নেলের সাথে মিশ্রিত করে [1 1 1; 0 1 0]এবং ফলাফলের শেষ দুটি সারিটি অদলবদল করে আগের দুটি সারি যুক্ত ম্যাট্রিক্স থেকে তৈরি করা যেতে পারে । এটি rম্যাট্রিক্স থেকে শুরু করে বার করা হয় 1

এটি কার্নেলটি ব্যবহার করার জন্য আরও সংক্ষিপ্ত হয়ে গেছে [0 1 0; 1 1 1; 0 1 0]যা পূর্বনির্ধারিত আক্ষরিক। এটি একটি অতিরিক্ত সারি তৈরি করে, যা বাতিল করা হবে।

উদাহরণস্বরূপ বিবেচনা করুন r = 3, তাই 3পুনরাবৃত্তি আছে।

  1. থেকে শুরু করে

    1
    

    [0 1 0; 1 1 1; 0 1 0]দেয় সঙ্গে সমঝোতা

    0 1 0
    1 1 1
    0 1 0
    

    শেষ দুটি সারি রাখা (পুরো ম্যাট্রিক্স, এক্ষেত্রে) এবং এগুলি অদলবদল দেয়

    0 1 0
    1 1 1
    
  2. [0 1 0; 1 1 1; 0 1 0]দেয় সঙ্গে উপরের ধারণা

    0 0 1 0 0
    0 1 1 1 0
    1 2 4 2 1
    0 1 1 1 0
    

    শেষ দুটি সারি দ্বারা পরিবর্তিত ম্যাট্রিক্স অদলবদল হয়

    0 1 1 1 0
    1 2 4 2 1
    

    এটিতে নীচে নতুন সারিটি রয়েছে এবং পূর্বেরটি শূন্যের সাথে প্রসারিত রয়েছে।

  3. পুনরায় কনভলভিং ফলন দেয়

    0 0 1 1 1 0 0
    0 1 2 3 2 1 0
    1 3 8 9 8 3 1
    0 1 2 4 2 1 0
    

    সর্বশেষ দুটি সারি গ্রহণ করে দেয়

    0 1 2 4 2 1 0
    1 3 8 9 8 3 1
    

rপুনরাবৃত্তি সম্পন্ন হওয়ার পরে , আউটপুটটি চূড়ান্ত ম্যাট্রিক্সের শেষ সারিতে থাকে। উদাহরণস্বরূপ, c = 2(0-ভিত্তিক) ফলাফল হবে 8। শেষ সারি এবং পছন্দসই কলামটি সূচী না করে, এমন কৌশল ব্যবহার করা যেতে পারে যা প্রতিটি সারির প্রতিসাম্যকে কাজে লাগায় : চূড়ান্ত ম্যাট্রিক্স স্থানান্তরিত হয়

0 1
1 3
2 8
4 9
2 8
1 3
0 1

এবং এর- -cতম উপাদানটি নেওয়া হয়। এই ব্যবহারের রৈখিক ইন্ডেক্স, যে ম্যাট্রিক্স একটি দ্বারা সূচিবদ্ধ একক সূচক মধ্যে কলাম-প্রধান অর্ডার। যেহেতু ইনডেক্সিং মডুলার , 0-তন্ত্রটি নিম্ন-ডান কোণার (মান 1) এবং -2তম -প্রবেশটি দুটি ধাপ উপরে (মান 8)।

T       % Push true
i       % Input row number
:"      % Do the following that many times
  2Y6   %   Push predefined literal [0 1 0; 1 1 1; 0 1 0]
  Y+    %   2D convolution, increasing size
  FT_   %   Push [0 -1]
  Y)    %   Matrix with rows 0 (last) and -1 (second-last), in that order
]       % End
!       % Transpose
i       % Input: colun number
_       % Negate
)       % Entry with that index. Implicitly display



2

গণিত, 56 বাইট

If[#<1,Boole[##==0],Sum[#0[#-i,#2-j],{i,2},{j,2i-2,2}]]&

খাঁটি ফাংশন দুটি পূর্ণসংখ্যার আর্গুমেন্ট গ্রহণ করে (প্রথম সারিতে, দ্বিতীয় কলামে) এবং পূর্ণসংখ্যা ফেরত দেয়। নেতিবাচক পূর্ণসংখ্যা আর্গুমেন্ট জন্য কাজ করে পাশাপাশি, ফেরার 0। একটি চমত্কার সোজা পুনরাবৃত্তি কাঠামো: If[#<1,Boole[##==0],...]0 তম সারির (এবং উপরে) জন্য বেস-কেস আচরণের Sum[#0[#-i,#2-j],{i,2},{j,2i-2,2}]সংজ্ঞা দেয় , যখন পুনরাবৃত্ত সংজ্ঞাটি কার্যকর করে।



1

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

f=(y,x)=>x<0|x>y+y?0:x>0&x<y+y?f(--y,x)+f(y,--x)+f(y,--x)+f(--y,x):1

1

গণিত, 53 বাইট

D[1/(1-x(1+y+y^2(1+x))),{x,#},{y,#2}]/#!/#2!/.x|y->0&

উত্পাদক ফাংশন ব্যবহার করে।


0

পাইথন 3 , 82 84 বাইট

এটি 1-ইনডেক্সেড সারি এবং কলামগুলির সাথে পুনরাবৃত্তিমূলক বাস্তবায়ন। (প্রযুক্তিগতভাবে f=সামনে সামনে দরকার, কেউ যদি আমাকে এটির 84 টি বাইটে পরিবর্তন করা উচিত তবে তা আমাকে জানান let এখনও নতুন এবং নিয়মের 100% নিশ্চিত নয়))

এটি OEIS পৃষ্ঠায় পাওয়া পুনরাবৃত্ত সূত্রটি ব্যবহার করে তবে kসঠিকভাবে রেখার জন্য বামদিকে স্থানান্তরিত করে। কাকতালীয়ভাবে, sum(f(n-1,k-i)for i in(0,1,2))একই আকার f(n-1,k)+f(n-1,k-1)+f(n-1,k-2)। পুরো ফাংশনটি পাইথন and orট্রিক, যেখানে প্রথম শর্তটি পরীক্ষা করে কে যদি ত্রিভুজের অভ্যন্তরে থাকে এবং সীমানায় না থাকে, সেক্ষেত্রে পুনরাবৃত্ত সূত্রটি ব্যবহৃত হয়। যদি না হয়, তাহলে পরে অংশ orফিরিয়ে দেওয়া হয়, যা চেক যদি kহয় (1, 2*n-1), সীমানা উপর অর্থাত, ফিরে Trueএবং Falsek+1in(2,2*n)এর চেয়ে এক বাইট ছোট k in(1,2*n-1)+এটিকে প্রথম বন্ধনীতে মোড়ানো এবং সামনে রাখলে পূর্ণসংখ্যায় রূপান্তর হয়, যা প্রয়োজন।

f=lambda n,k:2*n-1>k>1and sum(f(n-1,k-i)for i in(0,1,2))+f(n-2,k-2)or+(k+1in(2,2*n))

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


পুনরাবৃত্তি ফাংশন প্রয়োজন f=
গম উইজার্ড 0

আমি ব্যক্তিগতভাবে অনুযায়ী এটা সঙ্গে মতানৈক্য যদিও এই কিছুটা দাফন মেটা ঐক্যমত্য, আপনি আউটপুট may Trueপরিবর্তে 1কারণ এটি মত আচরণ 1পাইথন করতে। এটি আপনাকে +(...)শেষে অপসারণ করতে দেয় । আমি বুঝতে পারি আপনি এটি করতে না চাইলে, কারণ এটি আউটপুটটিকে কিছুটা অদ্ভুত দেখায়, এটি একটি বিকল্প।
গম উইজার্ড

@ হোয়াইট উইজার্ড বাহ এটি খুব আকর্ষণীয়। টিপ জন্য ধন্যবাদ.
সি ম্যাকাভয়

0

জাভা (ওপেনজেডিকে 8) , 87 বাইট

int f(int r,int c){return c<0|2*r<c?0:0<c&c<2*r?f(--r,c)+f(r,--c)+f(r,--c)+f(--r,c):1;}

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

প্রথমে, আমি আমার 160 বাইট পুনরুক্তি পদ্ধতিতে খুশি ছিলাম ... হুমমম ... আসুন আমরা এটির কথা ভুলে যাই, ঠিক আছে?


0

পাইথন 3 , 75 বাইট

এটি একটি পুনরাবৃত্ত লাম্বদা যা কলাম এবং সারি 0-সূচকযুক্ত পূর্ণসংখ্যার হিসাবে নেয়।

p=lambda r,c:(r<0 or((c==0)|p(r-1,c-2)+p(r-1,c)+p(r-1,c-1)+p(r-2,c-2))+1)-1

এখানে একটি মুদ্রণ ফাংশন সহ আরও পড়ারযোগ্য সংস্করণ রয়েছে:

p = lambda r,c:(r<0 or ((c==0) | p(r-1,c-2)+p(r-1,c)+p(r-1,c-1)+p(r-2,c-2))+1)-1

def pp(r):
    ml = len(str(p(r,r)))+1
    for i in range(0, r):
            a=" "*ml*(r-i)
            for j in range(0,i*2 + 1):
                    a+=str(p(i,j))+(" "*(ml-len(str(p(i,j)))))
            print(a)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.