গাণিতিক সংমিশ্রণ


11

এমন একটি প্রোগ্রাম লিখুন যা কোনও ইনপুট নেয় যেমন:

n,k

যা তখন গণনা:

N এবং k এর সংমিশ্রণ।  (সি (এন, কে))

এবং তারপরে ফলাফলটি মুদ্রণ করে।


একটি সংখ্যার উদাহরণ:

ইনপুট:

5,2

অভ্যন্তরীণ গণনা:

(5!) / (3! X2!)

মুদ্রিত আউটপুট:

10

আমি এমন একটি উত্তর দেখতে চাই যা আমার 65৫ টি চরিত্রের অজগর সমাধানকে মারধর করে তবে সমস্ত ভাষা অবশ্যই স্বাগত।

এখানে আমার সমাধান:

n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k))

সম্পাদনা:

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

ভাষা অনুসারে বর্তমান সর্বনিম্ন চরিত্র গণনা করা হয়:

পার্ল: 35

রুবি: 36

পাইথন: 39

পিএইচপি: 62


ফাংশন বা পুরো প্রোগ্রাম? আপনার বিবরণটি এমন ফাংশন বলে যা সঠিক ফলাফলটি দেয়, তবে আপনার উদাহরণটি এমন একটি সম্পূর্ণ প্রোগ্রাম যা এটি মুদ্রণ করে।
ভেন্টোরো

@ ভেন্তোর আপনি ঠিক বলেছেন আমি প্রোগ্রাম বলতে চাইছি। এর জন্যে দুঃখিত.
পিছনে

3
সাধারণত, মৌলিক গণিত ধারণাগুলি দুর্দান্ত গল্ফ প্রশ্ন নয় কারণ জে, এপিএল, ম্যাপেল, ম্যাথমেটিকা ​​এবং আরও অনেকগুলি সেগুলি তৈরি করে দেবে Also এছাড়াও, ইনপুট এবং আউটপুট ফর্ম্যাট সম্পর্কে আরও কিছুটা নির্দিষ্ট হতে হবে এবং উদাহরণস্বরূপ ফলাফল সরবরাহ করতে পারে - আমি পারব না এখানে আপনার 5 বা 2 বেছে বেছে বেছে বেছে 5 বেছে নেওয়ার কথা বলুন।
জেসি মিলিকান

@ জেসি আমি অন্য ওয়েবসাইট থেকে এই চ্যালেঞ্জটি পেয়েছি যা কেবলমাত্র প্রধান স্ক্রিপ্টিং ভাষাগুলির অনুমতি দেয়, আমি ভবিষ্যতে এই গাইডলাইনটি মনে রাখব। আমি চ্যালেঞ্জের প্রয়োজনীয়তা আরও স্পষ্ট করার চেষ্টা করার জন্য আমার প্রশ্নটি সম্পাদনা করেছি, এটি যথেষ্ট পরিষ্কার কিনা তা আমাকে জানান let
ব্যাকাস

আমি নতুন, সুতরাং আমরা অনেক একই নৌকোতে এসেছি। তবে, ফলাফলগুলির সংক্ষিপ্তসার করবেন না; তারা শুধু পুরানো হবে। কেবল ভোট দিন এবং (উপযুক্ত হলে) উত্তরগুলি গ্রহণ করুন। (এছাড়াও, আপনি যদি কোনও কারণ ছাড়াই জে এবং গল্ফস্ক্রিপ্টের উত্তরগুলি উপেক্ষা করেন তবে আপনি লোককে অসন্তুষ্ট করবেন))
জেসি মিলিকান

উত্তর:


11

এপিএল, 3 বাইট

⎕!⎕

বা যাদের ব্রাউজার উপরের রেন্ডার করে না তাদের জন্য একটি এসকিআইআই রেন্ডারিং:

{Quad}!{Quad}

3
ইনপুটটিতে সম্পূর্ণরূপে সামঞ্জস্য হতে n,kআপনাকে করতে হবে !/⌽⎕
মেরিনাস


10

সি 96

I / O সহ (এতে প্রায় 34 টি অক্ষর লাগে)। এটি পঠনযোগ্য করে তুলতে বেশ কয়েকটি নিউলাইন যুক্ত করেছে।

main(a,b,c,d){scanf("%d,%d",&a,&b);
d=a-b;for(c=1;a>b;){c*=a--;}for(;d;)
{c/=d--;}printf("%d",c);}

