আপনার কোড পুনরায় ব্যবহার করুন!


23

এই চ্যালেঞ্জে আমরা দুটি গুরুত্বপূর্ণ সমস্যা একবারে সমাধান করার চেষ্টা করি। তারা হ'ল:

  1. পূর্ণসংখ্যা a এবং b দেওয়া , একটি -1 একটি মৌলিক সংখ্যা কিনা তা বলুন ।
  2. পূর্ণসংখ্যা a এবং b দেওয়া , এনসিআর (a, খ) রিটার্ন করুন ।

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

স্কোরিং

একটি উত্তরের স্কোর দুটি প্রোগ্রামের মধ্যে লেভেনস্টাইন দূরত্ব। লো স্কোর আরও ভাল। কোনও টাইয়ের ক্ষেত্রে, দুটি প্রোগ্রামের সংক্ষিপ্ত সংযুক্ত কোডের সাথে উত্তর জিতল। আপনি এই স্ক্রিপ্টটি ব্যবহার করতে পারেনআপনার সমাধানের স্কোর গণনা ।

বিধি

  1. আপনাকে একই ভাষায় দুটি প্রোগ্রাম লিখতে হবে যা উপরে বর্ণিত কার্যগুলি সমাধান করবে। আপনি যে কোনও আই / ও পদ্ধতি ব্যবহার করতে পারেন। কার্য 1 এর জন্য, আপনি সত্যবাদী / মিথ্যা মানটি ফিরিয়ে দিতে পারেন বা সত্য এবং মিথ্যা বলতে দুটি মান বেছে নিতে পারেন এবং সে অনুযায়ী তাদের ফিরিয়ে দিতে পারেন। যেমন। আপনি "prime"সত্য এবং এর অর্থ চয়ন করতে পারেন"not prime" অর্থ মিথ্যা ।
  2. আপনি যে অ্যালগরিদমগুলি ব্যবহার করেন তা অবশ্যই সমস্ত সম্ভাব্য ইনপুটগুলির জন্য কাজ করা উচিত তবে ব্যবহৃত সংখ্যার ধরণের সীমাবদ্ধতার কারণে কোডটি যদি বৃহত সংখ্যায় ব্যর্থ হয় তবে তা ঠিক। আপনি ধরে নিতে পারেন যে ইনপুটটি বৈধ is
  3. প্রোগ্রামের কোনও উপসেট অবশ্যই সমস্যার সমাধান করতে হবে না, যেমন। কোনও অক্ষর (গুলি) সরানো থাকলে কোড অবশ্যই কাজ করবে না। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি বৈধ নয়, কারণ প্রোগ্রামটি ভঙ্গ না করে অব্যবহৃত অন্য-ব্লকটি সরিয়ে ফেলা সম্ভব:

    if (1) { /* change to 0 to get the second program*/
        ...
    } else {
        ...
    }
    
  4. স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

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

একটি -1 প্রধান?

a b
1 1 false
2 3 true
5 2 false
2 5 true
4 3 false
2 7 true

nCr

a b nCr(a,b)
1 1 1
5 2 10
4 3 4
10 7 120
12 5 792

1
এই Levenshtein দূরত্ব গনা কুশলী হতে পারে
লুইস Mendo

3
ধারণাটি দুর্দান্ত, তবে আমি মনে করি আপনি এখনও লেভেনস্টেইন দূরত্ব 1 এর সাথে সমাধান পাবেন যা অব্যক্ত অংশগুলিতে এক বা অন্য কোনও উপায়ে পরিবর্তন রোধ করতে সক্ষম হয় এবং তারপরে কার্যকরভাবে আপনি যে কাঠামোটিকে নিষিদ্ধ করতে চান তাতে কার্যকর ফল পাবেন।
মার্টিন এন্ডার

6
@ লুইসমেন্দো বিষয়টি হ'ল এই সমাধানগুলির মধ্যে অনেকগুলিই ধীর। পরিবর্তে আপনি এই ম্যাথিক্স স্ক্রিপ্টটি ব্যবহার করতে পারেন।
মার্টিন ইন্ডার

3
আমি মনে করি একটি ভাল মেট্রিক দুটি প্রোগ্রামের মোট দৈর্ঘ্য দ্বারা বিভক্ত লেভেনস্টাইন দূরত্ব ছিল।
গ্রেগ মার্টিন 21

1
@ গ্রেগমার্টিন এর ফলে কোড বোলিংয়ের ফলাফল হবে না? কৃত্রিমভাবে প্রোগ্রামগুলি আরও বড় করা সম্ভব এবং এখনও দাবি করা যায় যে তাদের কোনও অপ্রয়োজনীয় কোড নেই।
ফার্গুসক

উত্তর:



7

পিএইচপি, দূরত্ব 29

a^b-1 সত্যের জন্য 0 এবং যে কোনও পূর্ণসংখ্যার মান> 0 প্রিন্ট করে

