পাস্কালের বিকল্প ত্রিভুজ


21

1প্রতিটি সারি ক্রমাগত সংযোজন থেকে শুরু করে এবং তৈরি করে প্যাসকের ত্রিভুজ তৈরি করা হয় । এখানে পরিবর্তে, আমরা গুণ এবং সংযোজন বিকল্প দ্বারা একটি ত্রিভুজ গঠন করতে যাচ্ছি।

আমরা 1স্রেফ নির্জনে সারি শুরু করি 1। এরপরে, বিজোড় সারিগুলিতে সংযোজন করা হয়, এবং এমনকি সারিগুলিতে গুণিত করা হয় (1-সূচকযুক্ত)। সংযোজন পদক্ষেপটি সম্পাদন করার সময়, ধরে নিন ত্রিভুজটির বাইরের ফাঁকা স্থানগুলি 0এস দ্বারা ভরাট । গুণনের পদক্ষেপটি সম্পাদন করার সময়, ধরে নিন যে বাইরেরটি 1এস দ্বারা ভরে গেছে ।

এখানে 7 টি সারি পূর্ণ ত্রিভুজ। *বা +বাম শো কি পদক্ষেপ যে সারি জেনারেট করতে সঞ্চালিত করা হয়।

1                1
2 *            1   1
3 +          1   2   1
4 *        1   2   2   1
5 +      1   3   4   3   1
6 *    1   3  12  12   3   1
7 +  1   4  15  24  15   4   1

চ্যালেঞ্জ

ইনপুট দেওয়া হয়েছে n, nএই ত্রিভুজটির তৃতীয় সারিতে আউটপুট দিন ।

বিধি

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

উদাহরণ

অনেকের মধ্যে আউটপুট সম্ভাব্য দুটি উদাহরণ দেখানো হচ্ছে: একটি তালিকা, বা একটি স্থান পৃথক স্ট্রিং।

4
[1, 2, 2, 1]

8
"1 4 60 360 360 60 4 1"

2
@totallyhuman না, stdout করার একমাত্র জিনিসটি হ'ল nতম সারিতে।
অ্যাডমবর্কবর্ক

উত্তর:


16

পাস্কাল , 249 247 233 বাইট

ঠিক আছে, এটি প্যাসকের বিকল্প ত্রিভুজ।

@ মিস্টার এক্সকোডারকে ধন্যবাদ 1 বাইট সংরক্ষিত

function f(n,k:integer):integer;begin if((k<1)or(k>n)or(n=1))then f:=n mod 2 else if n mod 2=0then f:=f(n-1,k-1)*f(n-1,k)else f:=f(n-1,k-1)+f(n-1,k)end;
procedure g(n:integer);var k:integer;begin for k:=1to n do write(f(n,k),' ')end;

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



7

পাইথন 2 , 97 93 86 81 78 বাইট

-4 বাইট রড ধন্যবাদ। -10 বাইট হ্যাভার্ড হামেলকে ধন্যবাদ।

f=lambda n:n and[[i+j,i*j][n%2]for i,j in zip([n%2]+f(n-1),f(n-1)+[n%2])]or[1]

0-ইন্ডেক্স।

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


1
ভাল কাজ, আমি একটি (অনেক) দীর্ঘ পদ্ধতির ছিল । যদিও আমি এখনও এটি গল্ফ করার সময় পাইনি।
মিঃ এক্সকোডার 14 ই

1
আমি অনুমান করি যে map([int.__add__ ,int.__mul__][i%2],[i%2]+a,a+[i%2])কাজ করা উচিত (পরীক্ষিত হয়নি)
রড


1
না, এটি পুনরুক্তিযোগ্য। আপনাকে অবশ্যই নামটি অন্তর্ভুক্ত করতে হবে।
মিঃ এক্সকোডার


5

জেলি , 17 12 বাইট

µ×+LḂ$?Ḋ1;µ¡

এটি একটি সম্পূর্ণ প্রোগ্রাম (বা নীলাদিক লিঙ্ক) যা এসটিডিআইএন থেকে ইনপুট নেয়।

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

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

µ×+LḂ$?Ḋ1;µ¡  Main link. No arguments. Implicit argument: 0

          µ¡  Start a monadic chain and apply the ntimes quick to the previous one.
              This reads an integer n from STDIN and executes the previous chain n
              times, with initial argument 0, returning the last result.
µ             Start a monadic chain. Argument: A (array or 0)
       Ḋ          Dequeue; yield A without its first element.
   LḂ$?           If the length of A is odd:
 ×                    Multiply A and dequeued A.
                  Else:
  +                   Add A and dequeued A.
        1;        Prepend a 1 to the result.

