खोजें कि क्या कोई सूची एबीसी-ट्रिपल है


16

तीन सकारात्मक पूर्णांक A, B, C एबीसी-ट्रिपल हैं यदि वे ए <बी हैं और संबंध को संतोषजनक करते हैं: ए + बी = सी

उदाहरण :

  • 1, 8, 9 एक ABC-triple है क्योंकि वे coprime, 1 <8 और 1 + 8 = 9 हैं
  • 6, 8, 14 इसलिए नहीं कि वे मैथुन नहीं करते
  • 7, 5, 12 नहीं है क्योंकि 7> 5

एबीसी-ट्रिपल के बारे में अधिक जानकारी के लिए आप इस फ्रिट्स बीयुकर्स 2005 की प्रस्तुति देख सकते हैं ।

इनपुट आउटपुट

तीन पूर्णांक, दशमलव लिखित। मूल्यों या सूची को अलग किया जा सकता है। आउटपुट में एक सत्य / गलत मान होना चाहिए कि क्या तीन पूर्णांक एबीसी-ट्रिपल हैं।

नोट: सूची में पूर्णांकों के आदेश का सम्मान करना महत्वपूर्ण है, उदाहरण के लिए: 1, 8, 9सूची के रूप में 9, 1, 8या किसी अन्य संयोजन के रूप में नहीं माना जाता है । तो पहला एबीसी-ट्रिपल है और दूसरा नहीं है।

इस प्रकार A सूची का पहला तत्व है, B दूसरा और C तीसरा।

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

निम्न सूचियों में से प्रत्येक को एक सत्य मान का उत्पादन करना चाहिए

[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]

निम्न सूचियों में से प्रत्येक को एक गलत मूल्य का उत्पादन करना चाहिए

[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]

क्या आउटपुट को केवल दो मानों में से एक होना चाहिए, या क्या हम अलग-अलग इनपुट्स के लिए अलग-अलग सत्य / मिथ्या मूल्यों का उत्पादन कर सकते हैं?
लुइस मेंडो

मुझे लगता है कि यह सुसंगत होना चाहिए: आपके कोड को एक प्रकार के सत्य / मिथ्या मूल्यों को आउटपुट करना होगा जो भी इनपुट हो। लेकिन सच्चाई / झूठी जोड़ी वह हो सकती है जो आप चाहते हैं जहां तक ​​यह काम करता है: सूची को अलग करता है।
डेविड

यदि हम इनपुट को तीन मानों की सूची के रूप में लेते हैं, तो क्या इनपुट ऑर्डर में होना चाहिए [A,B,C], या क्या हमें इनपुट को ऑर्डर में लेने की अनुमति है [C,B,A]या [C,A,B]?
केविन क्रूज़सेन 13

आपको चुनौती के मानदंड ए <बी है क्योंकि आपको आदेश का सम्मान करना है।
डेविड

1
मुझे नहीं लगता कि एक विशेष सूची क्रम की आवश्यकता होती है जो इनपुट को अलग-अलग मूल्यों के रूप में लेने की अनुमति देने के साथ संगत है, क्योंकि अलग-अलग मूल्य स्वाभाविक रूप से अनियंत्रित हैं और सूची के रूप में लिया जा सकता है
डेनिस

जवाबों:


8

जेली , 10 9 बाइट्स

Ṫ=S×</=g/

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

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

Ṫ=S×</=g/  Main link. Argument: [a, b, c] (positive integers)

Ṫ          Tail; pop and yield c.
  S        Take the sum of [a, b], yielding (a + b).
 =         Yield t := (c == a + b).
    </     Reduce by less than, yielding (a < b).
   ×       Multiply, yielding t(a < b).
       g/  Reduce by GCD, yielding gcd(a, b).
      =    Check if t(a < b) == gcd(a, b).

8

हास्केल , 48 38 29 बाइट्स

-10 की वजह से बाइट्स TFeld की gcdचाल!

-7 बाइट्स एचपीडब्ल्यूज को धन्यवाद सह- प्रायोगिक परीक्षण में सुधार करने और एक शानदार जगह के लिए धन्यवाद !

-2 बाइट्स एक नाइफ़-ऑपरेटर को सुझाव देने के लिए निम्मी को धन्यवाद !

(a!b)c=a<b&&a+b==c&&gcd a b<2

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

व्याख्या