এখন আপনি যদি আমাকে ক্ষমা করবেন, আমার কাছে একটি এসকিআই আছে এন ধরার জন্য কে রকেট চয়ন করুন।

    d;main(a
   ,         b
  ,           c
 )  int        a
 ;   {scanf    (
 (   "%d %d"   )
 ,   &a,  &b   )
 ;   d    =a   -
 b   +     b   -
 b   *     1   ;
 a             -
 a  ;for    (  c
 =  1;a>   b   ;
 )  {c=   c    *
 (  (a-- )     )
 ;  }for(      b
 =  b + 1      ;
 d  ;    )     {
 c  =     c    /
 (  d--    )   ;
  }           {
  }           {
   }         (
  printf("%d",c)
 )      ;       }
/*     *  *   * *\
 * * X   * 8 * * |
|     *      *    \
*/    //       *  */

7

গল্ফস্ক্রিপ্ট, 17 টি অক্ষর

এই সমাধানটি কে = 0 বা কে = 1 এর মতো কেসগুলি সঠিকভাবে পরিচালনা করে।

~>.,,]{1\{)*}/}//

কারখানার মতো অংশটি পূর্ববর্তী উত্তরের ভিত্তিতে তৈরি ।


6

গল্ফস্ক্রিপ্ট 21

~~)>.,,]{{)}%{*}*}%~/

বিশেষভাবে সংক্ষিপ্ত নয়, গল্ফস্ক্রিপ্টে সত্যিকারের কল্পিত কার্যকারিতা নেই, তবে এটি আমার মধ্যে সবচেয়ে দুষ্ট ডেটা ম্যানিপুলেশন হতে পারে, এটি স্ট্যাক ট্রেসের জন্য আহ্বান জানিয়েছে:

ইনপুট থেকে স্ট্যাকের "5,2" ডেটা।
~ইভাল কমান্ড, উল্লেখ্য যে, এমন একটি অপারেটর যা একটি সংখ্যাকে অ্যারেতে পরিণত করে।
[0 1 2 3 4] 2
~বাইনারি নয়।
[0 1 2 3 4] -3
)বৃদ্ধি।
[0 1 2 3 4] -2
>অ্যারে শেষ করুন, -2 সর্বশেষ 2 উপাদান পেতে প্যারামিটার হিসাবে।
[3 4]
.সদৃশ উপাদান।
[3 4] [3 4]
,অ্যারের দৈর্ঘ্য।
[3 4]
,অ্যারেতে 2 টি নম্বর ঘুরুন।
[3 4] [0 1]
]অ্যারে তৈরি করুন।
[[3 4] [0 1]]
{{)}%{*}*}কোড অবরুদ্ধ।
[[3 4] [0 1]] {{)}% {*} *}
%অ্যারের প্রতিটি উপাদানগুলির জন্য একবার ব্লক কার্যকর করুন। নিম্নলিখিত অংশটি কেবল প্রথম লুপটি দেখায়।
[3 4]
{)}%প্রতিটি অ্যারের উপাদান বৃদ্ধি করুন।
[4 5]
{*}একটি গুণিত কমান্ড ধারণকারী ব্লক।
[4 5]
*command *} ব্লক কমান্ড ব্যবহার করে অ্যারেটিকে "ভাঁজ করুন", এই ক্ষেত্রে এটি সমস্ত উপাদানের পণ্য তৈরি করে।
20
বড় লুপটি শেষ হওয়ার পরে এটি ফলাফলগুলি সহ একটি অ্যারে প্রদান করে।
[20 2]
~অ্যারে ডিকনস্ট্রাক্ট করুন।
20 2
/বিভাগ।
10


6

রুবি ১.৯, 52 46 (42) টি অক্ষর

eval"A,B="+gets;i=0;p eval"(A-B+i+=1)/i*"*B+?1

স্ট্যাডারকে যদি উপেক্ষা করা হয়:

eval"A,B=I="+gets;p eval"I/(A-I-=1)*"*B+?1

রুবি ১.৮, ৪৩ টি অক্ষর, স্টডারারের অতিরিক্ত আউটপুট নেই:

eval"a,b=i="+gets;p eval"i/(a-i-=1)*"*b+"1"

সম্পাদনা:

  • (52 -> 48) ইনপুট পার্স করার একটি ছোট্ট উপায় খুঁজে পেয়েছে
  • (48 -> 46) কম লুপিং, আরও .ভাল।

4

পাইথন (56)

f=lambda n,k:k<1and 1or f(n-1,k-1)*n/k;print f(*input())

দ্বিপদী সহগের গণনা করার জন্য অবহেলিত কোড এবং একটি শর্টকাটের কিছু ব্যাখ্যা। (দ্রষ্টব্য: এখানে কিছু অন্তর্দৃষ্টি রয়েছে যে 39 টি চর সংস্করণে নামার জন্য আমি ঠিক বুঝতে পারি নি; এই পন্থাটি আপনাকে সেখানে পেয়ে যাবে বলে আমি মনে করি না।)