5

পাইথন 2 , 96 89 87 বাইট

s=a=[1]
for i in range(1,input()):a=s+[[k+l,k*l][i%2]for k,l in zip(a[1:],a)]+s
print a

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



@ টোটালিহুমান ধন্যবাদ .. আমি এটিকে আবার ঘুরিয়ে দিয়েছি ...
অফিসিয়ালাইম

1
হঠাৎ এক্সিকিউট পদ্ধতিটি নেতৃত্ব দিচ্ছে: ডি
ডেড পসসাম


3

সিজেম , 25 বাইট

{1a\{2%!_2$+\{.*}{.+}?}/}

0-ইন্ডেক্স।

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

ব্যাখ্যা

এটি একটি বেনামে ব্লক যা স্ট্যাক থেকে সংখ্যাটি নেয় এবং ফলাফলটি স্ট্যাকের উপরে ফেলে।

1a                        Push [1].
  \                       Bring the number to the top.
   {                 }/   For reach number 0 .. arg-1, do:
    2%!                    Push 0 if even, 1 if odd.
       _                   Copy that.
        2$+                Copy the list so far and prepend the 0 or 1 to it.
           \               Bring the 0 or 1 back to the top.
            {.*}{.+}?      If 1, element-wise multiplication. If 0, element-wise addition.

অপেক্ষা করতে 2%!হবে 1 এমনকি যদি 0 টি বিজোড় হয়, না?
15:58 '


3

হাস্কেল , 76 72 বাইট

0-সূচক সমাধান:

(p!!)
p=[1]:[zipWith o(e:l)l++[1]|(l,(o,e))<-zip p$cycle[((*),1),((+),0)]]

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

ব্যাখ্যা

p পুনরাবৃত্তভাবে বিকল্প ত্রিভুজটি সংজ্ঞায়িত করে, এর বেস কেস / এটির প্রথম উপাদান [1]

p=[1]:[                                                            ]

এরপরে এটি পূর্ববর্তী রেখাটি ( l) নিয়ে ত্রিভুজটি তৈরি করে । এটির সাথে কী করা যায় তা জানতে আমাদের সঠিক অপারেটর ( o) এবং সংশ্লিষ্ট নিরপেক্ষ উপাদান ( e) এর উপর নজর রাখতে হবে :

                           |(l,(o,e))<-zip p$cycle[((*),1),((+),0)]

এর থেকে লাইনটি সদৃশ করে নতুন লাইনটি তৈরি করুন এবং একটি অনুলিপিের জন্য আমরা নিরপেক্ষ উপাদানটিকে পুনরায় চাপিয়ে তুলি, অপারেটরের সাথে তাদের জিপ করব এবং একটি 1 যুক্ত করব:

       zipWith o(e:l)l++[1]

3

আর , 108 98 বাইট

-10 বাইটগুলি প্রকৃত গুণিত চিহ্নটি প্লাস চিহ্ন সহ প্রতিস্থাপন করে। অনুগ্রহ করে আমাকে ক্ষমা করবেন.

f=function(n){if(n<3)return(rep(1,n))else{v=f(n-1)};if(n%%2)`*`=`+`;return(c(1,v[3:n-2]*v[-1],1))}

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

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


85 বাইট । আমি আপনার সমাধানটি সত্যই ভালোবাসি `*`=`+`! বেশ চালাক আমার বাকি উন্নতিগুলি কেবলমাত্র গল্ফিং কৌশলগুলি, যা আপনার অনুরোধে আমি ব্যাখ্যা করতে পেরে আনন্দিত হব :)
জিউসেপে

80 বাইট । আমি হ্যান্ডলিং ক্ষেত্রে যেখানে সম্পর্কে আপনার নোট থেকে অনুপ্রেরণা গ্রহণn<3
: Giuseppe

2

হুশ , 17 16 বাইট

!G₅;1¢e*+
:1Sż⁰t

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

একটি 1 সূচকযুক্ত সমাধান।

ব্যাখ্যা

প্রথম লাইনটি মূল ফাংশন, যা দ্বিতীয় লাইনে সাহায্যকারী ফাংশন বলে। সাহায্যকারী ফাংশন সাধারণত সঙ্গে বলা হয় , কিন্তু এই ক্ষেত্রে আমি ব্যবহার করছি লেবেল সজল তুষ বৈশিষ্ট্য: আপনি একটি লাইন পড়ুন এন সঙ্গে একটি প্রোগ্রামে এম <n লাইন, আপনি লাইন পেতে এন গেলিক ভাষার এম পরিবর্তক ফাংশন / M এন এটি প্রয়োগ। দ্বিতীয় সংশোধক ফাংশনটি হ'ল flip, তাই আমি কোনও অতিরিক্ত বাইট ব্যয় ছাড়াই সহায়তাকারী ফাংশনের যুক্তিগুলি ফ্লিপ করতে ব্যবহার করছি ।

