তালিকাটি এবিসি-ট্রিপল কিনা তা সন্ধান করুন


16

A, B, C তিনটি ধনাত্মক পূর্ণসংখ্যা ABC-ট্রিপল হয় যদি তারা কপিরাইট হয় তবে এ <বি সাথে থাকে এবং সম্পর্ক সন্তুষ্ট হয়: A + B = C

উদাহরণ:

  • 1, 8, 9 তারা কপিরাইট হওয়ার কারণে এটি একটি এবিসি-ট্রিপল, 1 <8 এবং 1 + 8 = 9
  • 6, 8, 14 তারা কপিরাইট না হওয়ার কারণে নয়
  • 7, 5, 12 7> 5 এর কারণে নয়

আপনি এই ফ্রিটস বিউকার্স 2005 উপস্থাপনা দেখতে পারেন এবিসি-ট্রিপলস সম্পর্কে আরও তথ্যের জন্য ।

ইনপুট আউটপুট

তিনটি পূর্ণসংখ্যা, দশমিক লিখিত। পৃথক করা মান বা তালিকা হতে পারে। তিনটি পূর্ণসংখ্যা এটিবিসি-ট্রিপল কিনা আউটপুটটির সত্যতা / মিথ্যা মান হওয়া উচিত।

দ্রষ্টব্য: তালিকায় পূর্ণসংখ্যার ক্রমকে সম্মান করা গুরুত্বপূর্ণ, উদাহরণস্বরূপ: 1, 8, 9একই তালিকা 9, 1, 8বা অন্য কোনও সংমিশ্রণ হিসাবে বিবেচিত হয় না । সুতরাং প্রথমটি একটি এবিসি-ট্রিপল এবং দ্বিতীয়টি নয়।

সুতরাং এ তালিকার প্রথম উপাদান, বি দ্বিতীয় এবং সি তৃতীয়।

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

নিম্নলিখিত তালিকাগুলির প্রত্যেকটিতে একটি সত্য মানের মান আউটপুট করা উচিত

[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]?
কেভিন ক্রুইজসেন

আপনাকে <বি> চ্যালেঞ্জের একটি মানদণ্ড হওয়ায় আপনার আদেশকে সম্মান করতে হবে।
ডেভিড

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(একটি,)=ইউএকটি+ +ভী লেখার মাধ্যমে বেজআউটের পরিচয় ব্যবহার করা হবে এবং =একটি+ + প্রতিস্থাপন করা হবে :

ইউএকটি+ +ভী(একটি+ +)=(ইউ+ +ভী)একটি+ +ভী

যেহেতু GCD যে পরিচয় ন্যূনতম ইতিবাচক সমাধান এটা যে অনুসরণ করে GCD ( একটি , ) = GCD ( একটি , ) । অন্য কেসটি প্রতিসম হয়। GCDGCD(একটি,)=GCD(একটি,)


1
এছাড়াও, আমি বিশ্বাস করি আপনার কেবল এটির প্রয়োজন gcd a b==1। যেহেতু gcd a bভাগ হয় a+b=c। অর্থাত্gcd(gcd a b)c=gcd a b
এইচ.পি.উইজ

@ এইচপিউইজ: হ্যাঁ, অবশ্যই, ধন্যবাদ! মোবাইলে না থাকলে পরে সম্পাদনা করবে ..
ბიმო

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))

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

কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট, প্রস্থান কোডের আউটপুট (পার্শ্ব প্রতিক্রিয়া হিসাবে stdout এ আউটপুট উত্পাদন করে, তবে এটি উপেক্ষা করা যেতে পারে)।

