Find if a list is an ABC-triple
$begingroup$
Three positive integers A, B, C are ABC-triple if they are coprime,
with A < B and satisfying the relation : A + B = C
Examples :
1, 8, 9
is an ABC-triple since they are coprime, 1 < 8 and 1 + 8 = 9
6, 8, 14
is not because they are not coprime
7, 5, 12
is not because 7 > 5
You can see this Frits Beukers 2005 presentation for more details about ABC-triples.
Input/Output
Three integers, decimal written. May be separated values or
list. Output had to be a truthy/falsy value whether the three
integers are an ABC-triple.
Note: It is important to respect integers order in the list, for example: 1, 8, 9
is not considered as the same list as 9, 1, 8
or any other combination. So first is an ABC-triple and second is not.
Thus A is the first element of the list, B the second and C the third.
Test cases
Each of the following lists should output a truthy value
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Each of the following lists should output a falsey value
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
code-golf sequence decision-problem number-theory
$endgroup$
|
show 4 more comments
$begingroup$
Three positive integers A, B, C are ABC-triple if they are coprime,
with A < B and satisfying the relation : A + B = C
Examples :
1, 8, 9
is an ABC-triple since they are coprime, 1 < 8 and 1 + 8 = 9
6, 8, 14
is not because they are not coprime
7, 5, 12
is not because 7 > 5
You can see this Frits Beukers 2005 presentation for more details about ABC-triples.
Input/Output
Three integers, decimal written. May be separated values or
list. Output had to be a truthy/falsy value whether the three
integers are an ABC-triple.
Note: It is important to respect integers order in the list, for example: 1, 8, 9
is not considered as the same list as 9, 1, 8
or any other combination. So first is an ABC-triple and second is not.
Thus A is the first element of the list, B the second and C the third.
Test cases
Each of the following lists should output a truthy value
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Each of the following lists should output a falsey value
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
code-golf sequence decision-problem number-theory
$endgroup$
$begingroup$
Does the output have to be only one of two values, or can we output different truthy/falsy values for different inputs?
$endgroup$
– Luis Mendo
Jan 3 at 12:04
$begingroup$
I think it should be consistent: your code have to output one kind of truthy/falsy values whatever the input. But the truthy/falsy couple can be what you want as far as it does the job: differentiate lists.
$endgroup$
– david
Jan 3 at 12:33
$begingroup$
If we take the input as list of three values, does the input have to be in the order[A,B,C]
, or are we also allowed to take the input in the order[C,B,A]
or[C,A,B]
?
$endgroup$
– Kevin Cruijssen
Jan 3 at 13:06
$begingroup$
You have to respect order since A < B is a criteria in the challenge.
$endgroup$
– david
Jan 3 at 13:08
1
$begingroup$
I don't think requiring a particular list order is compatible with allowing input to be taken as separate values, as separate values are inherently unordered and may be taken as a list.
$endgroup$
– Dennis♦
Jan 3 at 15:30
|
show 4 more comments
$begingroup$
Three positive integers A, B, C are ABC-triple if they are coprime,
with A < B and satisfying the relation : A + B = C
Examples :
1, 8, 9
is an ABC-triple since they are coprime, 1 < 8 and 1 + 8 = 9
6, 8, 14
is not because they are not coprime
7, 5, 12
is not because 7 > 5
You can see this Frits Beukers 2005 presentation for more details about ABC-triples.
Input/Output
Three integers, decimal written. May be separated values or
list. Output had to be a truthy/falsy value whether the three
integers are an ABC-triple.
Note: It is important to respect integers order in the list, for example: 1, 8, 9
is not considered as the same list as 9, 1, 8
or any other combination. So first is an ABC-triple and second is not.
Thus A is the first element of the list, B the second and C the third.
Test cases
Each of the following lists should output a truthy value
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Each of the following lists should output a falsey value
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
code-golf sequence decision-problem number-theory
$endgroup$
Three positive integers A, B, C are ABC-triple if they are coprime,
with A < B and satisfying the relation : A + B = C
Examples :
1, 8, 9
is an ABC-triple since they are coprime, 1 < 8 and 1 + 8 = 9
6, 8, 14
is not because they are not coprime
7, 5, 12
is not because 7 > 5
You can see this Frits Beukers 2005 presentation for more details about ABC-triples.
Input/Output
Three integers, decimal written. May be separated values or
list. Output had to be a truthy/falsy value whether the three
integers are an ABC-triple.
Note: It is important to respect integers order in the list, for example: 1, 8, 9
is not considered as the same list as 9, 1, 8
or any other combination. So first is an ABC-triple and second is not.
Thus A is the first element of the list, B the second and C the third.
Test cases
Each of the following lists should output a truthy value
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Each of the following lists should output a falsey value
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
code-golf sequence decision-problem number-theory
code-golf sequence decision-problem number-theory
edited Jan 3 at 15:23
david
asked Jan 3 at 11:53
daviddavid
314111
314111
$begingroup$
Does the output have to be only one of two values, or can we output different truthy/falsy values for different inputs?
$endgroup$
– Luis Mendo
Jan 3 at 12:04
$begingroup$
I think it should be consistent: your code have to output one kind of truthy/falsy values whatever the input. But the truthy/falsy couple can be what you want as far as it does the job: differentiate lists.
$endgroup$
– david
Jan 3 at 12:33
$begingroup$
If we take the input as list of three values, does the input have to be in the order[A,B,C]
, or are we also allowed to take the input in the order[C,B,A]
or[C,A,B]
?
$endgroup$
– Kevin Cruijssen
Jan 3 at 13:06
$begingroup$
You have to respect order since A < B is a criteria in the challenge.
$endgroup$
– david
Jan 3 at 13:08
1
$begingroup$
I don't think requiring a particular list order is compatible with allowing input to be taken as separate values, as separate values are inherently unordered and may be taken as a list.
$endgroup$
– Dennis♦
Jan 3 at 15:30
|
show 4 more comments
$begingroup$
Does the output have to be only one of two values, or can we output different truthy/falsy values for different inputs?
$endgroup$
– Luis Mendo
Jan 3 at 12:04
$begingroup$
I think it should be consistent: your code have to output one kind of truthy/falsy values whatever the input. But the truthy/falsy couple can be what you want as far as it does the job: differentiate lists.
$endgroup$
– david
Jan 3 at 12:33
$begingroup$
If we take the input as list of three values, does the input have to be in the order[A,B,C]
, or are we also allowed to take the input in the order[C,B,A]
or[C,A,B]
?
$endgroup$
– Kevin Cruijssen
Jan 3 at 13:06
$begingroup$
You have to respect order since A < B is a criteria in the challenge.
$endgroup$
– david
Jan 3 at 13:08
1
$begingroup$
I don't think requiring a particular list order is compatible with allowing input to be taken as separate values, as separate values are inherently unordered and may be taken as a list.
$endgroup$
– Dennis♦
Jan 3 at 15:30
$begingroup$
Does the output have to be only one of two values, or can we output different truthy/falsy values for different inputs?
$endgroup$
– Luis Mendo
Jan 3 at 12:04
$begingroup$
Does the output have to be only one of two values, or can we output different truthy/falsy values for different inputs?
$endgroup$
– Luis Mendo
Jan 3 at 12:04
$begingroup$
I think it should be consistent: your code have to output one kind of truthy/falsy values whatever the input. But the truthy/falsy couple can be what you want as far as it does the job: differentiate lists.
$endgroup$
– david
Jan 3 at 12:33
$begingroup$
I think it should be consistent: your code have to output one kind of truthy/falsy values whatever the input. But the truthy/falsy couple can be what you want as far as it does the job: differentiate lists.
$endgroup$
– david
Jan 3 at 12:33
$begingroup$
If we take the input as list of three values, does the input have to be in the order
[A,B,C]
, or are we also allowed to take the input in the order [C,B,A]
or [C,A,B]
?$endgroup$
– Kevin Cruijssen
Jan 3 at 13:06
$begingroup$
If we take the input as list of three values, does the input have to be in the order
[A,B,C]
, or are we also allowed to take the input in the order [C,B,A]
or [C,A,B]
?$endgroup$
– Kevin Cruijssen
Jan 3 at 13:06
$begingroup$
You have to respect order since A < B is a criteria in the challenge.
$endgroup$
– david
Jan 3 at 13:08
$begingroup$
You have to respect order since A < B is a criteria in the challenge.
$endgroup$
– david
Jan 3 at 13:08
1
1
$begingroup$
I don't think requiring a particular list order is compatible with allowing input to be taken as separate values, as separate values are inherently unordered and may be taken as a list.
$endgroup$
– Dennis♦
Jan 3 at 15:30
$begingroup$
I don't think requiring a particular list order is compatible with allowing input to be taken as separate values, as separate values are inherently unordered and may be taken as a list.
$endgroup$
– Dennis♦
Jan 3 at 15:30
|
show 4 more comments
23 Answers
23
active
oldest
votes
$begingroup$
Haskell, 48 38 29 bytes
-10 bytes due to TFeld's gcd
trick!
-7 bytes thanks to HPWiz for improving the co-primality test and spotting a superfluous space!
-2 bytes thanks to nimi for suggesting an infix-operator!
(a!b)c=a<b&&a+b==c&&gcd a b<2
Try it online!
Explanation
The first two conditions a < b
and a + b == c
are fairly obvious, the third one uses that $gcd(a,b) = gcd(a,c) = gcd(b,c)$:
Writing $gcd(a,c) = U cdot a + V cdot c$ using Bézout's identity and substituting $c = a + b$ gives:
$$
U cdot a + V cdot (a + b) = (U + V) cdot a + V cdot b
$$
Since the $gcd$ is the minimal positive solution to that identity it follows that $gcd(a,b) = gcd(a,c)$. The other case is symmetric.
$endgroup$
1
$begingroup$
Also, I believe you only need thatgcd a b==1
. Sincegcd a b
dividesa+b=c
. i.egcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
add a comment |
$begingroup$
Jelly, 10 9 bytes
Ṫ=S×</=g/
Try it online!
How it works
Ṫ=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).
$endgroup$
add a comment |
$begingroup$
Perl 6, 33 32 bytes
-1 byte thanks to nwellnhof
{(.sum/.[2]/2*[<] $_)==[gcd] $_}
Try it online!
Anonymous code block that takes a list of three numbers and returns True or False.
Explanation
{ } # 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
$endgroup$
2
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
add a comment |
$begingroup$
Excel, 33 bytes
=AND(A1+B1=C1,GCD(A1:C1)=1,A1<B1)
$endgroup$
add a comment |
$begingroup$
bash, 61 bytes
factor $@|grep -vzP '( .+b).*n.*1b'&&(($1<$2&&$1+$2==$3))
Try it online!
Input as command line arguments,
output in the exit code
(also produces output on stdout as a side effect, but this can be ignored).
The second part (starting from &&((
) is pretty standard,
but the interesting bit is the coprime test:
factor $@ # produces output of the form "6: 2 3n8: 2 2 2n14: 2 7n"
|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...
'1b' # find the same full factors
$endgroup$
$begingroup$
last&&
can be changed to&
because of precedence
$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
add a comment |
$begingroup$
Java 10, 65 64 bytes
(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 byte thank to @Shaggy.
Try it online.
Explanation:
(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
$endgroup$
$begingroup$
a==1
->a<2
to save a byte.
$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
add a comment |
$begingroup$
05AB1E, 12 11 10 bytes
Saved 1 byte thanks to Kevin Cruijssen
ÂÆ_*`‹*¿Θ
Try it online!
or as a Test Suite
Explanation
ÂÆ # 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 ?
$endgroup$
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:RÆ_*`‹*¿Θ
Test Suite.
$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
add a comment |
$begingroup$
Python 2, 69 67 63 62 55 bytes
lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*
Try it online!
Python 3, 58 51 bytes
lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*
Try it online!
-7 bytes, thanks to H.PWiz
$endgroup$
$begingroup$
is thegcd
ingcd
trick valid? What ifa
is not coprime withc
?
$endgroup$
– Jo King
Jan 3 at 12:31
2
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
2
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
You can take it one step further and usegcd(a,b)
, sincegcd(a,b)
dividesa+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
|
show 1 more comment
$begingroup$
Japt, 16 14 13 11 bytes
<V¥yU «NÔr-
Try it
: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
$endgroup$
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when>
follows©
.
$endgroup$
– Shaggy
Jan 3 at 18:05
add a comment |
$begingroup$
JavaScript (ES6), 54 43 42 40 bytes
Thanks to @Shaggy for pointing out that we don't need to compute $gcd(a,c)$. Saved 11 bytes by rewriting the code accordingly.
Takes input as 3 separate integers. Returns $true$ for an ABC-triple, or either $0$ or $false$ otherwise.
f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2
Try it online!
$endgroup$
1
$begingroup$
I don't think you need to testgcd(c,a)
.
$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
add a comment |
$begingroup$
Wolfram Language 24 30 28 26 bytes
With 2 bytes shaved by Doorknob.
A further 2 bytes shaved off by @jaeyong sung
#<#2&&GCD@##==1&&#+#2==#3&
$endgroup$
$begingroup$
I think you should also be able to useCoprimeQ@##
to save 2 bytes.
$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
I thinkGCD@##==1
would save 2 bytes
$endgroup$
– jaeyong sung
Feb 6 at 14:24
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 90 bytes
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]
Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 59 bytes
(a,b,c)=>Enumerable.Range(2,a).All(i=>a%i+b%i>0)&a<b&a+b==c
Try it online!
$endgroup$
add a comment |
$begingroup$
ECMAScript Regex, 34 bytes
Input is in unary, in the domain ^x*,x*,x*$
(repeated x
s delimited by ,
).
^(?!(xx+)1*,1+,)(x*)(,2x+)32$
Try it online! (.NET regex engine)
Try it online! (SpiderMonkey regex engine)
# see https://codegolf.stackexchange.com/questions/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+)32$ # 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.
The question does say "Three integers, decimal written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.
However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.
$endgroup$
add a comment |
$begingroup$
J, 27 bytes
(+/=2*{:)*({.<1{])*1=+./ .*
Try it online!
Inspired by Jo King's Perl solution
$endgroup$
add a comment |
$begingroup$
C# (.NET Core), 68 bytes
Without Linq.
(a,b,c)=>{var t=a<b&a+b==c;while(b>0){c=b;b=a%b;a=c;}return t&a<2;};
Try it online!
$endgroup$
add a comment |
$begingroup$
Stax, 12 bytes
ü╡v╕7+Pü°╔|g
Run and debug it
$endgroup$
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
add a comment |
$begingroup$
Clean, 43 bytes
import StdEnv
$a b c=a<b&&a+b==c&&gcd a b<2
Try it online!
Similar to basically everything else because the direct test is the same.
$endgroup$
add a comment |
$begingroup$
Pari/GP, 30 bytes
Saved 2 bytes thanks to @Shaggy.
(a,b,c)->a<b==gcd(a,b)&&a+b==c
Try it online!
$endgroup$
1
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
add a comment |
$begingroup$
Befunge-98 (FBBI), 83 bytes
&:&:03p&:04pw>03g04g:v_1w03g04g+w1.@
00: 7j@.0[^j7 _^;>0.@;j7;>0.@;:%g00p
Try it online!
The input which is a triple of integers [A,B,C]
is feeded into Befunge as space-separated integers C B A
.
$endgroup$
add a comment |
$begingroup$
Mathematica 35 bytes
CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] &
if order is important:
CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] &
or...
And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &
$endgroup$
add a comment |
$begingroup$
Retina 0.8.2, 42 41 bytes
d+
$*
A`^(11+)1*,1+,
^(1+)(,1+1)21$
Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:
d+
$*
Convert to unary.
A`^(11+)1*,1+,
Check that A and B have no common factor.
^(1+)(,1+1)21$
Check that A < B and A + B = C.
$endgroup$
1
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
1
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
As with my regex, you can drop 1 byte by changing^(1+),(1+1),12$
to^(1+)(,1+1)21$
.
$endgroup$
– Deadcode
Jan 22 at 18:14
1
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina'sA
operation doesn't actually save me any bytes.
$endgroup$
– Neil
Jan 22 at 18:54
1
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
|
show 2 more comments
$begingroup$
Common Lisp, 51 bytes
(lambda(a b c)(and(< a b)(=(+ a b)c)(=(gcd a c)1)))
Try it online!
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "200"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f178303%2ffind-if-a-list-is-an-abc-triple%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
23 Answers
23
active
oldest
votes
23 Answers
23
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Haskell, 48 38 29 bytes
-10 bytes due to TFeld's gcd
trick!
-7 bytes thanks to HPWiz for improving the co-primality test and spotting a superfluous space!
-2 bytes thanks to nimi for suggesting an infix-operator!
(a!b)c=a<b&&a+b==c&&gcd a b<2
Try it online!
Explanation
The first two conditions a < b
and a + b == c
are fairly obvious, the third one uses that $gcd(a,b) = gcd(a,c) = gcd(b,c)$:
Writing $gcd(a,c) = U cdot a + V cdot c$ using Bézout's identity and substituting $c = a + b$ gives:
$$
U cdot a + V cdot (a + b) = (U + V) cdot a + V cdot b
$$
Since the $gcd$ is the minimal positive solution to that identity it follows that $gcd(a,b) = gcd(a,c)$. The other case is symmetric.
$endgroup$
1
$begingroup$
Also, I believe you only need thatgcd a b==1
. Sincegcd a b
dividesa+b=c
. i.egcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
add a comment |
$begingroup$
Haskell, 48 38 29 bytes
-10 bytes due to TFeld's gcd
trick!
-7 bytes thanks to HPWiz for improving the co-primality test and spotting a superfluous space!
-2 bytes thanks to nimi for suggesting an infix-operator!
(a!b)c=a<b&&a+b==c&&gcd a b<2
Try it online!
Explanation
The first two conditions a < b
and a + b == c
are fairly obvious, the third one uses that $gcd(a,b) = gcd(a,c) = gcd(b,c)$:
Writing $gcd(a,c) = U cdot a + V cdot c$ using Bézout's identity and substituting $c = a + b$ gives:
$$
U cdot a + V cdot (a + b) = (U + V) cdot a + V cdot b
$$
Since the $gcd$ is the minimal positive solution to that identity it follows that $gcd(a,b) = gcd(a,c)$. The other case is symmetric.
$endgroup$
1
$begingroup$
Also, I believe you only need thatgcd a b==1
. Sincegcd a b
dividesa+b=c
. i.egcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
add a comment |
$begingroup$
Haskell, 48 38 29 bytes
-10 bytes due to TFeld's gcd
trick!
-7 bytes thanks to HPWiz for improving the co-primality test and spotting a superfluous space!
-2 bytes thanks to nimi for suggesting an infix-operator!
(a!b)c=a<b&&a+b==c&&gcd a b<2
Try it online!
Explanation
The first two conditions a < b
and a + b == c
are fairly obvious, the third one uses that $gcd(a,b) = gcd(a,c) = gcd(b,c)$:
Writing $gcd(a,c) = U cdot a + V cdot c$ using Bézout's identity and substituting $c = a + b$ gives:
$$
U cdot a + V cdot (a + b) = (U + V) cdot a + V cdot b
$$
Since the $gcd$ is the minimal positive solution to that identity it follows that $gcd(a,b) = gcd(a,c)$. The other case is symmetric.
$endgroup$
Haskell, 48 38 29 bytes
-10 bytes due to TFeld's gcd
trick!
-7 bytes thanks to HPWiz for improving the co-primality test and spotting a superfluous space!
-2 bytes thanks to nimi for suggesting an infix-operator!
(a!b)c=a<b&&a+b==c&&gcd a b<2
Try it online!
Explanation
The first two conditions a < b
and a + b == c
are fairly obvious, the third one uses that $gcd(a,b) = gcd(a,c) = gcd(b,c)$:
Writing $gcd(a,c) = U cdot a + V cdot c$ using Bézout's identity and substituting $c = a + b$ gives:
$$
U cdot a + V cdot (a + b) = (U + V) cdot a + V cdot b
$$
Since the $gcd$ is the minimal positive solution to that identity it follows that $gcd(a,b) = gcd(a,c)$. The other case is symmetric.
edited Jan 3 at 17:30
answered Jan 3 at 12:27
ბიმობიმო
11.9k22392
11.9k22392
1
$begingroup$
Also, I believe you only need thatgcd a b==1
. Sincegcd a b
dividesa+b=c
. i.egcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
add a comment |
1
$begingroup$
Also, I believe you only need thatgcd a b==1
. Sincegcd a b
dividesa+b=c
. i.egcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
1
1
$begingroup$
Also, I believe you only need that
gcd a b==1
. Since gcd a b
divides a+b=c
. i.e gcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
Also, I believe you only need that
gcd a b==1
. Since gcd a b
divides a+b=c
. i.e gcd(gcd a b)c=gcd a b
$endgroup$
– H.PWiz
Jan 3 at 14:01
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
$begingroup$
@HPWiz: Ah yes,of course, thanks! Will edit later when not on mobile..
$endgroup$
– ბიმო
Jan 3 at 14:07
add a comment |
$begingroup$
Jelly, 10 9 bytes
Ṫ=S×</=g/
Try it online!
How it works
Ṫ=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).
$endgroup$
add a comment |
$begingroup$
Jelly, 10 9 bytes
Ṫ=S×</=g/
Try it online!
How it works
Ṫ=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).
$endgroup$
add a comment |
$begingroup$
Jelly, 10 9 bytes
Ṫ=S×</=g/
Try it online!
How it works
Ṫ=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).
$endgroup$
Jelly, 10 9 bytes
Ṫ=S×</=g/
Try it online!
How it works
Ṫ=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).
edited Jan 3 at 16:34
answered Jan 3 at 13:21
Dennis♦Dennis
188k32299741
188k32299741
add a comment |
add a comment |
$begingroup$
Perl 6, 33 32 bytes
-1 byte thanks to nwellnhof
{(.sum/.[2]/2*[<] $_)==[gcd] $_}
Try it online!
Anonymous code block that takes a list of three numbers and returns True or False.
Explanation
{ } # 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
$endgroup$
2
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
add a comment |
$begingroup$
Perl 6, 33 32 bytes
-1 byte thanks to nwellnhof
{(.sum/.[2]/2*[<] $_)==[gcd] $_}
Try it online!
Anonymous code block that takes a list of three numbers and returns True or False.
Explanation
{ } # 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
$endgroup$
2
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
add a comment |
$begingroup$
Perl 6, 33 32 bytes
-1 byte thanks to nwellnhof
{(.sum/.[2]/2*[<] $_)==[gcd] $_}
Try it online!
Anonymous code block that takes a list of three numbers and returns True or False.
Explanation
{ } # 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
$endgroup$
Perl 6, 33 32 bytes
-1 byte thanks to nwellnhof
{(.sum/.[2]/2*[<] $_)==[gcd] $_}
Try it online!
Anonymous code block that takes a list of three numbers and returns True or False.
Explanation
{ } # 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
edited Jan 3 at 21:14
answered Jan 3 at 12:29
Jo KingJo King
24.5k357126
24.5k357126
2
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
add a comment |
2
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
2
2
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
$begingroup$
32 bytes
$endgroup$
– nwellnhof
Jan 3 at 13:09
add a comment |
$begingroup$
Excel, 33 bytes
=AND(A1+B1=C1,GCD(A1:C1)=1,A1<B1)
$endgroup$
add a comment |
$begingroup$
Excel, 33 bytes
=AND(A1+B1=C1,GCD(A1:C1)=1,A1<B1)
$endgroup$
add a comment |
$begingroup$
Excel, 33 bytes
=AND(A1+B1=C1,GCD(A1:C1)=1,A1<B1)
$endgroup$
Excel, 33 bytes
=AND(A1+B1=C1,GCD(A1:C1)=1,A1<B1)
answered Jan 3 at 14:27
WernischWernisch
1,638317
1,638317
add a comment |
add a comment |
$begingroup$
bash, 61 bytes
factor $@|grep -vzP '( .+b).*n.*1b'&&(($1<$2&&$1+$2==$3))
Try it online!
Input as command line arguments,
output in the exit code
(also produces output on stdout as a side effect, but this can be ignored).
The second part (starting from &&((
) is pretty standard,
but the interesting bit is the coprime test:
factor $@ # produces output of the form "6: 2 3n8: 2 2 2n14: 2 7n"
|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...
'1b' # find the same full factors
$endgroup$
$begingroup$
last&&
can be changed to&
because of precedence
$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
add a comment |
$begingroup$
bash, 61 bytes
factor $@|grep -vzP '( .+b).*n.*1b'&&(($1<$2&&$1+$2==$3))
Try it online!
Input as command line arguments,
output in the exit code
(also produces output on stdout as a side effect, but this can be ignored).
The second part (starting from &&((
) is pretty standard,
but the interesting bit is the coprime test:
factor $@ # produces output of the form "6: 2 3n8: 2 2 2n14: 2 7n"
|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...
'1b' # find the same full factors
$endgroup$
$begingroup$
last&&
can be changed to&
because of precedence
$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
add a comment |
$begingroup$
bash, 61 bytes
factor $@|grep -vzP '( .+b).*n.*1b'&&(($1<$2&&$1+$2==$3))
Try it online!
Input as command line arguments,
output in the exit code
(also produces output on stdout as a side effect, but this can be ignored).
The second part (starting from &&((
) is pretty standard,
but the interesting bit is the coprime test:
factor $@ # produces output of the form "6: 2 3n8: 2 2 2n14: 2 7n"
|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...
'1b' # find the same full factors
$endgroup$
bash, 61 bytes
factor $@|grep -vzP '( .+b).*n.*1b'&&(($1<$2&&$1+$2==$3))
Try it online!
Input as command line arguments,
output in the exit code
(also produces output on stdout as a side effect, but this can be ignored).
The second part (starting from &&((
) is pretty standard,
but the interesting bit is the coprime test:
factor $@ # produces output of the form "6: 2 3n8: 2 2 2n14: 2 7n"
|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...
'1b' # find the same full factors
answered Jan 3 at 15:13
Doorknob♦Doorknob
55k17115352
55k17115352
$begingroup$
last&&
can be changed to&
because of precedence
$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
add a comment |
$begingroup$
last&&
can be changed to&
because of precedence
$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
$begingroup$
last
&&
can be changed to &
because of precedence$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
$begingroup$
last
&&
can be changed to &
because of precedence$endgroup$
– Nahuel Fouilleul
Jan 22 at 15:15
add a comment |
$begingroup$
Java 10, 65 64 bytes
(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 byte thank to @Shaggy.
Try it online.
Explanation:
(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
$endgroup$
$begingroup$
a==1
->a<2
to save a byte.
$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
add a comment |
$begingroup$
Java 10, 65 64 bytes
(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 byte thank to @Shaggy.
Try it online.
Explanation:
(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
$endgroup$
$begingroup$
a==1
->a<2
to save a byte.
$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
add a comment |
$begingroup$
Java 10, 65 64 bytes
(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 byte thank to @Shaggy.
Try it online.
Explanation:
(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
$endgroup$
Java 10, 65 64 bytes
(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 byte thank to @Shaggy.
Try it online.
Explanation:
(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
edited Jan 3 at 16:23
answered Jan 3 at 15:04
Kevin CruijssenKevin Cruijssen
40.1k563206
40.1k563206
$begingroup$
a==1
->a<2
to save a byte.
$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
add a comment |
$begingroup$
a==1
->a<2
to save a byte.
$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
$begingroup$
a==1
-> a<2
to save a byte.$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
a==1
-> a<2
to save a byte.$endgroup$
– Shaggy
Jan 3 at 15:09
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
$begingroup$
@Shaggy Thanks!
$endgroup$
– Kevin Cruijssen
Jan 3 at 16:23
add a comment |
$begingroup$
05AB1E, 12 11 10 bytes
Saved 1 byte thanks to Kevin Cruijssen
ÂÆ_*`‹*¿Θ
Try it online!
or as a Test Suite
Explanation
ÂÆ # 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 ?
$endgroup$
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:RÆ_*`‹*¿Θ
Test Suite.
$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
add a comment |
$begingroup$
05AB1E, 12 11 10 bytes
Saved 1 byte thanks to Kevin Cruijssen
ÂÆ_*`‹*¿Θ
Try it online!
or as a Test Suite
Explanation
ÂÆ # 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 ?
$endgroup$
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:RÆ_*`‹*¿Θ
Test Suite.
$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
add a comment |
$begingroup$
05AB1E, 12 11 10 bytes
Saved 1 byte thanks to Kevin Cruijssen
ÂÆ_*`‹*¿Θ
Try it online!
or as a Test Suite
Explanation
ÂÆ # 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 ?
$endgroup$
05AB1E, 12 11 10 bytes
Saved 1 byte thanks to Kevin Cruijssen
ÂÆ_*`‹*¿Θ
Try it online!
or as a Test Suite
Explanation
ÂÆ # 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 ?
edited Jan 3 at 16:44
answered Jan 3 at 12:41
EmignaEmigna
46.8k433142
46.8k433142
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:RÆ_*`‹*¿Θ
Test Suite.
$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
add a comment |
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:RÆ_*`‹*¿Θ
Test Suite.
$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:
RÆ_*`‹*¿Θ
Test Suite.$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
Oops.. deleted my comment.. >.> So again: you can save a byte by using multiples instead of swaps with product:
RÆ_*`‹*¿Θ
Test Suite.$endgroup$
– Kevin Cruijssen
Jan 3 at 14:30
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
$begingroup$
@KevinCruijssen: Thanks! Yeah, usually when you have that many swaps, you're doing something wrong :P
$endgroup$
– Emigna
Jan 3 at 16:45
add a comment |
$begingroup$
Python 2, 69 67 63 62 55 bytes
lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*
Try it online!
Python 3, 58 51 bytes
lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*
Try it online!
-7 bytes, thanks to H.PWiz
$endgroup$
$begingroup$
is thegcd
ingcd
trick valid? What ifa
is not coprime withc
?
$endgroup$
– Jo King
Jan 3 at 12:31
2
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
2
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
You can take it one step further and usegcd(a,b)
, sincegcd(a,b)
dividesa+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
|
show 1 more comment
$begingroup$
Python 2, 69 67 63 62 55 bytes
lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*
Try it online!
Python 3, 58 51 bytes
lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*
Try it online!
-7 bytes, thanks to H.PWiz
$endgroup$
$begingroup$
is thegcd
ingcd
trick valid? What ifa
is not coprime withc
?
$endgroup$
– Jo King
Jan 3 at 12:31
2
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
2
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
You can take it one step further and usegcd(a,b)
, sincegcd(a,b)
dividesa+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
|
show 1 more comment
$begingroup$
Python 2, 69 67 63 62 55 bytes
lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*
Try it online!
Python 3, 58 51 bytes
lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*
Try it online!
-7 bytes, thanks to H.PWiz
$endgroup$
Python 2, 69 67 63 62 55 bytes
lambda a,b,c:(c-b==a<b)/gcd(a,b)
from fractions import*
Try it online!
Python 3, 58 51 bytes
lambda a,b,c:(c-b==a<b)==gcd(a,b)
from math import*
Try it online!
-7 bytes, thanks to H.PWiz
edited Jan 3 at 14:37
answered Jan 3 at 12:28
TFeldTFeld
15.7k21248
15.7k21248
$begingroup$
is thegcd
ingcd
trick valid? What ifa
is not coprime withc
?
$endgroup$
– Jo King
Jan 3 at 12:31
2
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
2
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
You can take it one step further and usegcd(a,b)
, sincegcd(a,b)
dividesa+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
|
show 1 more comment
$begingroup$
is thegcd
ingcd
trick valid? What ifa
is not coprime withc
?
$endgroup$
– Jo King
Jan 3 at 12:31
2
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
2
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
You can take it one step further and usegcd(a,b)
, sincegcd(a,b)
dividesa+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
$begingroup$
is the
gcd
in gcd
trick valid? What if a
is not coprime with c
?$endgroup$
– Jo King
Jan 3 at 12:31
$begingroup$
is the
gcd
in gcd
trick valid? What if a
is not coprime with c
?$endgroup$
– Jo King
Jan 3 at 12:31
2
2
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
$begingroup$
@jo-king If p divides a and c, it should divide c-a so b.
$endgroup$
– david
Jan 3 at 12:41
2
2
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
@JoKing: It is in this case, but not in general (you can prove it via Bezout's identity).
$endgroup$
– ბიმო
Jan 3 at 12:42
$begingroup$
You can take it one step further and use
gcd(a,b)
, since gcd(a,b)
divides a+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
You can take it one step further and use
gcd(a,b)
, since gcd(a,b)
divides a+b
$endgroup$
– H.PWiz
Jan 3 at 14:04
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
$begingroup$
@H.PWiz Thanks :)
$endgroup$
– TFeld
Jan 3 at 14:37
|
show 1 more comment
$begingroup$
Japt, 16 14 13 11 bytes
<V¥yU «NÔr-
Try it
: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
$endgroup$
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when>
follows©
.
$endgroup$
– Shaggy
Jan 3 at 18:05
add a comment |
$begingroup$
Japt, 16 14 13 11 bytes
<V¥yU «NÔr-
Try it
: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
$endgroup$
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when>
follows©
.
$endgroup$
– Shaggy
Jan 3 at 18:05
add a comment |
$begingroup$
Japt, 16 14 13 11 bytes
<V¥yU «NÔr-
Try it
: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
$endgroup$
Japt, 16 14 13 11 bytes
<V¥yU «NÔr-
Try it
: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
edited Jan 3 at 14:55
answered Jan 3 at 12:42
ShaggyShaggy
19.4k21667
19.4k21667
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when>
follows©
.
$endgroup$
– Shaggy
Jan 3 at 18:05
add a comment |
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when>
follows©
.
$endgroup$
– Shaggy
Jan 3 at 18:05
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
Here is another 11 byte solution, though on closer inspection it isn't much different from yours in its actual logic.
$endgroup$
– Kamil Drakari
Jan 3 at 15:13
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when
>
follows ©
.$endgroup$
– Shaggy
Jan 3 at 18:05
$begingroup$
@KamilDrakari, had a variation on that at one stage, too. It could be 10 bytes if variables were auto-inserted when
>
follows ©
.$endgroup$
– Shaggy
Jan 3 at 18:05
add a comment |
$begingroup$
JavaScript (ES6), 54 43 42 40 bytes
Thanks to @Shaggy for pointing out that we don't need to compute $gcd(a,c)$. Saved 11 bytes by rewriting the code accordingly.
Takes input as 3 separate integers. Returns $true$ for an ABC-triple, or either $0$ or $false$ otherwise.
f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2
Try it online!
$endgroup$
1
$begingroup$
I don't think you need to testgcd(c,a)
.
$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
add a comment |
$begingroup$
JavaScript (ES6), 54 43 42 40 bytes
Thanks to @Shaggy for pointing out that we don't need to compute $gcd(a,c)$. Saved 11 bytes by rewriting the code accordingly.
Takes input as 3 separate integers. Returns $true$ for an ABC-triple, or either $0$ or $false$ otherwise.
f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2
Try it online!
$endgroup$
1
$begingroup$
I don't think you need to testgcd(c,a)
.
$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
add a comment |
$begingroup$
JavaScript (ES6), 54 43 42 40 bytes
Thanks to @Shaggy for pointing out that we don't need to compute $gcd(a,c)$. Saved 11 bytes by rewriting the code accordingly.
Takes input as 3 separate integers. Returns $true$ for an ABC-triple, or either $0$ or $false$ otherwise.
f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2
Try it online!
$endgroup$
JavaScript (ES6), 54 43 42 40 bytes
Thanks to @Shaggy for pointing out that we don't need to compute $gcd(a,c)$. Saved 11 bytes by rewriting the code accordingly.
Takes input as 3 separate integers. Returns $true$ for an ABC-triple, or either $0$ or $false$ otherwise.
f=(a,b,c)=>c&&a/b|a+b-c?0:b?f(b,a%b):a<2
Try it online!
edited Jan 3 at 16:05
answered Jan 3 at 12:18
ArnauldArnauld
78.2k795326
78.2k795326
1
$begingroup$
I don't think you need to testgcd(c,a)
.
$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
add a comment |
1
$begingroup$
I don't think you need to testgcd(c,a)
.
$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
1
1
$begingroup$
I don't think you need to test
gcd(c,a)
.$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
I don't think you need to test
gcd(c,a)
.$endgroup$
– Shaggy
Jan 3 at 15:13
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
$begingroup$
@Shaggy Thanks! I've rewritten the code entirely.
$endgroup$
– Arnauld
Jan 3 at 15:47
add a comment |
$begingroup$
Wolfram Language 24 30 28 26 bytes
With 2 bytes shaved by Doorknob.
A further 2 bytes shaved off by @jaeyong sung
#<#2&&GCD@##==1&&#+#2==#3&
$endgroup$
$begingroup$
I think you should also be able to useCoprimeQ@##
to save 2 bytes.
$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
I thinkGCD@##==1
would save 2 bytes
$endgroup$
– jaeyong sung
Feb 6 at 14:24
add a comment |
$begingroup$
Wolfram Language 24 30 28 26 bytes
With 2 bytes shaved by Doorknob.
A further 2 bytes shaved off by @jaeyong sung
#<#2&&GCD@##==1&&#+#2==#3&
$endgroup$
$begingroup$
I think you should also be able to useCoprimeQ@##
to save 2 bytes.
$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
I thinkGCD@##==1
would save 2 bytes
$endgroup$
– jaeyong sung
Feb 6 at 14:24
add a comment |
$begingroup$
Wolfram Language 24 30 28 26 bytes
With 2 bytes shaved by Doorknob.
A further 2 bytes shaved off by @jaeyong sung
#<#2&&GCD@##==1&&#+#2==#3&
$endgroup$
Wolfram Language 24 30 28 26 bytes
With 2 bytes shaved by Doorknob.
A further 2 bytes shaved off by @jaeyong sung
#<#2&&GCD@##==1&&#+#2==#3&
edited Feb 6 at 16:46
answered Jan 3 at 14:24
DavidCDavidC
24.1k244102
24.1k244102
$begingroup$
I think you should also be able to useCoprimeQ@##
to save 2 bytes.
$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
I thinkGCD@##==1
would save 2 bytes
$endgroup$
– jaeyong sung
Feb 6 at 14:24
add a comment |
$begingroup$
I think you should also be able to useCoprimeQ@##
to save 2 bytes.
$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
I thinkGCD@##==1
would save 2 bytes
$endgroup$
– jaeyong sung
Feb 6 at 14:24
$begingroup$
I think you should also be able to use
CoprimeQ@##
to save 2 bytes.$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
I think you should also be able to use
CoprimeQ@##
to save 2 bytes.$endgroup$
– Doorknob♦
Jan 3 at 16:48
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
@Doorknob, If the first and second numbers are coprime, are they necessarily coprime with their sum?
$endgroup$
– DavidC
Jan 3 at 17:27
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
They are, but the original definition actually states that A, B, and C should be coprime. Most answers check only A and B just because it's usually shorter.
$endgroup$
– Doorknob♦
Jan 3 at 17:32
$begingroup$
I think
GCD@##==1
would save 2 bytes$endgroup$
– jaeyong sung
Feb 6 at 14:24
$begingroup$
I think
GCD@##==1
would save 2 bytes$endgroup$
– jaeyong sung
Feb 6 at 14:24
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 90 bytes
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]
Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 90 bytes
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]
Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 90 bytes
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]
Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.
Try it online!
$endgroup$
C# (Visual C# Interactive Compiler), 90 bytes
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]
Runs for numbers up to 1e8, takes about 35 seconds on my machine. Instead of calculating the gcd like others, the function just instantiate a huge array and filter the indexes that aren't divisors of a or b, and check how many elements are left. Next it check if element one plus element two equals element three. Lastly, it checks if the first element is less than the second.
Try it online!
answered Jan 3 at 16:54
Embodiment of IgnoranceEmbodiment of Ignorance
1,548124
1,548124
add a comment |
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 59 bytes
(a,b,c)=>Enumerable.Range(2,a).All(i=>a%i+b%i>0)&a<b&a+b==c
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 59 bytes
(a,b,c)=>Enumerable.Range(2,a).All(i=>a%i+b%i>0)&a<b&a+b==c
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 59 bytes
(a,b,c)=>Enumerable.Range(2,a).All(i=>a%i+b%i>0)&a<b&a+b==c
Try it online!
$endgroup$
C# (Visual C# Interactive Compiler), 59 bytes
(a,b,c)=>Enumerable.Range(2,a).All(i=>a%i+b%i>0)&a<b&a+b==c
Try it online!
edited Jan 3 at 18:29
answered Jan 3 at 17:19
danadana
1,471167
1,471167
add a comment |
add a comment |
$begingroup$
ECMAScript Regex, 34 bytes
Input is in unary, in the domain ^x*,x*,x*$
(repeated x
s delimited by ,
).
^(?!(xx+)1*,1+,)(x*)(,2x+)32$
Try it online! (.NET regex engine)
Try it online! (SpiderMonkey regex engine)
# see https://codegolf.stackexchange.com/questions/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+)32$ # 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.
The question does say "Three integers, decimal written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.
However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.
$endgroup$
add a comment |
$begingroup$
ECMAScript Regex, 34 bytes
Input is in unary, in the domain ^x*,x*,x*$
(repeated x
s delimited by ,
).
^(?!(xx+)1*,1+,)(x*)(,2x+)32$
Try it online! (.NET regex engine)
Try it online! (SpiderMonkey regex engine)
# see https://codegolf.stackexchange.com/questions/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+)32$ # 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.
The question does say "Three integers, decimal written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.
However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.
$endgroup$
add a comment |
$begingroup$
ECMAScript Regex, 34 bytes
Input is in unary, in the domain ^x*,x*,x*$
(repeated x
s delimited by ,
).
^(?!(xx+)1*,1+,)(x*)(,2x+)32$
Try it online! (.NET regex engine)
Try it online! (SpiderMonkey regex engine)
# see https://codegolf.stackexchange.com/questions/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+)32$ # 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.
The question does say "Three integers, decimal written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.
However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.
$endgroup$
ECMAScript Regex, 34 bytes
Input is in unary, in the domain ^x*,x*,x*$
(repeated x
s delimited by ,
).
^(?!(xx+)1*,1+,)(x*)(,2x+)32$
Try it online! (.NET regex engine)
Try it online! (SpiderMonkey regex engine)
# see https://codegolf.stackexchange.com/questions/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+)32$ # 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.
The question does say "Three integers, decimal written", so this might not qualify (as it takes input in unary), but it makes for such an elegant pure regex that I hope it will at least be appreciated.
However, note that if the phrasing is to be literally interpreted, lambda and function submissions that take integer arguments are to be disqualified too, as to strictly adhere to the question's specification they would need to take the input in the form of a string.
edited Feb 6 at 2:47
answered Jan 22 at 13:42
DeadcodeDeadcode
1,9341420
1,9341420
add a comment |
add a comment |
$begingroup$
J, 27 bytes
(+/=2*{:)*({.<1{])*1=+./ .*
Try it online!
Inspired by Jo King's Perl solution
$endgroup$
add a comment |
$begingroup$
J, 27 bytes
(+/=2*{:)*({.<1{])*1=+./ .*
Try it online!
Inspired by Jo King's Perl solution
$endgroup$
add a comment |
$begingroup$
J, 27 bytes
(+/=2*{:)*({.<1{])*1=+./ .*
Try it online!
Inspired by Jo King's Perl solution
$endgroup$
J, 27 bytes
(+/=2*{:)*({.<1{])*1=+./ .*
Try it online!
Inspired by Jo King's Perl solution
edited Jan 3 at 13:14
answered Jan 3 at 13:07
Galen IvanovGalen Ivanov
7,06211034
7,06211034
add a comment |
add a comment |
$begingroup$
C# (.NET Core), 68 bytes
Without Linq.
(a,b,c)=>{var t=a<b&a+b==c;while(b>0){c=b;b=a%b;a=c;}return t&a<2;};
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (.NET Core), 68 bytes
Without Linq.
(a,b,c)=>{var t=a<b&a+b==c;while(b>0){c=b;b=a%b;a=c;}return t&a<2;};
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (.NET Core), 68 bytes
Without Linq.
(a,b,c)=>{var t=a<b&a+b==c;while(b>0){c=b;b=a%b;a=c;}return t&a<2;};
Try it online!
$endgroup$
C# (.NET Core), 68 bytes
Without Linq.
(a,b,c)=>{var t=a<b&a+b==c;while(b>0){c=b;b=a%b;a=c;}return t&a<2;};
Try it online!
answered Jan 3 at 17:26
DestroigoDestroigo
3916
3916
add a comment |
add a comment |
$begingroup$
Stax, 12 bytes
ü╡v╕7+Pü°╔|g
Run and debug it
$endgroup$
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
add a comment |
$begingroup$
Stax, 12 bytes
ü╡v╕7+Pü°╔|g
Run and debug it
$endgroup$
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
add a comment |
$begingroup$
Stax, 12 bytes
ü╡v╕7+Pü°╔|g
Run and debug it
$endgroup$
Stax, 12 bytes
ü╡v╕7+Pü°╔|g
Run and debug it
answered Jan 3 at 17:37
wastlwastl
2,269526
2,269526
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
add a comment |
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
$begingroup$
By re-arranging slightly, you can get 11. staxlang.xyz/…
$endgroup$
– recursive
Feb 5 at 22:04
add a comment |
$begingroup$
Clean, 43 bytes
import StdEnv
$a b c=a<b&&a+b==c&&gcd a b<2
Try it online!
Similar to basically everything else because the direct test is the same.
$endgroup$
add a comment |
$begingroup$
Clean, 43 bytes
import StdEnv
$a b c=a<b&&a+b==c&&gcd a b<2
Try it online!
Similar to basically everything else because the direct test is the same.
$endgroup$
add a comment |
$begingroup$
Clean, 43 bytes
import StdEnv
$a b c=a<b&&a+b==c&&gcd a b<2
Try it online!
Similar to basically everything else because the direct test is the same.
$endgroup$
Clean, 43 bytes
import StdEnv
$a b c=a<b&&a+b==c&&gcd a b<2
Try it online!
Similar to basically everything else because the direct test is the same.
answered Jan 3 at 17:52
ΟurousΟurous
7,41111136
7,41111136
add a comment |
add a comment |
$begingroup$
Pari/GP, 30 bytes
Saved 2 bytes thanks to @Shaggy.
(a,b,c)->a<b==gcd(a,b)&&a+b==c
Try it online!
$endgroup$
1
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
add a comment |
$begingroup$
Pari/GP, 30 bytes
Saved 2 bytes thanks to @Shaggy.
(a,b,c)->a<b==gcd(a,b)&&a+b==c
Try it online!
$endgroup$
1
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
add a comment |
$begingroup$
Pari/GP, 30 bytes
Saved 2 bytes thanks to @Shaggy.
(a,b,c)->a<b==gcd(a,b)&&a+b==c
Try it online!
$endgroup$
Pari/GP, 30 bytes
Saved 2 bytes thanks to @Shaggy.
(a,b,c)->a<b==gcd(a,b)&&a+b==c
Try it online!
edited Jan 3 at 23:20
answered Jan 3 at 16:23
alephalphaalephalpha
21.8k33094
21.8k33094
1
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
add a comment |
1
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
1
1
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
$begingroup$
30 bytes(?)
$endgroup$
– Shaggy
Jan 3 at 20:13
add a comment |
$begingroup$
Befunge-98 (FBBI), 83 bytes
&:&:03p&:04pw>03g04g:v_1w03g04g+w1.@
00: 7j@.0[^j7 _^;>0.@;j7;>0.@;:%g00p
Try it online!
The input which is a triple of integers [A,B,C]
is feeded into Befunge as space-separated integers C B A
.
$endgroup$
add a comment |
$begingroup$
Befunge-98 (FBBI), 83 bytes
&:&:03p&:04pw>03g04g:v_1w03g04g+w1.@
00: 7j@.0[^j7 _^;>0.@;j7;>0.@;:%g00p
Try it online!
The input which is a triple of integers [A,B,C]
is feeded into Befunge as space-separated integers C B A
.
$endgroup$
add a comment |
$begingroup$
Befunge-98 (FBBI), 83 bytes
&:&:03p&:04pw>03g04g:v_1w03g04g+w1.@
00: 7j@.0[^j7 _^;>0.@;j7;>0.@;:%g00p
Try it online!
The input which is a triple of integers [A,B,C]
is feeded into Befunge as space-separated integers C B A
.
$endgroup$
Befunge-98 (FBBI), 83 bytes
&:&:03p&:04pw>03g04g:v_1w03g04g+w1.@
00: 7j@.0[^j7 _^;>0.@;j7;>0.@;:%g00p
Try it online!
The input which is a triple of integers [A,B,C]
is feeded into Befunge as space-separated integers C B A
.
answered Jan 4 at 1:37
WisławWisław
23114
23114
add a comment |
add a comment |
$begingroup$
Mathematica 35 bytes
CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] &
if order is important:
CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] &
or...
And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &
$endgroup$
add a comment |
$begingroup$
Mathematica 35 bytes
CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] &
if order is important:
CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] &
or...
And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &
$endgroup$
add a comment |
$begingroup$
Mathematica 35 bytes
CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] &
if order is important:
CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] &
or...
And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &
$endgroup$
Mathematica 35 bytes
CoprimeQ @@ # && #[[1]] + #[[2]] == #[[3]] &
if order is important:
CoprimeQ @@ # && Sort[#]==# && #[[1]] + #[[2]] == #[[3]] &
or...
And[CoprimeQ @@ #, Sort@# == #, #[[1]] + #[[2]] == #[[3]]] &
edited Jan 22 at 6:45
answered Jan 22 at 6:39
David G. StorkDavid G. Stork
21718
21718
add a comment |
add a comment |
$begingroup$
Retina 0.8.2, 42 41 bytes
d+
$*
A`^(11+)1*,1+,
^(1+)(,1+1)21$
Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:
d+
$*
Convert to unary.
A`^(11+)1*,1+,
Check that A and B have no common factor.
^(1+)(,1+1)21$
Check that A < B and A + B = C.
$endgroup$
1
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
1
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
As with my regex, you can drop 1 byte by changing^(1+),(1+1),12$
to^(1+)(,1+1)21$
.
$endgroup$
– Deadcode
Jan 22 at 18:14
1
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina'sA
operation doesn't actually save me any bytes.
$endgroup$
– Neil
Jan 22 at 18:54
1
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
|
show 2 more comments
$begingroup$
Retina 0.8.2, 42 41 bytes
d+
$*
A`^(11+)1*,1+,
^(1+)(,1+1)21$
Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:
d+
$*
Convert to unary.
A`^(11+)1*,1+,
Check that A and B have no common factor.
^(1+)(,1+1)21$
Check that A < B and A + B = C.
$endgroup$
1
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
1
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
As with my regex, you can drop 1 byte by changing^(1+),(1+1),12$
to^(1+)(,1+1)21$
.
$endgroup$
– Deadcode
Jan 22 at 18:14
1
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina'sA
operation doesn't actually save me any bytes.
$endgroup$
– Neil
Jan 22 at 18:54
1
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
|
show 2 more comments
$begingroup$
Retina 0.8.2, 42 41 bytes
d+
$*
A`^(11+)1*,1+,
^(1+)(,1+1)21$
Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:
d+
$*
Convert to unary.
A`^(11+)1*,1+,
Check that A and B have no common factor.
^(1+)(,1+1)21$
Check that A < B and A + B = C.
$endgroup$
Retina 0.8.2, 42 41 bytes
d+
$*
A`^(11+)1*,1+,
^(1+)(,1+1)21$
Try it online! Link includes test cases. Edit: Saved 1 byte thanks to @Deadcode. Explanation:
d+
$*
Convert to unary.
A`^(11+)1*,1+,
Check that A and B have no common factor.
^(1+)(,1+1)21$
Check that A < B and A + B = C.
edited Jan 22 at 18:49
answered Jan 3 at 22:13
NeilNeil
81.5k745178
81.5k745178
1
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
1
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
As with my regex, you can drop 1 byte by changing^(1+),(1+1),12$
to^(1+)(,1+1)21$
.
$endgroup$
– Deadcode
Jan 22 at 18:14
1
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina'sA
operation doesn't actually save me any bytes.
$endgroup$
– Neil
Jan 22 at 18:54
1
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
|
show 2 more comments
1
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
1
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
As with my regex, you can drop 1 byte by changing^(1+),(1+1),12$
to^(1+)(,1+1)21$
.
$endgroup$
– Deadcode
Jan 22 at 18:14
1
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina'sA
operation doesn't actually save me any bytes.
$endgroup$
– Neil
Jan 22 at 18:54
1
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
1
1
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
$begingroup$
There appears to be a bug in your program. [121, 48234375, 48234496] is returning false.
$endgroup$
– Deadcode
Jan 22 at 13:44
1
1
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
@Deadcode Fixed, thanks for letting me know.
$endgroup$
– Neil
Jan 22 at 18:07
$begingroup$
As with my regex, you can drop 1 byte by changing
^(1+),(1+1),12$
to ^(1+)(,1+1)21$
.$endgroup$
– Deadcode
Jan 22 at 18:14
$begingroup$
As with my regex, you can drop 1 byte by changing
^(1+),(1+1),12$
to ^(1+)(,1+1)21$
.$endgroup$
– Deadcode
Jan 22 at 18:14
1
1
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina's
A
operation doesn't actually save me any bytes.$endgroup$
– Neil
Jan 22 at 18:54
$begingroup$
@Deadcode Thanks! It's a shame that my use of Retina's
A
operation doesn't actually save me any bytes.$endgroup$
– Neil
Jan 22 at 18:54
1
1
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
$begingroup$
@Deadcode I'm using Retina's behaviour of turning the last regex into a positive assertion (actually a (count of) match stage) so moving the antigrep would cost me 5 bytes.
$endgroup$
– Neil
Jan 24 at 10:50
|
show 2 more comments
$begingroup$
Common Lisp, 51 bytes
(lambda(a b c)(and(< a b)(=(+ a b)c)(=(gcd a c)1)))
Try it online!
$endgroup$
add a comment |
$begingroup$
Common Lisp, 51 bytes
(lambda(a b c)(and(< a b)(=(+ a b)c)(=(gcd a c)1)))
Try it online!
$endgroup$
add a comment |
$begingroup$
Common Lisp, 51 bytes
(lambda(a b c)(and(< a b)(=(+ a b)c)(=(gcd a c)1)))
Try it online!
$endgroup$
Common Lisp, 51 bytes
(lambda(a b c)(and(< a b)(=(+ a b)c)(=(gcd a c)1)))
Try it online!
answered Jan 23 at 9:37
RenzoRenzo
1,790516
1,790516
add a comment |
add a comment |
If this is an answer to a challenge…
…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.
…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.
More generally…
…Please make sure to answer the question and provide sufficient detail.
…Avoid asking for help, clarification or responding to other answers (use comments instead).
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f178303%2ffind-if-a-list-is-an-abc-triple%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Does the output have to be only one of two values, or can we output different truthy/falsy values for different inputs?
$endgroup$
– Luis Mendo
Jan 3 at 12:04
$begingroup$
I think it should be consistent: your code have to output one kind of truthy/falsy values whatever the input. But the truthy/falsy couple can be what you want as far as it does the job: differentiate lists.
$endgroup$
– david
Jan 3 at 12:33
$begingroup$
If we take the input as list of three values, does the input have to be in the order
[A,B,C]
, or are we also allowed to take the input in the order[C,B,A]
or[C,A,B]
?$endgroup$
– Kevin Cruijssen
Jan 3 at 13:06
$begingroup$
You have to respect order since A < B is a criteria in the challenge.
$endgroup$
– david
Jan 3 at 13:08
1
$begingroup$
I don't think requiring a particular list order is compatible with allowing input to be taken as separate values, as separate values are inherently unordered and may be taken as a list.
$endgroup$
– Dennis♦
Jan 3 at 15:30