এখানে সহায়ক ফাংশন।

:1Sż⁰t  Takes a function f and a list x.
   ż    Zip preserving elements of longer list
    ⁰   using function f
  S  t  x and its tail,
:1      then prepend 1.

এখানে মূল কাজ।

!G₅;1¢e*+  Takes a number n.
      e*+  2-element list of the functions * and +
     ¢     repeated infinitely.
 G         Left scan this list
  ₅        using the flipped helper function
   ;1      with initial value [1].
!          Get n'th element.

2

সি # (.নেট কোর) , 143 134 128 বাইট

ফাইজে -4 বাইট ধন্যবাদ জ্যাক ফারা’র
-5 বাইট ধন্যবাদ কেভিন ক্রুইজসেনকে
ধন্যবাদ

n=>{int[]b={1},c;for(int i=0,j;++i<n;b=c)for(c=new int[i+1],c[0]=c[i]=1,j=0;++j<i;)c[j]=i%2<1?b[j-1]+b[j]:b[j-1]*b[j];return b;}

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

ব্যাখ্যা:

n =>
{
    int[] b = { 1 }, c;               // Create first layer
    for(int i = 0, j; ++i < n; b = c) // Iterate for every layer, replace last layer with a new one
        for(c = new int[i+1],         // Create new layer
            c[0] = c[i] = 1,          // First and last elements are always 1
            j = 0;
            ++j < i; )                // Replace every element (besides 1st and last)...
                c[j] = i % 2 == 0 ?
                    b[j - 1] + b[j] : // ... with addition...
                    b[j - 1] * b[j];  // ... or multiplication of two from previous layers
    return b;                         // Return latest layer
};

আপনার আপনার বি অ্যারের প্রারম্ভিককরণটি এতে পরিবর্তন করতে সক্ষম হওয়া উচিত এবং সংকলকটি আপনার var b=new[]{1};জন্য অ্যারের প্রকারটি নির্ধারণ করবে।
জাস্টিনএম - মনিকা

1
প্রথম স্তরটি নির্মাণের আরেকটি উপায় int[]b={1};হ'ল- 11 ফাইটের পরামর্শ অনুযায়ী 11 বাইট 20 বা 16 ফাইজের পরামর্শ অনুযায়ী
জ্যাক

1
@ জ্যাকফারাঘর এবং ফেজে আপনাকে ধন্যবাদ!
গ্রজেগোর্জ পুয়াওস্কি

1
আমি জানি এটা বেশ কিছুদিনের হয়েছে, কিন্তু আপনি গলফ 6 আরো বাইট যা করতে পারেন: n=>{int[]b={1},c;for(int i=0,j;++i<n;b=c)for(c=new int[i+1],c[0]=c[i]=1,j=0;++j<i;)c[j]=i%2<1?b[j-1]+b[j]:b[j-1]*b[j];return b;}। আমি cএই মত একত্রিত করেছি int[]b={1},c;; সংক্ষিপ্ত i%2==0করা i%2<1; এবং সমস্ত কিছু ভিতরে রেখে লুপের বন্ধনীগুলি সরিয়ে ফেলে।
কেভিন ক্রুইজসেন

গ্রেট! ধন্যবাদ @ কেভিন ক্রুইজসেন
গ্রজেগোর্জ পুয়াওস্কি


1

পাইথ , 22 বাইট

@ ফ্রাইআম দ্য এজিজিম্যানকে টন বাট সংরক্ষণ করেছেন ! প্রাথমিক সমাধানটি নীচে রয়েছে।

u++1@,+VGtG*VGtGlG1Q[1

পূর্ণ পরীক্ষার স্যুট (0-সূচকযুক্ত)।

পাইথ , 40 38 36 35 বাইট

এটি waaaaaaaay খুব যুক্তিসঙ্গত দীর্ঘ অনুভূত । পরামর্শ স্বাগত জানাই।

K]1VStQ=K++]1m@,sd*hded%N2C,KtK]1;K

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


হ্রাস ব্যবহার করা অনেক কম মনে হয় । আমি নিশ্চিত নই যে এটিও সর্বোত্তম, আমার মনে হয় সাব 20 টি পরিচালনাযোগ্য?
FryAmTheEggman