[,$a,$b]=$argv;for($c=-$i=1;$i<=$d=$a**$b-1;$d%++$i?:$c++);echo$c;

nCr(a,b)

[,$a,$b]=$argv;for($c=$i=1;$i<=$a;$c*=$i**(1-($i<=$a-$b)-($i<=$b)),$i++);echo$c;

পিএইচপি, দূরত্ব 36

a^b-1 মিথ্যা জন্য সত্য কিছুই জন্য 1 মুদ্রণ

[,$a,$b]=$argv;for($c=-1,$i=1;$i<=$d=-1+$a**$b;)$d%++$i?:$c++;echo$c<1;

nCr(a,b)

[,$a,$b]=$argv;for($c=$d=$i=1;$i<=$a;$c*=$i++)$d*=$i**(($i<=$a-$b)+($i<=$b));echo$c/$d;

7

রুবি, দূরত্ব 1, সংযুক্ত দৈর্ঘ্য 194

প্রধান চেক:

->a,b{s='[(a**b-1).prime?,(1..b).inject(1){|m,i|(a+1-i)/i*m}][0]';require'math'<<s.size*2;eval s}

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

nCr:

->a,b{s='[(a**b-1).prime?,(1..b).inject(1){|m,i|(a+1-i)/i*m}][1]';require'math'<<s.size*2;eval s}

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

মন্তব্যে পূর্বাভাস অনুসারে, কিছু বিড়ম্বনা সবসময় সমস্যার চেতনার বিরুদ্ধে যেতে হয়। এটি চারপাশে কাজ করার উপায় খুঁজে মজা ছিল, যদিও! এটি কীভাবে কাজ করে তা এখানে: আমাদের কাছে সমস্যার দুটি পৃথক সমাধান রয়েছে। আমরা উভয়ই চালাই, তাদের একটি অ্যারেতে রেখেছি এবং তারপরে 1 এর সম্পাদনার দূরত্বের জন্য 0 তম উপাদান বা 1 ম পছন্দ করুন এটি সাধারণভাবে অবৈধ হবে, যেহেতু আপনি যে গণনাটি চেয়েছিলেন কেবল এটিই মুছতে পারেন এবং এটি এখনও কার্যকর হবে । তবে, প্রতিটি কোড স্নিপেট একই স্ট্যান্ডার্ড লাইব্রেরি লোড উপর নির্ভর করতে লেখা হয় 'mathn':

  • প্রথমটি তার বিল্টিন ব্যবহার করে prime?
  • দ্বিতীয়টি mathnবিভাগ কীভাবে কাজ করে তা পরিবর্তনের উপর নির্ভর করে - এটি লোড করার আগে এটির 3/4মূল্যায়ন করে 0, পরে এটি ভগ্নাংশের জন্য মূল্যায়ন করে (3/4)। যেহেতু মধ্যবর্তী ফলাফল (a+1-i)/iসর্বদা সম্পূর্ণ সংখ্যা হয় না, সামগ্রিক ফলাফল লাইব্রেরি ছাড়া ভুল।

এখন আমাদের কেবল বাকী কোডটি অপরিশোধিত অবস্থায় লাইব্রেরি কনজিস্টেন্ট লোড করা দরকার। আমরা বাকি মূল কোডের অক্ষরের দৈর্ঘ্য ব্যবহার করে নাম ম্যাথন তৈরি করে এটি করি: সম্মিলিত গণনার দৈর্ঘ্য 55, যা দ্বিগুণ হয়ে 110 'এন' এর ASCII মান। সুতরাং স্ট্রিং 'গণিত' এ এটি যুক্ত করে কাঙ্ক্ষিত লাইব্রেরি দেয়।

বোনাস হিসাবে, লাইব্রেরি নির্ভরতা প্রবর্তন কোডটি একটি যুক্তিসঙ্গত সময়ে চালিত করে তোলে। বিশেষত, এনসিআর-এর নিরপেক্ষ দৃষ্টিভঙ্গি ভগ্নাংশ মধ্যবর্তী ফলাফল তৈরি করতে পারে না।



4

সজ্জিত , দূরত্ব 13

