परिमेय संख्याओं का एलसीएम


18

संख्याओं के एक समूह का सबसे छोटा आम गुणक (LCM) Aपूर्णांक में सबसे छोटी है bकि इस तरह के b/aसभी पूर्णांकों के लिए एक पूर्णांक है aमें A। इस परिभाषा को तर्कसंगत संख्याओं तक बढ़ाया जा सकता है!

कार्य

छोटी से छोटी सकारात्मक खोजें तर्कसंगत b ऐसी है कि b/aएक है पूर्णांक सभी के लिए परिमेय a इनपुट में।

नियम

  • मानक खामियों को मना किया जाता है।
  • आप इनपुट में अलग से न्यूमेरेटर और डिनोमिनेटर ले सकते हैं, लेकिन डबल्स, फ्लोट्स आदि नहीं ले सकते।
  • इनपुट पूरी तरह से कम नहीं हो सकता है।
  • आप पूर्णांक इनपुट को तर्कवाचक के रूप में ले सकते हैं जिसमें से भाजक है 1
  • सबमिशन जो एक LCM / GCD बिलिन को तर्कसंगत संख्याएँ प्रदान करेगा, लेकिन गैर-प्रतिस्पर्धी हैं।

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

In:  3
Out: 3

In:  1/17
Out: 1/17

In:  1/2, 3/4
Out: 3/2

In:  1/3, 2/8
Out: 1

In:  1/4, 3
Out: 3

In:  2/5, 3
Out: 6

In:  1/2, 3/4, 5/6, 7/8
Out: 105/2

यह , इसलिए सबसे कम बाइट्स जीत का उपयोग करते हुए प्रस्तुतियाँ!


4
नोट: LCM[numerators]/GCD[denominators]जब इनपुट में गैर-कम परिमेय संख्या होती है, तो कंप्यूटिंग काम नहीं कर सकती है। उदा 1/3, 2/8
जुंगह्वान मिन

तो अगर मैं इसे कम करता हूं, तो यह काम करेगा?
लीक नून

@LeakyNun हाँ, यह होगा।
जुंगह्वान मिन

लोगों को गैर-निर्मित उत्तर प्रस्तुत करने के लिए प्रोत्साहित करने के लिए, मैंने प्रश्न संपादित किया है, जिससे बिलिन उत्तर गैर-प्रतिस्पर्धात्मक (अभी भी अनुमत) हैं। यदि यह समस्या है, तो मैं अपना संपादन रोलबैक करूंगा।
जुंगह्वान मिन

एक LCM के बारे में क्या उपयोग किया जा रहा है, लेकिन केवल पूर्णांक के साथ - प्रतिस्पर्धा या नहीं?
जोनाथन एलन

जवाबों:


5

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

g/:@$€Z©Ḣæl/;®Ḣg/$¤

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


1
tfw जेली भिन्न के साथ बेकार है
एरिक आउटगोल्फर

2
g/:@$€->:g/$€
जोनाथन एलन

2
एक और दो बाइट के साथ बचाएं::g/$€ZµḢæl/,Ḣg/$
जोनाथन एलन

@JonathanAllan कोड का एक अच्छा टुकड़ा है ...
निकोल

6

जे, 3 बाइट्स, गैर-प्रतिस्पर्धात्मक।

*./

तर्कसंगत इनपुट की सूची को देखते हुए, यह एलसीएम को इसके माध्यम से तह करता है।


4

सीड, 374 (373 + 1) बाइट्स

sed का -Eझंडा एक बाइट के रूप में गिना जाता है। नोट: मैंने इसे अभी तक गोल्फ में करने की कोशिश नहीं की है, और शायद कुछ समय के लिए नहीं होगा।
इनपुट यूनीरी में लिया गया है, और आउटपुट यूनरी में है। रिक्त स्थान को हर अंश को घेरना चाहिए। उदाहरण: echo " 1/111 111/11111 111111/111 "

:d;s, (1*)/\1(1*), \1/\22,;s,(1*)(1*)/\2 ,2\1/\2 ,;td;s,1*(1/22*),\1,g;s,(22*/1)1*,\1,g;:r;s,((1*)/1*)2,\1\2,;s,2(1*/(1*)),\2\1,;tr;h;s,1*/,,g;:g;s/^(1*) 1(1*) 1(1*)/1\1 \2 \3/;tg;s/  */ /g;s/^/ /;/1 1/bg;x;s,/1*,,g;s/^( 1*)( 1*)/\1\2\2/;:l;s/^(1*) (1*) \2(1*)/\1\2 \2 \3/;tl;/  $/be;/  /{s/^(1*) 1*  1*( 1*)/ \1\2\2/;bl};s/^(1* 1* )(1*) (1*)/\1\2\3 \3/;bl;:e;G;s, *\n *,/,

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