@ ফ্রাইআম দ্য এজম্যান আমার সংশোধন ইতিহাস দেখুন। আমি বলেছিলাম যে আমি হ্রাস সহ একটি কাজের সন্ধানের চেষ্টা করছি u(তবে এটি বুঝতে পারিনি)। ধন্যবাদ!
মিস্টার এক্সকোডার




1

গণিত, 70 বাইট

Fold[#2@@@Partition[#,2,1,{-1,1},{}]&,{1},PadRight[{},#,{1##&,Plus}]]&

ওল্ফ্রাম স্যান্ডবক্সে এটি ব্যবহার করে দেখুন ! দুর্ভাগ্যক্রমে ম্যাথিকসে এটি কাজ করে না। এটি 0-ইনডেক্সড।

ব্যাখ্যা: Partition[#,2,1,{-1,1},{}]একটি তালিকা নেয় এবং সমস্ত দ্বি-উপাদান সাবলিস্টগুলি ফেরত দেয়, এবং শুরু এবং শেষের জন্য 1-উপাদান তালিকা - যেমন, {1,2,3,4}হয়ে যায় {{1}, {1,2}, {2,3}, {3,4}, {4}}। (কার্যকরভাবে ) এবং যার দৈর্ঘ্য ইনপুট সংখ্যাটির PadRight[{},#,{1##&,Plus}]একটি বিকল্প তালিকা তৈরি করে । তারপরে বারবার ত্রিভুজের সারিগুলি তৈরি করার জন্য পার্টিশন ফাংশনটি এএস এবং এস প্রয়োগ করা হয়।1##&TimesPlusFoldPlusTimes




0

টিআই-বেসিক (টিআই -৪৮ প্লাস সিই), 100 বাইট

Prompt X
{1→M
For(A,2,X
LM→L
A→dim(M
For(B,2,A–1
If A/2=int(A/2
Then
LL(B–1)LL(B→LM(B
Else
LL(B–1)+LL(B→LM(B
End
End
1→LM(dim(LM
End
LM

1-ইনডেক্সড, ব্যবহারকারীকে ইনপুট দেওয়ার জন্য অনুরোধ জানায় এবং nপাস্কালের বিকল্প ত্রিভুজটির তম সারি যুক্ত একটি তালিকা মুদ্রণ করে ।

লুপিংয়ের সময়: এল এম বর্তমান সারি এবং এল এল পূর্ববর্তী সারি।

টিআই-বেসিক একটি টোকেনাইজড ভাষা । এখানে ব্যবহৃত সমস্ত টোকেনগুলি এক-বাইট টোকেন।

আমি মনে করি আমি শেষ থেকে এম ইন-প্লেসে পরিবর্তন করে আরও গল্ফ করতে পারি।

ব্যাখ্যা:

Prompt X            # 3 bytes; get user input, store in X
{1→M                # 5 bytes, store the first row into LM
For(A,2,X           # 7 bytes, Loop X-1 times, with A as the counter, starting at 2
LM→L                # 5 bytes, copy list M into list L
A→dim(M             # 5 bytes, extend M by one
For(B,2,A–1         # 9 bytes, for each index B that isn't the first or last...
If A/2=int(A/2      # 10 bytes,    if A is even...
Then                # 2 bytes,     then...
LL(B–1)LL(B→LM(B     # 17 bytes,        the Bth item in this row is the Bth times the (B-1)th of the previous row
Else                # 2 bytes,     else...
LL(B–1)+LL(B→LM(B    # 18 bytes,        the Bth item in this row is the Bth plus the (B-1)th of the previous row
End                 # 2 bytes,     endif
End                 # 2 bytes,  endfor
1→LM(dim(LM         # 9 bytes, the last item is always 1
End                 # 2 bytes, endfor
LM                  # 2 bytes, Implicitly print the final row


0

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

f=n=>n?(p=f(n-1),[...p.map((v,i)=>i--?n%2?v*p[i]:v+p[i]:1),1]):[1]

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

0-ইন্ডেক্স। @ আর্নল্ড দ্বারা
-3 বাইট

f=n=>n?(p=f(n-1),[...p.map((v,i)=>i--?n%2?v*p[i]:v+p[i]:1),1]):[1]

for (var i = 0; i < 10; ++i) {
  console.log(JSON.stringify(f(i)));
}


1
টার্নারি ব্যবহার করে 3 টি বাইট সংরক্ষণ করা উচিত:i--?n%2?v*p[i]:v+p[i]
আরনল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.