অধৈর্য বিভাজন পরীক্ষা


14

আপনার কাজটি এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হয় যা নির্ধারণ করে যে কোনও সংখ্যা অন্য দ্বারা বিভাজ্য কিনা। ক্যাচটি হ'ল সংখ্যার সমস্ত অঙ্ক না দেওয়া হলেও এটি যত তাড়াতাড়ি সম্ভব একটি উত্তর দেওয়া উচিত।

আপনার প্রোগ্রামটি ইনপুট হিসাবে একটি পূর্ণসংখ্যার ডি then 2 এবং তারপরে অঙ্কের একটি সিরিজ নেওয়া উচিত । এগুলি কমপক্ষে উল্লেখযোগ্য অঙ্ক থেকে শুরু করে অন্য পূর্ণসংখ্যার N N 1 এর অঙ্কগুলি উপস্থাপন করে । প্রথম পর্যায়ে যে এন পারেন আবশ্যক বা না দ্বারা divisble হতে ডি , আপনার প্রোগ্রাম আউটপুট উচিত উপযুক্ত উত্তর করে প্রস্থান করুন। যদি ইনপুটটির শেষে পৌঁছে যায় তবে পূর্ণ এন ডি দ্বারা বিভাজ্য কিনা তা আউটপুট করা উচিত ।

এখানে এন এর জন্য গ্রহণযোগ্য ইনপুট ফর্ম্যাটগুলির একটি তালিকা রয়েছে (যদি আপনি মনে করেন যে কিছু অন্তর্ভুক্ত নয় তবে এটির অনুমতি দেওয়া উচিত):

  • স্ট্যান্ডার্ড ইনপুট : পৃথক লাইনে অঙ্কগুলি দেওয়া হয়; ইনপুটের শেষ ফাইলের শেষে বা একটি বিশেষ মূল্য নেই; প্রস্থান মানে ফাংশনটি ফিরে আসে বা প্রোগ্রামটি প্রস্থান করে।

  • অ্যানালগ ইনপুট : উদাহরণস্বরূপ কী-স্ট্রোক বা প্রতিটি সংখ্যা উপস্থাপন করে দশ বোতাম; ইনপুট শেষ একটি বিশেষ মান; প্রস্থান মানে ফাংশনটি ফিরে আসে বা প্রোগ্রামটি প্রস্থান করে।

  • গ্লোবাল স্টেটের সাথে ফাংশন : ধারাবাহিক অঙ্ক সহ বারবার বলা হয়; ইনপুট শেষ একটি বিশেষ মান; প্রস্থান মানে ফাংশনটি একটি নন-মান প্রত্যাবর্তন করে। মনে রাখবেন যে আপনি যদি বিশ্বব্যাপী রাষ্ট্র ব্যবহার করেন তবে মানটি ফিরে আসার পরে এটি অবশ্যই সাফ করতে হবে অথবা অন্যথায় ফাংশনটি একাধিকবার কাজ করে এমন পুনরায় সেট করতে হবে

  • কার্ড ফাংশন : পরবর্তী অঙ্ক বা একটি মান সহ ডেকে অন্য ফাংশন দেয়; ইনপুট এর শেষটি একটি বিশেষ মান বা কোনও যুক্তি ছাড়াই ফাংশনটি কল করা; প্রস্থান মানে ফাংশন অন্য ফাংশন চেয়ে একটি উত্তর ফেরত।

  • জিইউআই প্রম্পট বা অনুরূপ : বারবার প্রদর্শিত; ইনপুটের শেষ "বাতিল করুন" বা সমমানের, বা একটি বিশেষ মূল্য নেই; প্রস্থান মানে হ'ল বন্ধ হওয়া নির্দেশ করে।

  • Iterator কাজ : ইনপুট একটি stateful বস্তু বা ফাংশন যা রিটার্ন পরবর্তী অঙ্ক যখন বলা হয়, ইনপুট শেষে একটি ব্যতিক্রম বা বিশেষ মান; প্রস্থান মানে পুনরাবৃত্তির ডাক দেওয়া বন্ধ হয়।