দ্বিতীয় অংশটি (থেকে শুরু &&(() বেশ মানসম্পন্ন, তবে আকর্ষণীয় কিছুটি হ'ল কপরিমের পরীক্ষা:

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

05 এ বি 1 , 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Æ_*`\‹*¿Θ টেস্ট স্যুট
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজসেন: ধন্যবাদ! হ্যাঁ, সাধারণত যখন আপনার অনেকগুলি অদলবদল হয় আপনি কিছু ভুল করছেন: পি
এমিগানা

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 বাইটস, এইচ.পি.উইজকে ধন্যবাদ


হয় gcdgcdকৌতুক বৈধ? যদি aকপিরাইট না হয় c?
জো কিং

2
@ জো-কিং যদি পি এবং ক কে বিভক্ত করে তবে এটি সি এ বি ভাগ করে নেওয়া উচিত।
ডেভিড

2
@ জোকিং: এটি এক্ষেত্রে, তবে সাধারণভাবে নয় (আপনি এটি বেজআউটের পরিচয়ের মাধ্যমে প্রমাণ করতে পারবেন)।
4

আপনি এটিকে আরও একধাপ এগিয়ে নিয়ে যেতে এবং ব্যবহার করতে পারেন gcd(a,b), যেহেতু gcd(a,b)ভাগ হয়a+b
এইচপিউইজ

@ এইচ.পি.উইজ ধন্যবাদ :)
টিফিল্ড

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 বাইট সমাধান রয়েছে, যদিও নিবিড় পরিদর্শন করার সময় এটির আসল যুক্তিতে এটি আপনার চেয়ে অনেক বেশি আলাদা নয়।
কামিল দ্রাকারী

কমলড্রাকারি, এর এক পর্যায়েও তার পার্থক্য ছিল। নিম্নলিখিতগুলি যখন ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে সন্নিবেশ করা হয় তবে এটি 10 বাইট হতে পারে । >©
শেগি

3

জাভাস্ক্রিপ্ট (ES6),  54 43 42  40 বাইট

আমাদের নির্দেশনার দরকার নেই বলে উল্লেখ করার জন্য @ শ্যাগিকে ধন্যবাদ জানাই GCD(একটি,)। সেই অনুযায়ী কোডটি পুনরায় লিখে 11 বাইট সংরক্ষণ করা হয়েছে।

3 পৃথক পূর্ণসংখ্যা হিসাবে ইনপুট নেয়। রিটার্নসটিRতোমার দর্শন লগ করা একটি এবিসি-ট্রিপল, বা হয় জন্য 0 অথবা একটিগুলি অন্যথায়।

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

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


1
আপনার পরীক্ষা করার দরকার নেই বলে আমি মনে করি gcd(c,a)
শেগি

@ শেগি ধন্যবাদ! আমি পুরোপুরি কোডটি আবার লিখেছি।
আর্নল্ড

3

ওল্ফ্রাম ভাষা 24 30 28 26 বাইট

ডোরকনব দ্বারা শেভ করা 2 বাইট সহ। @ জায়েওং গেয়ে আরও 2 টি বাইট শেভ করেছেন

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

আমি মনে করি আপনার CoprimeQ@##2 বাইট সংরক্ষণের জন্যও সক্ষম হওয়া উচিত ।
ডুরকনবব

@ ডুরকনব, যদি প্রথম এবং দ্বিতীয় সংখ্যাগুলি কপিরাইট হয়, তবে তারা কি অগত্যা তাদের যোগফলের সাথে কপিরাইট করবে?
ডেভিডসি

এগুলি হ'ল , তবে আসল সংজ্ঞাটি আসলে এ, বি এবং সি এর কপিরাইট হওয়া উচিত। বেশিরভাগ উত্তর কেবলমাত্র A এবং B পরীক্ষা করে থাকে কারণ এটি সাধারণত ছোট হয়।
Doorknob

আমার মনে হয় GCD@##==12 টি বাইট সাশ্রয় হবে
জায়েং

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 সেকেন্ড সময় লাগে। অন্যদের মতো জিসিডি গণনা করার পরিবর্তে ফাংশনটি কেবল একটি বিশাল অ্যারে ইনস্ট্যান্ট করে এবং সূচকগুলিকে ফিল্টার করে যা কোনও বা বি বিভাজক নয়, এবং কতগুলি উপাদান অবশিষ্ট রয়েছে তা পরীক্ষা করে। এরপরে এটি পরীক্ষা করে দেখুন যে উপাদানটির সাথে এক যোগ দুটি উপাদান তিনটি সমান three শেষ পর্যন্ত, এটি প্রথম উপাদানটি দ্বিতীয়টির চেয়ে কম কিনা তা পরীক্ষা করে।

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



2

ECMAScript Regex, 34 বাইট

ইনপুটটি অবিচ্ছিন্ন, ডোমেনে ^x*,x*,x*$(পুনরাবৃত্তি xদ্বারা সীমিত ,)।

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

এটি অনলাইন চেষ্টা করুন! (.NET রেজেক্স ইঞ্জিন)
এটি অনলাইনে ব্যবহার করে দেখুন! (স্পাইডারমনকি রেজেক্স ইঞ্জিন)

# 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

গণিত 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$

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। সম্পাদনা: @ ডেডকোডকে ধন্যবাদ 1 বাইট সংরক্ষিত ব্যাখ্যা:

\d+
$*

অ্যানারিতে রূপান্তর করুন।

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

দেখুন যে A এবং B এর কোনও সাধারণ কারণ নেই।

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

A <বি এবং এ + বি = সি পরীক্ষা করুন C.


1
আপনার প্রোগ্রামে একটি বাগ রয়েছে বলে মনে হচ্ছে। [121, 48234375, 48234496] মিথ্যা ফিরছে।
ডেডকোড

1
@ ডেডকোড ফিক্সড, আমাকে জানানোর জন্য ধন্যবাদ
নিল

আমার Regex সঙ্গে হিসাবে, আপনি পরিবর্তন করে 1 বাইট ড্রপ করতে পারেন ^(1+),(1+\1),\1\2$থেকে ^(1+)(,1+\1)\2\1$
ডেডকোড

1
@ ডেডকোড ধন্যবাদ! এটি লজ্জাজনক যে আমার রেটিনার Aঅপারেশন ব্যবহারটি আসলে আমার কোনও বাইট সংরক্ষণ করে না।
নীল

1
@ ডেডকোড আমি রেটিনার আচরণটি ব্যবহার করছি সর্বশেষ রেজেক্সকে ইতিবাচক দৃser়তায় পরিণত করার (আসলে একটি (গণনা) ম্যাচ পর্যায়) তাই অ্যান্টিগ্রেপ চালানোতে আমার 5 বাইট খরচ পড়বে।
নীল

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