मापांक सत्यापन


12

गणित के ऐसे भावों की एक सूची दी गई है जो सभी सच हैं और दो संख्याओं के साथ मापक शेष गणनाओं से युक्त हैं और इसके परिणामस्वरूप, आपका कार्य nसूची में सभी कथनों के लिए सही संख्याओं को प्राप्त करना है ।

उदाहरण के लिए:

[m % 3 = 0, m % 4 = 1, m % 5 = 3], जहां% modulo ऑपरेटर है।

के लिए 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. यह कोड-गोल्फ है, इसलिए सबसे कम बाइट गिनती जीतती है।

परीक्षण के मामलों

# 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
}

के संभावित डुप्लिकेट codegolf.stackexchange.com/questions/48057/...
flawr

@flawr EDIT: अन्य प्रश्न बहुत सी चीजों पर प्रतिबंध लगाने के लिए लगता है और केवल एक शब्द को प्रिंट करता है। यकीन नहीं होता है कि यह एक डुप्लिकेट है ....
Yytsi

1
@flawr उस चुनौती पर समय की पाबंदी है। इस समस्या से निपटने के लिए गोल्फर के तरीके हैं जो चीनी अवशेष प्रमेय पर भरोसा नहीं करते हैं।
डेनिस

हां मुझे इस बात की जानकारी है, इसीलिए मैंने इसे सिर्फ लिंक किया है।
त्रुटिपूर्ण

है 0कोई मान्य परिणाम?
नील

जवाबों:


6

जेली , 7 बाइट्स

%⁼⁴
0ç#

यह एक पूर्ण कार्यक्रम है। तर्क उस क्रम में विभाजक, लक्ष्य मापक और समाधान की संख्या हैं।

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

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

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 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 solution देता है; सभी वांछित समाधान प्राप्त करने के लिए, हम इस संख्या को जोड़ते हैं Range[0,#3-1]LCM@@#, जो nसभी प्रकार के कम से कम सामान्य गुणकों की पहली गैर-गुणक गुणक है।

गणितज्ञ के पास आलसी रूप से मूल्यांकन की गई अनंत सूचियाँ नहीं हैं, जहाँ तक मुझे पता है, इसलिए यह क्रियान्वयन कुछ भी नहीं की तुलना में छोटा था, जिसमें मैंने पाया कि एक-एक करके nonnegative पूर्णांक का परीक्षण किया गया था - भले ही फ़ंक्शन नाम की लंबाई के साथ ChineseRemainder, और भले ही एक परीक्षण Mod[k,{8,13,14}]=={0,3,8}पूरी तरह से काम करता हो कुंआ।


2

PHP, 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

स्माइलबासिक, 102 बाइट्स

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

यह पहली बार है जब मैंने ONSB में कभी प्रयोग किया है। इसके बजाय मैंने इसका उपयोग यहां किया IF F GOTO@Lथा इसलिए मैं ?Tइसे एक ही लाइन पर रख सकता था, जिससे 1 बाइट बचती थी।


1

पायथन, 59 बाइट्स

lambda n,m:[i for i in range(2**31)if all(map(eval,m))][:n]

m जैसे स्ट्रिंग रूप में अभिव्यक्तियों की एक सूची है ["i % 4 == 1", ...]

इसे ऑनलाइन आज़माएं (छोटी रेंज के साथ, इसलिए यह वास्तव में समाप्त हो जाएगा)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.