पहली दो स्थितियां a < bऔर a + b == cस्पष्ट रूप से स्पष्ट हैं, तीसरा उस gcd(a,b)=gcd(a,c)=gcd(b,c) :

लेखन gcd(a,c)=Ua+Vसी का उपयोग कर Bézout की पहचान और प्रतिस्थापन c=a+b देता है:

Ua+V(a+b)=(U+V)a+Vb

चूंकि gcd कि पहचान करने के लिए कम से कम सकारात्मक समाधान है यह इस प्रकार है कि gcd ( एक , ) = gcd ( एक , ) । दूसरा मामला सममित है। gcdgcd(a,b)=gcd(a,c)


1
इसके अलावा, मेरा मानना ​​है कि आपको केवल इसकी आवश्यकता है gcd a b==1। चूंकि gcd a bबंट जाता है a+b=c। यानीgcd(gcd a b)c=gcd a b
H.PWiz

@ हपीविज: आह, बिल्कुल, धन्यवाद! बाद में जब मोबाइल पर नहीं होगा तो संपादित करेंगे ..
14

7

पर्ल 6 , 33 32 बाइट्स

-1 बाइट धन्यवाद nwellnhof के लिए

{(.sum/.[2]/2*[<] $_)==[gcd] $_}

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

बेनामी कोड ब्लॉक जो तीन संख्याओं की सूची लेता है और सही या गलत लौटाता है।

व्याख्या

{                              }  # Anonymous code block
                       [gcd] $_   # Is the gcd of all the numbers
 (                  )==           # Equal to
  .sum        # Whether the sum of numbes
      /       # Is equal to
       .[2]/2 # The last element doubled
             *[<] $_   # And elements are in ascending order



4

बैश, 61 बाइट्स

factor $@|grep -vzP '( .+\b).*\n.*\1\b'&&(($1<$2&&$1+$2==$3))

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

कमांड लाइन तर्कों के रूप में इनपुट, एक्जिट कोड में आउटपुट (साइड इफेक्ट के रूप में स्टडआउट पर आउटपुट भी उत्पन्न करता है, लेकिन इसे अनदेखा किया जा सकता है)।

