Definição
Um "triângulo inteiro" é aquele com coordenadas inteiras. Por exemplo, o triângulo a seguir é um triângulo inteiro:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
Tarefa
O objetivo deste desafio é contar todos os triângulos inteiros (até congruência) com perímetro menor que n.
Entrada e saída
O argumento será fornecido como um número inteiro e a saída deve ser o número de triângulos com perímetro estritamente menor que o argumento.
Exemplos
O menor triângulo inteiro por perímetro é congruente para
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Os próximos menores são:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2) ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5) ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5) ≈ 5.886
Casos de teste:
a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875
Eu tenho coordenadas para cada um dos triângulos nesta Gist .
Advertências
Observe que dois triângulos não congruentes podem ter o mesmo perímetro:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
Também tenha em mente que a desigualdade é estrita ; o triângulo pitagórico 3-4-5 deve ser contado por um (13), não um (12).
Pontuação
Isto é código-golfe - o código mais curto vence!
fonte
Respostas:
Geléia ,
28272523 bytesExperimente online!
Como funciona
fonte
Geléia ,
3833 bytes-1 graças a Erik the Outgolfer (inverter
SP¬+÷/E$
usandoSẠ>÷/E$
e usar emÇÐf
vez deÇÐḟ
) -1 graças ao Sr. Xcoder (não há necessidade de achatar antes da classificação)-2 graças ao Sr. Xcoder (
S<¥Ðf³L
->S€<³S
)-1 roubando um truque de uma revisão anterior da resposta de Dennis (
ṗ2’Œc
->p`⁺’
- casos mais redundantes, mas mais golfista!)Um programa completo que pega um número inteiro e imprime o resultado.
Experimente online!(muito lento para concluir os casos de teste acima de 20 anos abaixo dos 60 anos)
Quão?
fonte
[(a+c)×(b+d)]
->(a+c)×(b+d)
,[c÷a,d÷b]
->[a÷c,b÷d]
,c÷a==d÷b
->a÷c==b÷d
," c÷a==d÷b
->" a÷c==b÷d
. Função .nan
.SP¬
e não abusa realmente da divisão por zero resultados (acho que isso pode ser explícito com um valor real ou) #¬+
por<
. (EDIT: você não precisa substituí-loP
porẠ
, como você está usando apenas coordenadas não-negativas.)7
retornos21
por exemplo)JavaScript (ES7), 157 bytes
Casos de teste
Somente valores pequenos podem ser calculados com o tamanho da pilha padrão da maioria dos mecanismos JS.
Mostrar snippet de código
Versão não recursiva, 165 bytes
Casos de teste
Essa versão também funciona para um (30) e um (40) , mas isso levaria muito tempo para o snippet.
Mostrar snippet de código
fonte
Julia 0.6 , 135 bytes
Faça uma iteração sobre possíveis pontos não originários para formar o triângulo, represente-os como números complexos, classifique os comprimentos dos quadrados e mantenha-os em um conjunto para verificar se há congruência. Evita pontos colineares, verificando se o ângulo entre seus números complexos é diferente de zero. Em seguida, ele retorna o comprimento do conjunto. É mais curto usar os comprimentos diretamente, mas você obtém a resposta errada para
a(40)
. A solução é lenta demais para ser executadaa(40)
devido a um aviso de descontinuação, por isso também tenho um link para uma versão mais rápida.Experimente online!
Versão mais rápida e mais longa, com obsoleta evitação. Experimente online! Usa
sqrt.(g)
no lugar de obsoleto√g
para raiz quadrada elementar.fonte
Limpo ,
227... 143 bytesExperimente online!
Detecta triângulos congruentes comparando os três valores que somam para formar o perímetro e pontos colineares, verificando se os dois menores valores não somam ao terceiro.
Aqui está uma versão que usa uma abordagem mais rápida e com mais memória: Experimente online!
fonte
Start = @ 12.0
Não recebo saída, estou fazendo algo errado?