# Since choose(n,k) =
#
#     n!/((n-k)!k!)
#
#          [n(n-1)...(n-k+1)][(n-k)...(1)]
#        = -------------------------------
#            [(n-k)...(1)][k(k-1)...(1)]
#
# We can cancel the terms:
#
#     [(n-k)...(1)]
#
# as they appear both on top and bottom, leaving:
#
#    n (n-1)     (n-k+1)
#    - ----- ... -------
#    k (k-1)       (1)
#
# which we might write as:
#
#      choose(n,k) = 1,                      if k = 0
#                  = (n/k)*choose(n-1, k-1), otherwise
#
def choose(n,k):
    if k < 1:
        return 1
    else:
        return choose(n-1, k-1) * n/k

# input() evaluates the string it reads from stdin, so "5,2" becomes
# (5,2) with no further action required on our part.
#
# In the golfed version, we make use of the `*` unpacking operator, 
# to unpack the tuple returned by input() directly into the arguments
# of f(), without the need for intermediate variables n, k at all.
#
n, k = input()

# This line is left as an exercise to the reader.
print choose(n, k)

আপনি কি আপনার স্ক্রিপ্টের একটি নিরবচ্ছিন্ন উদাহরণ সরবরাহ করতে পারেন?
পিছনে

আমরা কি *ফর্মের ইনপুটগুলি পার্সিংয়ের জন্য ব্যবহার করতে পারি 4545 78?
কুইসোটিক

দুর্ভাগ্যক্রমে, না, তবে এটি *সমস্যা নয়। 4545 78একটি বৈধ পাইথন এক্সপ্রেশন নয়, তাই input()একটি উত্থাপন করা হবে SyntaxError। এই কৌশলটি সম্পূর্ণরূপে জিজ্ঞাসা করা সমস্যার উপর নির্ভর করে x,y। আপনার যদি এমন কোনও ফাংশন থাকে যা x yএকটি টিউপল পড়ে এবং ফেরত দেয় তবে আপনি *কেবল এটি সূক্ষ্ম ব্যবহার করতে পারেন ।



3

জে, 33 36

(":!~/".;._1}:toJ',',1!:1(3))1!:2(4)

35 টি অক্ষর হ'ল ইনপুট, পার্সিং এবং আউটপুট। অন্য চরিত্রটি !হ'ল এন কে কে বেছে নিন।

এই মুহুর্তে এটি পরীক্ষার জন্য আমার কাছে উইন্ডোজ নেই তবে আমি বিশ্বাস করি এটি সেখানে কাজ করা উচিত।




2

আরপিএল (22)

(অন্তর্নির্মিত COMB ফাংশন ব্যবহার না করা)

→ n k 'n!/(k!*(n-k)!)'

2

প্রশ্ন ( 50 45)

 f:{(prd 1.+til x)%((prd 1.+til y)*prd 1.+til x-y)}

অপ্রয়োজনীয় বন্ধনীগুলি মুছে ফেলে এবং প্রেডি পরিবর্তে 1 * / ব্যবহার করে আপনি উপরের কয়েকটি অক্ষর শেভ করতে পারেন।

f:{(1*/1.+til x)%(1*/1.+til y)*1*/1.+til x-y}

2

গণিত 12

সোজা, অন্তর্নির্মিত ফাংশন।

n~Binomial~k

2

পার্ল 6 , 25 16 বাইট

-9 বাইটস nwellnhof ধন্যবাদ

+*o&combinations

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

বেনামে ফাংশন যা দুটি সংখ্যা নেয় এবং একটি পূর্বাবস্থায় ফেরত দেয়। এটি অন্তর্নির্মিত ব্যবহার করে combinationsএবং প্রত্যাবর্তিত তালিকাকে একটি ইনটে রূপান্তর করে।



@ ননহ্নহোফ আহ, আমি বুঝতে combinationsপারিনি যে তালিকার পরিবর্তে একটি সংখ্যা নিতে পারে
জো কিং

1

পিএইচপি (71 79 )

<?$a=fgetcsv(STDIN);$x=1;while($a[1]-$i)$x=$x*($a[0]-++$i+1)/$i;echo$x;

<?php $a=fgetcsv(STDIN);$x=1;while(++$i<=$a[1])$x=$x*($a[0]-$i+1)/$i;echo $x?>


1

পাইথন (54)

f=lambda n,k:k<1or f(n-1,k-1)*n/k;print 1*f(*input())