[([@.!]$/{%y!x y-!*})fork!]
[^#-:([]1/$%{!n 1-!})fork!=]

এটি অনলাইন চেষ্টা করুন! উইলসনের উপপাদ্যটি ব্যবহার করে প্রথম এনসিআর, দ্বিতীয় প্রাথমিকতা গণনা করে।

(f g h) fork!Nস্ট্যাক থেকে আরোগুলি পপ করে (তাদের কল করুন a0 ... aN) এবং প্রয়োগ হয় a0 ... aN f a0 ... aN h g

প্রথম প্রোগ্রামের জন্য:

[([@.!]$/{%y!x y-!*})fork!]
[(                  )fork!]  apply the fork of:
  [@.!]                      equiv. { x y : x ! } => `x!`
       $/                    divided by
         {%        }         two-arg function
           y!                y!
             x y-                 (x - y)!
                 *              *

এবং দ্বিতীয় জন্য:

[^#-:([]1/$%{!n 1-!})fork!=]  
[^                         ]  exponentiate  (a^b)
  #-                          decrement     (a^b-1)
    :                         duplicate     (a^b-1 a^b-1)
     (              )fork!    apply the fork to:
      []1/                    1-arg identity function
          $%                  modulus by
            {!     }          1-arg with `n`:
              n 1-             (n-1)
                  !                 !
                          =   check for equality


3

গণিত, দূরত্ব 10

কার্যক্রম 1: PrimeQ[#2^#-1]&

কার্য 2: Binomial[#2,#]&

উভয় ফাংশন ক্রমে ইনপুট গ্রহণ করে b,a


3

জাভাস্ক্রিপ্ট ES7, দূরত্ব 14

C দ্বারা দূরত্ব হ্রাস করার জন্য @ কনার ও ব্রায়েনকে ধন্যবাদ

Primality:

f=x=>y=>{t=x**y-1;s=1;for(i=2;i<t;i++){if(!t%i)s=i-i}return s}

প্রাইম না হলে প্রাইম 0 হলে 1 প্রদান করে।

অবিশ্বাস্যভাবে অদক্ষ প্রাইম চেক, প্রতিটি সংখ্যার চেয়ে কম ছোট এবং 1 টিরও বেশি ...

nCr:

f=x=>y=>{t=x+1;s=1;for(i=1;i<t;i++){if(y<i)s*=i/(i-y)}return s}

Y + 1 থেকে x পর্যন্ত প্রতিটি সংখ্যার 1 দ্বারা গুণিত করে এবং প্রতিটি সংখ্যা 1 থেকে xy (x! / Y!) / (Xy) দিয়ে বিভক্ত হয়!


f=x=>y=>{t=x+1;s=1;for(i=1;i<t;i++){if(y<i)s*=i/(i-y)}return s}সম্পাদনা দূরত্ব 14 দিতে দ্বিতীয় প্রোগ্রাম পরিবর্তন করা it অনলাইনে চেষ্টা করুন!
কনর ও'ব্রায়ান

2

অষ্টাভ, দূরত্ব 17 16 15

nCr

a=input("");b=input("");f=@(x)factorial(x);printf("%d",f(a)/f(b)/f(a-b))

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

isprime(a^b-1)

a=input("");b=input("");f=@(x)isprime(x);printf("%d",f(a^b-f(8-6)))

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

অষ্টাভে আমি খুব সাবলীল নই, তাই এনসিআর গণনা করার জন্য বিল্টিন আছে কিনা তা আমি জানি না।


1

এমএটিএল , দূরত্ব 4, দৈর্ঘ্য 6

a^b-1প্রধান কিনা তা বলুন :

^qZq

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

গণনা nCr(a,b):

Xn

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

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

a^b-1প্রধান কিনা তা বলুন :

^      % Power with implicit inputs
q      % Subtract 1
Zq     % Is prime? Implicit display

গণনা nCr(a,b):

Xn     % nchoosek with implicit inputs. Implicit display


1

পিএইচপি, দূরত্ব 14

দুটি ফাংশন সহ একটি প্রোগ্রাম লিখতে এবং সেগুলির মধ্যে কেবল একটির কল করলে 1 এর দূরত্ব বাড়ে তবে এটি খুব লম্পট হবে না।

প্রাইম টেস্ট, 100 বাইট:

[,$a,$b]=$argv;function f($n){for($i=$n;--$i>0&&$n%$i;);return$i==1;}echo f($a**$b*-1)*(1|f($a-$b));

এনসিআর, 98 বাইট:

[,$a,$b]=$argv;function f($n){for($i=$n;--$i>0&&$n*=$i;);return$n*=1;}echo f($a)/(f($b)*f($a-$b));


0

জাভাস্ক্রিপ্ট, স্কোর: 1, দৈর্ঘ্য: 144 142 126 117

function(a,b){s="a=Math.pow(a,b)-t;for(b=2;a%b++;);b>a1for(;b;)t=t*a--/b--";t=s.length-56;return eval(s.split(1)[0])}

ফাংশন (ক, খ) {গুলি = "একটি = Math.pow (ক, খ) -s.length + + 79; p> a1for (টি = s.length-79; (; একটি% খ ++,; p = 2) জন্য ; বি;) টি = টি * এ - / বি - "; রিটার্ন ইভাল (এস স্প্লিট (১) [১])}

function A(a,b){a=Math.pow(a,b)-(B+0).length+63;for(b=2;a%b++;);return b>a;}
function B(a,b){for(t=(A+0).length-76;b;)t=t*a--/b--;return t;}
F=A

উভয় subroutines তার নিজস্ব ধ্রুবক গণনা করতে অন্যের দৈর্ঘ্য ব্যবহার করে, তাই কোনও চর অপসারণ করা যাবে না

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