মডুলাস বৈধতা


12

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

উদাহরণ স্বরূপ:

[m % 3 = 0, m % 4 = 1, m % 5 = 3]যেখানে% হল মডুলো অপারেটর।

জন্য n= 3, প্রথম 3 সংখ্যা (0 থেকে বেড়ে চলেছে) যে ক্রম মাপসই হয় 33, 93, 153, এইভাবে আপনার ফলে হবে (আপনি আপ ফরম্যাট)।

বিধি / আইও

  1. আপনি একটি ইতিবাচক সংখ্যা nএবং সত্যের একটি তালিকা নিন। অবশ্যই, আপনার প্রয়োজনীয় জিনিসগুলি কেবলমাত্র মডুলো অপারেশনের আরএইচএস এবং ফলাফল।
  2. nএবং সত্যের তালিকার সংখ্যাগুলি সর্বদা 1 -> 2 ^ 31-1 এর মধ্যে থাকবে এবং ফলাফলগুলিও তাই থাকবে।
  3. আপনি যে কোনও সুবিধাজনক ফর্ম এবং কোনও সুবিধাজনক ফর্ম আউটপুট নিতে। উদাহরণস্বরূপ, ইনপুট: 3 [3 0, 4 1, 5 3]এবং আউটপুট: 33 93 153
  4. এটি গ্যারান্টিযুক্ত যে সমাধানটি গাণিতিকভাবে সম্ভব।
  5. ইনপুটটির উত্স কোনও ফাইল, ফাংশন প্যারামিটার, স্টিডিন ইত্যাদি হতে পারে ... একই ফলাফল আউটপুট দেয়।
  6. কোনও ফাঁক নেই।
  7. এটি কোড-গল্ফ, তাই সর্বনিম্ন বাইট গণনা জিতে।

Testcases

# Input in the form <n>, <(d r), (d2 r2), ...>
# where <d> = RHS of the modulo expression and <r> the result of the expression. Output in the next line.

5, (3 2), (4 1), (5 3)
53 113 173 233 293

3, (8, 0), (13, 3), (14, 8)
120 848 1576

সিউডো-কোডে রেফারেন্স বাস্তবায়ন

n = (an integer from stdin)
truths = (value pairs from stdin)
counter = 0

while n != 0 {
    if matches_criterias(counter, truths) {
        print counter
        n -= 1
    }

    counter += 1
}


@ ফ্লোয়ার এডিট: অন্য প্রশ্নটি প্রচুর পরিমাণে নিষিদ্ধ করছে এবং কেবল একটি পদ ছাপবে। এটি আর নকল কিনা তা নিশ্চিত নন ....
ইয়াতসি

1
@ ফ্লোয়ার এই চ্যালেঞ্জটির একটি সময়ের সীমাবদ্ধতা রয়েছে। এই সমস্যাটি মোকাবেলার জন্য গল্ফিয়ার উপায় রয়েছে যা চীনা রেমেন্ডার উপপাদ্যের উপর নির্ভর করে না।
ডেনিস

হ্যাঁ আমি সে সম্পর্কে সচেতন, সে কারণেই আমি কেবল এটি যুক্ত করেছি।
flawr

কি 0একটি বৈধ ফলাফল?
নীল

উত্তর:


6

জেলি , 7 বাইট

%⁼⁴
0ç#

এটি একটি সম্পূর্ণ প্রোগ্রাম। তর্কগুলি হ'ল বিভাজক, টার্গেট মডুলি এবং সমাধানের সংখ্যা order

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

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

0ç#  Main link.
     Left argument: D (array of divisors)
     Right argument: M (array of target moduli)
     Third argument: n (number of solutions)

0ç#  Execute the helper link with k = 0, 1, 2, ... as left argument and D as the
     right one until n of them return 1. Yield the array of matches.


%⁼⁴  Helper link. Left argument: k. Right argument: D

%    Compute k % d for each d in D.
 ⁼⁴  Compare the result with M.

4

পার্ল 6 , 33 বাইট

{grep((*X%@^b)eqv@^c,0..*)[^$^a]}

চেষ্টা করে দেখুন

ইনপুট হয় ( number-of-values, list-of-divisors, list-of-remainders )

সম্প্রসারিত:

{   # bare block lambda with placeholder parameters 「$a」 「@b」 「@c」

  grep(

    # WhateverCode lambda:
    (

      *        # the value being tested

      X%       # cross modulus

      @^b      # with the divisors ( second parameter )

    )

    eqv        # is that list equivalent with

    @^c        # the expected remainders ( third parameter )

    # end of WhateverCode lambda

    ,

    0 .. *     # Range of all Integers starting with 0

  )[ ^$^a ]    # grab up-to 「$a」 values ( first parameter )
               # ( 「^$a」 is the same as 「0 ..^ $a」 )
}

4

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

a=>f=(n,m=0)=>n?a.some(x=>m%x[0]-x[1],++m)?f(n,m):[m,...f(n-1,m)]:[]

একটি সাধারণ পুনরাবৃত্তি ফাংশন। প্রথম এবং nদ্বিতীয় অ্যারেতে কারি করে ব্যবহার করুন , এর মতো:

g=a=>f=(n,m=0)=>n?a.some(x=>m%x[0]-x[1],++m)?f(n,m):[m,...f(n-1,m)]:[]
g([[3, 2], [4, 1], [5, 3]])(5)

4

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

একটি পূর্ণসংখ্যা হিসাবে ইনপুট লাগে nএবং একটি অ্যারের aএর [modulo, remainder]সিনট্যাক্স সংবাহন সঙ্গে অ্যারে (n)(a)

n=>a=>eval('for(i=r=[];a.some(([b,c])=>i%b-c)||--n*r.push(i);i++);r')

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


3

হাস্কেল, 47 বাইট

n#l=take n[i|i<-[0..],all(\(d,r)->mod i d==r)l]

ব্যবহারের উদাহরণ: 3 # [(8,0),(13,3),(14,8)]-> [120,848,1576]


3

পাইথন, 67 বাইট

lambda n,r:[k for k in range(2**32)if all(k%d==m for d,m in r)][:n]

আপনি শুধুমাত্র প্রয়োজন range(2**31)। এছাড়াও, খুব সুন্দর। আমি এই উত্তরটি স্বাধীনভাবে নিয়ে এসেছি।
mbomb007

3

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

a=>g=(n,i,r=[],m=a.some(e=>i%e[0]^e[1]))=>n?g(n-!m,-~i,m?r:[...r,i]):r

প্রথম শর্তের অ্যারে এবং দ্বিতীয় ফলাফলের সংখ্যা নিয়ে কৌতুক করা। সম্পাদনা করুন: শূন্যের কেসটি পরিচালনা না করে 2 বাইট সংরক্ষণ করা হয়েছে।


2

গণিত, 42 বাইট

#2~ChineseRemainder~#+Range[0,#3-1]LCM@@#&

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

#2~ChineseRemainder~#+Range[0,#3-1]LCM@@#&[{8,13,14},{0,3,8},3]

এবং ফিরে {120, 848, 1576}

অন্তর্নির্মিত #2~ChineseRemainder~#ক্ষুদ্রতম nonnegative সমাধান দেয়; সমস্ত পছন্দসই সমাধান পেতে, আমরা এই সংখ্যায় যুক্ত করি Range[0,#3-1]LCM@@#, যা nসমস্ত মডুলির মধ্যে সর্বনিম্ন সাধারণ একাধিকের প্রথম ননজিটিভ গুণক।

আমার জানা মতে গণিতের অলস-মূল্যায়িত অসীম তালিকা নেই, সুতরাং এই প্রয়োগটি আমি খুঁজে পেয়েছি এমন কোনও কিছুর চেয়ে কম ছিল - এমনকি ফাংশনের নামটির দৈর্ঘ্য সহ, এমনকি ননএজেটিভ পূর্ণসংখ্যার পরীক্ষা করে ChineseRemainder, এবং এমনকি পরীক্ষার মতো Mod[k,{8,13,14}]=={0,3,8}কাজ করে যা পুরোপুরি কাজ করে আমরা হব.


2

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

এখন পর্যন্ত দীর্ঘতম উত্তর। তবে আমি খুশি যে আমি এটি 100 এর নিচে পেয়েছি।

for($a=$argv;++$k;)for($i=$v=2;$m=$a[$i++];$v>$argc/2&&$a[1]-->0?print$k._:0)$v+=$k%$m==$a[$i++];

পৃথক কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়,
মুদ্রণগুলি পৃথক করে আন্ডারস্কোর দ্বারা ট্রেল করা হয়।
লুপ কখনও ভাঙে না; সবেমাত্র অনলাইন পরীক্ষার্থীদের জন্য উপযুক্ত।

মত দৌড়ান php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...

ভাঙ্গন

for($a=$argv;++$k;)         // loop $k up from 1
    for($i=$v=2;                // $i = argument index, $v=2+ number of satisfied equations
        $m=$a[$i++];            // loop through modulo/result pairs
        $v>$argc/2                  // 2. if $v>argument-count/2
        &&$a[1]-->0                 // and match count not exhausted
            ?print$k._                  // print match
            :0                          // else do nothing
        )
            $v+=$k%$m==$a[$i++];    // 1. if $k%modulo==result, increment $v

মন্তব্য

$argc==count($argv)। তিনটি জোড়ের জন্য 8 টি আর্গুমেন্ট রয়েছে: ফাইলের নাম $argv[0], n= $argv[1]এবং তার উপরে modulo/ জোড় result$v=2বর্ধিত 3 বার দেয় 5> $argc/2

একটি পরিষ্কার প্রস্থান জন্য এক বাইট যোগ করুন প্রতিস্থাপন &&$a[1]-->0?print$k._সঙ্গে ?$a[1]--?print$k._:die



1

স্মাইলব্যাসিক, ১০২ বাইট

DEF V N,M
FOR K=1TO N@L
T=T+1F=0FOR J=1TO LEN(M)F=F||T MOD M[J-1]-M[J]J=J+1NEXT
ON!F GOTO @L?T
NEXT
END

ONএসবিতে এই প্রথম ব্যবহার করেছি । আমি এটির পরিবর্তে এখানে এটি ব্যবহার করার কারণটি IF F GOTO@Lছিল তাই আমি ?Tএটির পরে একই লাইনে লাগাতে পারি , 1 বাইট সংরক্ষণ করে।



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