মূলত উপরের পাইথনের একের মতোই, তবে আমি বাদ দিয়ে চারটি বাইট ছাঁটাই করি

and 1

ফাংশন সংজ্ঞা থেকে। যাইহোক, এর ফলে 1 এর পরিবর্তে 1 = k = 0 এর পরিবর্তে ফাংশনটি সত্য হয়, তবে 1 * ট্রু = 1 থেকে মুদ্রণের আগে 1 দিয়ে গুণ করে এটি ঠিক করা যায়, এভাবে দুটি বাইট যুক্ত করে।



0

হাস্কেল (৮০)

f(_,0)=1
f(n,k)=n/k*f(n-1,k-1)
main=getLine>>=putStr.show.f.read.(++")").('(':)

তবে, যদি বিন্যাসের x yপরিবর্তে বিন্যাসে ইনপুটটির অনুমতি দেওয়া হয় তবে x,yএটি 74৪ টি অক্ষর:

f[_,0]=1
f[n,k]=n/k*f[n-1,k-1]
main=interact$show.f.map read.take 2.words


0

পাইথন (52)

 f=lambda n,k:k<1or f(n-1,k-1)*n/k;print+f(*input())

ব্যবহার করে অন্য দুটি থেকে উন্নত print+ফল রূপান্তর করতে fথেকে booleanথেকে intক্ষেত্রে k==0

39 এ কীভাবে সঙ্কুচিত করবেন তার এখনও ধারণা নেই, আমি ভাবছি তারা লাম্বদা আদৌ ব্যবহার করছে কিনা are


0

(ওপি কেবল আলগাভাবে ইনপুট এবং আউটপুট পদ্ধতি / ফর্ম্যাটটি নির্দিষ্ট করেছে, সুতরাং নিম্নলিখিতটি গ্রহণযোগ্য বলে মনে হয়))

সেজ নোটবুক ( 39 41 40)

বর্তমান কক্ষে,

f=lambda n,k:k<1or f(n-1,k-1)*n/k;+f(*_)

যেখানে ফর্মের ইনপুটটি n,kপূর্ববর্তী কক্ষে প্রবেশ করা ও মূল্যায়ন করা হয়। এটি "কমান্ড-লাইন ইনপুট" সীমাবদ্ধ করে _(কমান্ড-লাইন আর্গুমেন্টের অনুরূপ)।

সেজ নোটবুক ( 42 44 43)

বিকল্পভাবে, "ইন-সোর্স ইনপুট" ( x=স্কোরটিতে কেবলমাত্র এবং নতুন লাইন অক্ষর যুক্ত) ব্যবহার করে, উদাহরণস্বরূপ,

x=5,2
f=lambda n,k:k<1or f(n-1,k-1)*n/k;+f(*x)

এই উভয় পন্থা অন্যদের পূর্বের উত্তর থেকে স্পষ্টতই স্পিন-অফস।



0

জাভাস্ক্রিপ্ট, 27 বাইট

প্রথমে আমার নিজের 35 বাইট সমাধান:

f=(n,k)=>n-k&&k?f(--n,k)+f(n,k-1):1

অথবা, বিকল্পভাবে,

f=(n,k,i=k)=>i?f(n-1,k-1,i-1)*n/k:1

সরল (n,k) = (n-1,k) + (n-1,k-1)নিয়ম সহ প্রথম পুনরাবৃত্তির সাথে কাজ করা । দ্বিতীয় যে ব্যবহার করে (n,k) = (n-1,k-1) * n/k

সম্পাদনা

আমি কেবল এর একটি সদৃশটিতে আর্নল্ডের সমাধানটি লক্ষ্য করেছি:

f=(n,k)=>k?n*f(n-1,k-1)/k:1

কোনটি মোট 8 বাইট কম (27 বাইট)


0

টিআই-বেসিক, 16 টি অক্ষর (8 বাইট)

Ans(1) nCr Ans(2

ইনপুট 2 দৈর্ঘ্যের দৈর্ঘ্যের একটি তালিকা Ans
আউটপুট এখানে সংজ্ঞায়িত সূত্র ফলাফল ।

যদি উপরের সমাধানটি যথেষ্ট না হয় তবে নিম্নলিখিত 35 অক্ষর (24 বাইট) সমাধানটিও কাজ করে:

Ans(2)!⁻¹(Ans(1)-Ans(2))!⁻¹Ans(1)!

দ্রষ্টব্য: টিআই-বেসিক একটি টোকেনাইজড ভাষা। অক্ষর গণনা বাইট গণনা সমান হয় না

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