3

जावास्क्रिप्ट (ईएस 6), 85 बाइट्स

a=>a.reduce(([b,c],[d,e,g=(b,c)=>c?g(c,b%c):b,h=g(b*e,c*d),i=g(b*d,h)])=>[b*d/i,h/i])

देखो कोई निर्मित नहीं! कोई शक नहीं कि एक पुनरावर्ती दृष्टिकोण या कुछ का उपयोग करके कोई इसे हरा देगा।


3

परी / जीपी , 3 बाइट्स, गैर-प्रतिस्पर्धात्मक

lcm

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


@ JungHwanMin इसका मतलब यह है कि एक GCD में निर्मित की अनुमति है?
एलेफल्फा

अच्छी बात। हां, जब तक इसके इनपुट केवल पूर्णांक हैं।
जंगहवान मिन

2

पर्ल 6 ,  46  42 बाइट्स

{[lcm](@_».numerator)/[gcd] @_».denominator}

झसे आज़माओ

{[lcm](($/=@_».nude)[*;0])/[gcd] $/[*;1]}

झसे आज़माओ

इनपुट तर्कसंगत संख्याओं की एक सूची है ।

विस्तारित:

{ # bare block lambda with implicit parameter list 「@_」

  [lcm](            # reduce using &infix:<lcm>
    (
      $/ = @_».nude # store in 「$/」 a list of the NUmerators and DEnominiators
                    # ((1,2), (3,4))

    )[
      *;            # from all of the first level 「*」,
      0             # but only the 0th of the second level (numerators)
    ]
  )
  /
  [gcd] $/[ *; 1 ]  # gcd of the denominators
}

2

रेटिना , 117 बाइट्स