दूसरा भाग (शुरू से &&(() बहुत मानक है, लेकिन दिलचस्प बिट खोपरा परीक्षण है:

factor $@      # produces output of the form "6: 2 3\n8: 2 2 2\n14: 2 7\n"
|grep -        # regex search on the result
v              # invert the match (return truthy for strings that don't match)
z              # zero-terminated, allowing us to match newlines
P              # perl (extended) regex
'( .+\b)'      # match one or more full factors
'.*\n.*'       # and somewhere on the next line...
'\1\b'         # find the same full factors

पिछली बार &&&
पूर्वधारणा के

4

जावा 10, 65 64 बाइट्स

(a,b,c)->{var r=a<b&a+b==c;for(;b>0;a=b,b=c)c=a%b;return r&a<2;}

-1 बाइट @ शुगी को धन्यवाद ।

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

स्पष्टीकरण:

(a,b,c)->{        // Method with three integer parameters and boolean return-type
  var r=          //  Result-boolean, starting at:
        a<b       //   Check if `a` is smaller than `b`
        &a+b==c;  //   And if `a+b` is equal to `c`
  for(;b>0        //  Then loop as long as `b` is not 0 yet
      ;           //    After every iteration:
       a=b,       //     Set `a` to the current `b`
       b=c)       //     And set `b` to the temp value `c`
    c=a%b;        //   Set the temp value `c` to `a` modulo-`b`
                  //   (we no longer need `c` at this point)
  return r        //  Return if the boolean-result is true
         &a<2;}   //  And `a` is now smaller than 2

a==1-> a<2एक बाइट को बचाने के लिए।
झबरा

@ शगुन थैंक्स!
केविन क्रूज़सेन

4

05AB1E , 12 11 10 बाइट्स

केविन क्रूज़सेन को 1 बाइट धन्यवाद दिया

ÂÆ_*`\‹*¿Θ

इसे ऑनलाइन आज़माएं! या टेस्ट सूट के रूप में

व्याख्या

ÂÆ           # reduce a reversed copy of the input by subtraction
  _          # logically negate
   *         # multiply with input
    `        # push the values of the resulting list separately to stack
     \       # remove the top (last) value
      ‹      # is a < b ?
       *     # multiply by the input list
        ¿    # calculate the gcd of the result
         Θ   # is it true ?

उफ़ .. मेरी टिप्पणी हटा दी गई ..>>> फिर से: आप उत्पाद के साथ स्वैप के बजाय गुणक का उपयोग करके एक बाइट को बचा सकते हैं: RÆ_*`\‹*¿Θ टेस्ट सूट
केविन क्रूज़सेन 14

@ केविनक्रूजसेन: धन्यवाद! हाँ, आमतौर पर जब आपके पास बहुत सारे स्वैप होते हैं, तो आप कुछ गलत कर रहे हैं: P
Emigna

3

पायथन 2 , 69 67 63 62 55 बाइट्स

lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*

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


पायथन 3 , 58 51 बाइट्स

lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*

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


-7 बाइट्स, H.PWiz को धन्यवाद


है gcdमें gcdचाल वैध? क्या है अगर aसाथ नहीं है coprime c?
जो राजा

2
@ jo-king अगर p a और c को विभाजित करता है, तो इसे ca को विभाजित करना चाहिए b।
डेविड

2
@JoKing: यह इस मामले में है, लेकिन सामान्य रूप से नहीं (आप इसे बेजाउट की पहचान के माध्यम से साबित कर सकते हैं)।
ბიმო

आप इसे एक कदम और आगे ले जा सकते हैं gcd(a,b), क्योंकि gcd(a,b)विभाजनa+b
H.PWiz

@ H.PWiz धन्यवाद :)
TFeld

3

जाप , 16 14 13 11 बाइट्स

<V¥yU «NÔr-

कोशिश करो

                :Implicit input of integers U=A, V=B & W=C
<V              :Is U less than V?
  ¥             :Test that for equality with
   yU           :The GCD of V & U
      «         :Logical AND with the negation of
       N        :The array of inputs
        Ô       :Reversed
         r-     :Reduced by subtraction

यहां एक और 11 बाइट समाधान है, हालांकि करीब निरीक्षण पर यह आपके वास्तविक तर्क में आपसे बहुत अलग नहीं है।
कामिल दकरी

@KamilDrakari, उस समय एक चरण में भी भिन्नता रखती थी। यह हो सकता है 10 बाइट्स चर ऑटो डाला गया है, तो जब >इस प्रकार है ©
झबरा

3

जावास्क्रिप्ट (ईएस 6),  54 43 42  40 बाइट्स

gcd(a,c)

true0false

f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2

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


1
मुझे नहीं लगता कि आपको परीक्षण करने की आवश्यकता है gcd(c,a)
झबरा

@ शगुन थैंक्स! मैंने कोड पूरी तरह से फिर से लिखा है।
Arnauld

3

वोल्फ्राम भाषा 24 30 28 26 बाइट्स

Doorknob द्वारा मुंडा 2 बाइट्स के साथ। @Jaeyong द्वारा गाया गया एक और 2 बाइट्स मुंडा

#<#2&&GCD@##==1&&#+#2==#3&

मुझे लगता है कि आपको CoprimeQ@##2 बाइट बचाने के लिए भी उपयोग करने में सक्षम होना चाहिए ।
दरवाज़े

@ डॉर्कनोब, यदि पहली और दूसरी संख्या खोपरा हैं, तो क्या वे आवश्यक रूप से अपनी राशि के साथ नकल करते हैं?
डेविड जेएन

वे हैं , लेकिन मूल परिभाषा वास्तव में कहती है कि ए, बी, और सी कोप्रेम होना चाहिए। अधिकांश उत्तर केवल ए और बी की जांच करते हैं क्योंकि यह आमतौर पर छोटा होता है।
दरवाज़े

मुझे लगता है GCD@##==1कि 2 बाइट्स
बचाएंगे

2

सी # (विजुअल सी # इंटरएक्टिव कंपाइलर) , 90 बाइट्स

n=>new int[(int)1e8].Where((_,b)=>n[0]%++b<1&n[1]%b<1).Count()<2&n[0]+n[1]==n[2]&n[0]<n[1]

1e8 तक की संख्या के लिए चलाता है, मेरी मशीन पर लगभग 35 सेकंड लेता है। दूसरों की तरह जीडीसी की गणना करने के बजाय, फ़ंक्शन केवल एक विशाल सरणी को इंस्टेंट करता है और उन इंडेक्स को फ़िल्टर करता है जो किसी या बी के डिवाइडर नहीं हैं, और यह जांचें कि कितने तत्व बाकी हैं। अगला यह जांचता है कि क्या तत्व एक प्लस तत्व दो बराबर तत्व तीन है। अंत में, यह जांचता है कि क्या पहला तत्व दूसरे से कम है।

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



2

ECMAScript रेगेक्स, 34 बाइट्स

इनपुट ^x*,x*,x*$( डोमेन xद्वारा दोहराया गया है ,) डोमेन में, अनुपयोगी है ।

^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$

इसे ऑनलाइन आज़माएं! (.NET regex इंजन)
इसे ऑनलाइन आज़माएं! (स्पाइडरमोंकी रेगेक्स इंजन)

# see /codegolf/178303/find-if-a-list-is-an-abc-triple
^
(?!                # Verify that A and B are coprime. We don't need to include C in the
                   # test, because the requirement that A+B=C implies that A,B,C are
                   # mutually comprime if and only if A and B are coprime.
    (xx+)\1*,\1+,  # If this matches, A and B have a common factor \1 and aren't coprime.
)
(x*)(,\2x+)\3\2$   # Verify that A<B and A+B=C. The first comma is captured in \3 and
                   # reused to match the second comma, saving one byte.

प्रश्न कहता है "तीन पूर्णांक, दशमलव लिखित" , इसलिए यह अर्हता प्राप्त नहीं कर सकता है (जैसा कि इसमें इनपुट होता है)।

हालांकि, ध्यान दें कि यदि वाक्यांश को शाब्दिक रूप से व्याख्या किया जाना है, तो लंबर और फ़ंक्शन सबमिशन जो पूर्णांक तर्क लेते हैं, उन्हें भी अयोग्य घोषित किया जाना चाहिए, क्योंकि प्रश्न के विनिर्देश का कड़ाई से पालन करने के लिए उन्हें एक स्ट्रिंग के रूप में इनपुट लेने की आवश्यकता होगी।







1

Befunge-98 (FBBI) , 83 बाइट्स

&:&:03p&:04pw>03g04g\:v_1w03g04g+w1.@
00:    7j@.0[^j7      _^;>0.@;j7;>0.@;:%g00\p

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

इनपुट जो पूर्णांकों [A,B,C]का त्रिगुण है, को स्पेस-अलग पूर्णांकों के रूप में Befunge में फीड किया जाता है C B A


1

गणितज्ञ 35 बाइट्स

CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] & 

यदि आदेश महत्वपूर्ण है:

CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] & 

या ...

And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &

1

रेटिना 0.8.2 , 42 41 बाइट्स

\d+
$*
A`^(11+)\1*,\1+,
^(1+)(,1+\1)\2\1$

इसे ऑनलाइन आज़माएं! लिंक में परीक्षण के मामले शामिल हैं। संपादित करें: @Deadcode के लिए 1 बाइट धन्यवाद सहेजा गया। स्पष्टीकरण:

\d+
$*

यूनीरी में बदलें।

A`^(11+)\1*,\1+,

जांचें कि ए और बी का कोई सामान्य कारक नहीं है।

^(1+)(,1+\1)\2\1$

जांचें कि ए <बी और ए + बी = सी।


1
आपके कार्यक्रम में एक बग दिखाई देता है। [१२१, ४ [२३४३ ,५, ४ 48२३४४ ९ ६] झूठी लौट रही है।
डेडकोड

1
@Deadcode फिक्स्ड, मुझे बताने के लिए धन्यवाद।
नील

मेरी regex की तरह ही आपको बदलकर 1 बाइट ड्रॉप कर सकते हैं ^(1+),(1+\1),\1\2$करने के लिए ^(1+)(,1+\1)\2\1$
डेडकोड

1
@Deadcode धन्यवाद! यह शर्म की बात है कि रेटिना के Aऑपरेशन का मेरा उपयोग वास्तव में मुझे किसी भी बाइट से नहीं बचाता है।
नील '

1
@Deadcode मैं रेटिना के अंतिम रीजेक्स को एक सकारात्मक अभिकथन में बदलने का व्यवहार कर रहा हूं (वास्तव में (मैच का चरण) एक गिनती है) इसलिए एंटीग्रेप को हिलाने पर मुझे 5 बाइट का खर्च आएगा।
नील

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