ডি এবং আউটপুট জন্য ইনপুট যে কোনও গ্রহণযোগ্য মান পদ্ধতির মাধ্যমে হতে পারে ।

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

2;   6               => true
5;   6               => false
20;  0 3             => false
20;  0 4             => true
100; 1               => false
100; 0 0             => true
100; 0 2             => false
4;   2 4             => false
4;   2 5             => true
4;   2 [eof]         => false
4;   4 [eof]         => true
625; 5 5             => false
625; 5 7 2           => false
625; 5 7 3 6         => false
625; 5 7 3 4         => true
7;   9 3 4 [eof]     => false
7;   9 3 4 5 [eof]   => true
140; 0 3             => false
140; 0 4 5 [eof]     => false
140; 0 4 5 1 [eof]   => true
14;  4 5 1 4 [eof]   => false
14;  4 5 1 4 1 [eof] => true

আমি মনে করি আমাদের অনুমান করা উচিত যে আমাদের সমাধান প্রতিবার ইনপুট জিজ্ঞাসা করবে, তাই না? এবং, এটি একটি সম্পূর্ণ প্রোগ্রাম হওয়া উচিত, যেহেতু ইনপুটটি অঙ্ক দ্বারা অঙ্কিত হয় তা নিশ্চিত করার উদ্দেশ্যমূলক উপায়, না? (চ্যালেঞ্জটি "প্রোগ্রাম বা ফাংশন" বলে, হুম ...)
এরিক আউটগলফার

1
@ এরিকথিউটগলফার ইনপুট ফর্ম্যাটটি প্রশ্নের বুলেটযুক্ত তালিকায় বিশদভাবে ব্যাখ্যা করা হয়েছে।
ডোরকনবব

1
এই ফর্ম্যাটগুলি কীভাবে উদ্দেশ্যমূলক হতে পারে সে সম্পর্কে আমি কেবল ভাবছিলাম ... আমি অনুমান করি যে আমি কেবল নিটপিকিং ছেড়ে দেব এবং প্রকৃতপক্ষে এটি সমাধান করা শুরু করব । :-)
এরিক আউটগল্ফার

1
digitsইওএফের জন্য একটি বিশেষ মান সহ ইনপুট হিসাবে কেবল একটি তালিকা গ্রহণে কি কোনও ভুল আছে ?
জোনাথন অ্যালান

1
@ EriktheOutgolfer- এর কোনও ইওএফ মান না থাকলে আমি যদি কিছু ভুল বুঝি না। উদাহরণস্বরূপ যাক ধরুন পূর্ণ মানের 132 হয় এবং সম্ভাব্য ভাজক 4 তারপর []এবং [2]রিটার্ন কিছু আর অন্য falseবা true(ফাংশন নিজেই ইত্যাদি ... সহ) যখন [2,3], [2,3,1]এবং [2,3,1,EOF]রিটার্ন true। এটি আমাকে বিশ্বব্যাপী রাষ্ট্রের বিকল্পের নিকটেই আঘাত করে।
জোনাথন অ্যালান

উত্তর:


9

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

ইনপুট ফর্ম্যাট: কারিড ফাংশন

একটি ফাংশন যা বিভাজন গ্রহণ করে এবং এমন একটি ফাংশন দেয় যা প্রতিটি অঙ্ক বা ইওএফের জন্য নেয় । দ্বিতীয় ফাংশনটি 0 (মিথ্যা), 1 (সত্য) বা নিজেই (কোনও উত্তর নেই) প্রদান করে।-101

p=>(q='',g=(d,t=k=z=!~d||(q=d+q,p))=>k--?g(d,t-=(k+q)%p<1):t?t-z&&g:1)

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

কিভাবে?

