Três inteiros positivos A, B, C são triplo ABC se forem coprimes, com A <B e satisfazendo a relação: A + B = C
Exemplos :
1, 8, 9
é um triplo ABC, pois são coprime, 1 <8 e 1 + 8 = 96, 8, 14
não é porque eles não são coprime7, 5, 12
não é porque 7> 5
Você pode ver esta apresentação do Frits Beukers 2005 para obter mais detalhes sobre o triplo do ABC.
Entrada / Saída
Três inteiros, decimais escritos. Podem ser valores ou lista separados. A saída tinha que ser um valor verdadeiro / falso, se os três números inteiros são um triplo ABC.
Nota: É importante respeitar a ordem dos números inteiros na lista, por exemplo: 1, 8, 9
não é considerada a mesma lista que 9, 1, 8
nem qualquer outra combinação. Então, primeiro é um triplo ABC e o segundo não.
Assim, A é o primeiro elemento da lista, B o segundo e C o terceiro.
Casos de teste
Cada uma das listas a seguir deve gerar um valor de verdade
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Cada uma das seguintes listas deve gerar um valor de falsey
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
[A,B,C]
ou também podemos receber a entrada na ordem[C,B,A]
ou[C,A,B]
?Respostas:
Geléia ,
109 bytesExperimente online!
Como funciona
fonte
Haskell ,
48 3829 bytes-10 bytes devido a TFeld 's
gcd
truque!-7 bytes graças ao HPWiz por melhorar o teste de co-primalidade e detectar um espaço supérfluo!
-2 bytes graças a nimi por sugerir um operador de infix!
Experimente online!
Explicação
As duas primeiras condiçõesgcd(a,b)=gcd(a,c)=gcd(b,c) :
a < b
ea + b == c
são bastante óbvias, a terceira usa queEscrevergcd(a,c)=U⋅a+V⋅c usando a identidade de Bézout e substituir c=a+b fornece:
Como ogcd é a solução positiva mínima para essa identidade, segue-se que mcd ( a , b ) = mcd ( a , c ) . O outro caso é simétrico.
fonte
gcd a b==1
. Desdegcd a b
dividea+b=c
. iegcd(gcd a b)c=gcd a b
Perl 6 ,
3332 bytes-1 byte graças a nwellnhof
Experimente online!
Bloco de código anônimo que pega uma lista de três números e retorna Verdadeiro ou Falso.
Explicação
fonte
Excel, 33 bytes
fonte
bash, 61 bytes
Experimente online!
Entrada como argumentos da linha de comando, saída no código de saída (também produz saída no stdout como efeito colateral, mas isso pode ser ignorado).
A segunda parte (a partir de
&&((
) é bastante padrão, mas o interessante é o teste de coprime:fonte
&&
pode ser alterado para&
por causa da precedênciaJava 10,
6564 bytes-1 byte obrigado a @Shaggy .
Experimente online.
Explicação:
fonte
a==1
->a<2
para salvar um byte.05AB1E ,
121110 bytesGuardado 1 byte graças a Kevin Cruijssen
Experimente online! ou como um conjunto de testes
Explicação
fonte
RÆ_*`\‹*¿Θ
Test Suite .Python 2 ,
6967636255 bytesExperimente online!
Python 3 ,
5851 bytesExperimente online!
-7 bytes, graças a H.PWiz
fonte
gcd
nogcd
truque válido? E sea
não houver coprimec
?gcd(a,b)
, uma vez quegcd(a,b)
se dividea+b
Japt ,
16141311 bytesTente
fonte
>
segue©
.JavaScript (ES6),
54 43 4240 bytesExperimente online!
fonte
gcd(c,a)
.Wolfram Language
24 30 2826 bytesCom 2 bytes raspados pela maçaneta da porta. Mais 2 bytes eliminados por @jaeyong sung
fonte
CoprimeQ@##
para salvar 2 bytes.GCD@##==1
que economizaria 2 bytes #C # (compilador interativo do Visual C #) , 90 bytes
É executado para números de até 1e8, leva cerca de 35 segundos na minha máquina. Em vez de calcular o gcd como outros, a função apenas instancia uma matriz enorme e filtra os índices que não são divisores de a ou b e verifica quantos elementos restam. Em seguida, verifique se o elemento um mais o elemento dois é igual ao elemento três. Por fim, verifica se o primeiro elemento é menor que o segundo.
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 59 bytes
Experimente online!
fonte
ECMAScript Regex, 34 bytes
A entrada é unária, no domínio
^x*,x*,x*$
(x
s repetidos delimitados por,
).^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$
Experimente online! (Mecanismo regex .NET)
Experimente online! (Mecanismo de regex SpiderMonkey)
A pergunta diz "Três números inteiros, decimais escritos", portanto, isso pode não se qualificar (já que é necessário inserir unário), mas cria um regex puro tão elegante que espero que seja pelo menos apreciado.
No entanto, observe que, para que o fraseado seja literalmente interpretado, os envios de lambda e de função que usam argumentos inteiros também devem ser desqualificados, pois para aderir estritamente à especificação da pergunta, eles precisam receber a entrada na forma de uma string.
fonte
J , 27 bytes
Experimente online!
Inspirado na solução Perl de Jo King
fonte
C # (.NET Core) , 68 bytes
Sem Linq.
Experimente online!
fonte
Stax , 12 bytes
Execute e depure
fonte
Limpo , 43 bytes
Experimente online!
Semelhante a basicamente tudo o mais, porque o teste direto é o mesmo.
fonte
Pari / GP , 30 bytes
Economizou 2 bytes graças a @Shaggy .
Experimente online!
fonte
Befunge-98 (FBBI) , 83 bytes
Experimente online!
A entrada que é um triplo de números inteiros
[A,B,C]
é alimentada no Befunge como números inteiros separados por espaçoC B A
.fonte
Mathematica 35 bytes
se a ordem é importante:
ou...
fonte
Retina 0.8.2 ,
4241 bytesExperimente online! O link inclui casos de teste. Editar: salvou 1 byte graças a @Deadcode. Explicação:
Converta para unário.
Verifique se A e B não têm fator comum.
Verifique se A <B e A + B = C.
fonte
^(1+),(1+\1),\1\2$
para^(1+)(,1+\1)\2\1$
.A
operação de Retina na verdade não me salve bytes.Lisp comum, 51 bytes
Experimente online!
fonte