\d+
$*
\b(1+)(\1)*/(\1)+\b
$#2$*11/$#3$*
{`^((1+)\2*)/(1+)+ (\2)+/\3+\b
$1 $#4$*1/$3
}`\G1(?=1* (1+))|\G 1+
$1
1+
$.&

इसे ऑनलाइन आज़माएं! अनुचित फ्रैक्चर (कोई पूर्णांक या मिश्रित संख्या) के अंतरिक्ष-पृथक श्रृंखला के रूप में इनपुट लेता है। स्पष्टीकरण:

\d+
$*

दशमलव को एकात्मक में परिवर्तित करता है।

\b(1+)(\1)*/(\1)+\b
$#2$*11/$#3$*

यह प्रत्येक अंश को उसकी निम्नतम शर्तों तक कम कर देता है। कब्जा समूह 1, अंश और हर के जीसीडी का प्रतिनिधित्व करता है, इसलिए हम पहले और बाद में कैप्चर की संख्या की गणना करते हैं /\b(1+)+/(\1)+\bकिसी कारण से सही ढंग से कैप्चर की संख्या की गणना नहीं करता है, इसलिए मैं एक अतिरिक्त कैप्चरिंग समूह का उपयोग करता हूं और परिणाम में 1 जोड़ता हूं।

{`^((1+)\2*)/(1+)+ (\2)+/\3+\b
$1 $#4$*1/$3

यह कई चीजें करता है। कैप्चर समूह 2 पहले दो अंशों के संख्यात्मक के GCD का प्रतिनिधित्व करता है, जबकि कैप्चर समूह 3 हर के GCD का प्रतिनिधित्व करता है। $#4इसलिए उनके GCD द्वारा विभाजित दूसरा अंश है। (फिर से, मैं पहले अंश के कैद की संख्या नहीं कर सकता था, लेकिन मुझे केवल एक अंश को उनके GCD से विभाजित करने की आवश्यकता है, इसलिए यह मुझे बहुत खर्च नहीं करता है।)

}`\G1(?=1* (1+))|\G 1+
$1

अब जब दूसरे अंश को उनके GCD द्वारा विभाजित किया गया है, तो हम इस अभिव्यक्ति का उपयोग unary अंकगणित ट्यूटोरियल से दोनों को एक साथ गुणा करने के लिए करते हैं, जिसके परिणामस्वरूप LCM होता है। हम फिर किसी भी शेष अंशों के लिए व्यायाम दोहराते हैं।

1+
$.&

दशमलव में एकात्मक वापस जोड़ता है।


2

आम लिस्प, 154 बाइट्स

(defun f(l &aux(s(pairlis l l)))(loop(and(eval`(=,@(mapcar'car s)))(return(caar s)))(let((x(assoc(reduce'min s :key'car)s)))(rplaca x(+(car x)(cdr x))))))

एल्गोरिदम का उपयोग किया गया (पूर्णांक के लिए निर्दिष्ट, लेकिन तर्कसंगत के लिए भी काम करता है)।

तत्वों के प्रारंभिक मूल्यों पर नज़र रखने के लिए, सबसे पहले इनपुट डेटा की एक सहयोगी सूची बनाएं, ताकि ऑपरेटिंग अनुक्रम सूची के "कार" द्वारा दिया जाए।

(defun f(l &aux (s (pairlis l l)))        ; make the associative list
  (loop
     (when (eval `(= ,@(mapcar 'car s))) ; when the car are all equal
       (return (caar s)))                 ; exit with the first one
     (let ((x (assoc (reduce 'min s :key 'car) s))) ; find the (first) least element
       (rplaca x (+ (car x) (cdr x))))))  ; replace its car adding the original value (cdr)

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

CL-USER> (f '(3))
3
CL-USER> (f '(1/17))
1/17
CL-USER> (f '(1/2 3/4))
3/2
CL-USER> (f '(1/3 2/8))
1
CL-USER> (f '(1/4 3))
3
CL-USER> (f '(2/5 3))
6
CL-USER> (f '(1/2 3/4 5/6 7/8))
105/2

नोट: समाधान बिल्डिंग के उपयोग के बिना है , lcmऔर gcdयह पूर्णांक स्वीकार करता है।


W00t? अपने REPL पर यह कोशिश करो (/ (lcm 1 3 5 7) (gcd 2 4 6 8))
कज़

@ काज, चूंकि, समस्या में कहा गया है, "प्रस्तुतियाँ जो एक LCM / GCD बिल्डिन को तर्कसंगत संख्याएँ प्रदान करेंगी, लेकिन गैर-प्रतिस्पर्धी हैं"।
रेन्जो

लिस्प शब्दों में, कड़ाई से बोलते हुए, जब हम कॉल करते हैं तो हम वास्तव में तर्कसंगत को खिलाते हैं (lcm 1 3 5 7), क्योंकि पूर्णांक तर्कसंगत के एक उपप्रकार होते हैं, लेकिन मुझे लगता है कि नियम को lcmया तो उपयोग करने से बाहर रखा जाना चाहिए gcdजो तर्कसंगत इनपुट की अनुमति देता है।
काज

@ काज़, ऑप्स ... मैंने नियमों की गलत व्याख्या की! क्या मुझे पोस्ट को हटा देना चाहिए? (शायद कॉमन लिस्प के लिए यह अच्छी मार्केटिंग नहीं है :)
रेनजो

मैं सिर्फ एक नोट में रखूंगा कि यह बिल्ट-इन पूर्णांक का उपयोग किए बिना एक समाधान है lcmऔर gcd
कज़

1

गणितज्ञ, 3 बाइट्स, गैर-प्रतिस्पर्धात्मक

LCM

Mathematica का अंतर्निहित LCMफ़ंक्शन तर्कसंगत संख्या इनपुट से निपटने में सक्षम है।


3
अपने स्वयं के प्रश्न का उत्तर देते समय, मुझे नहीं लगता कि यह एक समाधान के साथ जवाब देने के लिए बहुत ही अच्छा खेल है, जिसमें जीतने का बहुत वास्तविक मौका है: पी
बीटा डेके

@BetaDecay हां ... तो अब यह गैर-प्रतिस्पर्धात्मक है।
जंगहवान मिन


1

आम लिस्प, 87 78 बाइट्स

उपयोग करना lcmऔर gcd, जिसमें पूर्णांक इनपुट हैं:

(defun l(a)(/(apply #'lcm(mapcar #'numerator a))(apply #'gcd(mapcar #'denominator a))))

अधिक गोल्फ:

(defun l(a)(eval`(/(lcm,@(mapcar'numerator a))(gcd,@(mapcar'denominator a))))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.