N দশমিক সংখ্যা সমন্বিত একটি বিভাজক এবং একটি লভ্যাংশ q দেওয়া , আমরা সমস্ত 0 k < p এর জন্য নিম্নলিখিত এক্সপ্রেশনটি গণনা করি :পিকুইএন0<পি

(1)×10এন+ +কুই(গেলিক ভাষারপি)

এক্সপিমি10<পিএক্স=মিপি+ +

এক্স×10এন+ +কুই(গেলিক ভাষারপি)=(মিপি+ +)×10এন+ +কুই(গেলিক ভাষারপি)=(মিপি×10এন(গেলিক ভাষারপি))+ +(×10এন+ +কুই(গেলিক ভাষারপি))(গেলিক ভাষারপি)=0+ +(×10এন+ +কুই(গেলিক ভাষারপি))(গেলিক ভাষারপি)=×10এন+ +কুই(গেলিক ভাষারপি)

(1)00<পি0পি

(1)00<পি

(1)কুই

মন্তব্য

p => (                       // p = divisor
  q = '',                    // q = dividend stored as a string, initially empty
  g = (                      // g() = curried function taking:
    d,                       //   d = next digit
    t =                      //   t = number of iterations yielding a non-zero value
    k =                      //   k = total number of iterations to process
    z =                      //   z = copy of k
      !~d ||                 //   if d == -1 (meaning EOF), use only 1 iteration
                             //   so that we simply test the current value of q
      (q = d + q, p)         //   otherwise, prepend d to q and use p iterations
  ) =>                       //
    k-- ?                    //   decrement k; if it was not equal to zero:
      g(                     //     do a recursive call to g():
        d,                   //       pass the current value of d (will be ignored anyway)
        t -= (k + q) % p < 1 //       test (k + q) % p and update t accordingly
      )                      //     end of recursive call
    :                        //   else:
      t ?                    //     if t is greater than 0:
        t - z && g           //       return 0 if t == z, or g otherwise
      :                      //     else:
        1                    //       return 1
)                            //

2

ব্যাচ, 177 169 বাইট

@set n=
@set g=1
:l
@set/ps=
@if %s%==- goto g
@set n=%s%%n%
@set/ae=%1/g,g*=2-e%%2,g*=1+4*!(e%%5),r=n%%g
@if %g% neq %1 if %r%==0 goto l
:g
@cmd/cset/a!(n%%%1)

dকমান্ড-লাইন প্যারামিটার হিসাবে নেয় এবং ইওএফ চিহ্নিতকারী হিসাবে nপৃথক লাইনে অঙ্কগুলি -পড়বে। 1বিভাজ্য, 0না হলে আউটপুট । ব্যাখ্যা:

@set n=

ইনিশিয়ালাইজ nখালি স্ট্রিং করতে।

@set g=1

g হয় gcd(d, 10**len(n))

:l

একটি লুপ পড়ার অঙ্কগুলি শুরু করুন।

@set/ps=

পরের অঙ্কটি পড়ুন।

@if %s%==- goto g

EOF এ প্রক্রিয়াজাতকরণ বন্ধ করুন।

@set n=%s%%n%

পরবর্তী অঙ্কটি প্রস্তুত করুন n

@set/ae=%1/g,g*=2-e%%2,g*=1+4*!(e%%5),r=n%%g

gএখনই আপডেট করুন যা len(n)বেড়েছে এবং গণনা করেছে n%g

@if %g% neq %1 if %r%==0 goto l

যদি rঅ-শূন্য হয় তবে dঅবশ্যই স্পষ্টভাবে বিভাজন হবে না n, কারণ এর gএকটি কারণটি d, তা নয়। যদি rশূন্য হয় তবে আমরা কেবল সমান হলে dভাগ করে কিনা তা জানি , তাই না হলে লুপটি চালিয়ে যান।ngd

:g

ইওএফ-তে এখানে ডিজিটাল-রিডিং লুপটি ভেঙে দিন।

@cmd/cset/a!(n%%%1)

গণনা করুন এবং সুস্পষ্টভাবে ফলাফল আউটপুট।

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