Definición
Un "triángulo entero" es uno con coordenadas enteras. Por ejemplo, el siguiente triángulo es un triángulo entero:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
Tarea
El objetivo de este desafío es contar todos los triángulos enteros (hasta la congruencia) con un perímetro menor que n.
Entrada y salida
El argumento se dará como un entero, y la salida debe ser el número de triángulos con un perímetro estrictamente menor que el argumento.
Ejemplos
El triángulo entero más pequeño por perímetro es congruente con
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Los siguientes más pequeños son:
(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 prueba:
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
Tengo coordenadas para cada uno de los triángulos en este Gist .
Advertencias
Observe que dos triángulos no congruentes pueden tener el mismo perímetro:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
También tenga en cuenta que la desigualdad es estricta ; el triángulo pitagórico 3-4-5 debe contarse con un (13), no un (12).
Puntuación
Este es el código de golf: ¡ el código más corto gana!
fuente
Respuestas:
Jalea ,
28272523 bytesPruébalo en línea!
Cómo funciona
fuente
Jalea ,
3833 bytes-1 gracias a Erik the Outgolfer (invierte
SP¬+÷/E$
usandoSẠ>÷/E$
y usando enÇÐf
lugar deÇÐḟ
) -1 gracias a Mr. Xcoder (no es necesario aplanar antes de la clasificación)-2 gracias a Mr. Xcoder (
S<¥Ðf³L
->S€<³S
)-1 robando un truco una revisión anterior de la respuesta de Dennis (
ṗ2’Œc
->p`⁺’
- ¡casos más redundantes pero más golfistas!)Un programa completo que toma un número entero e imprime el resultado.
Pruébalo en línea! (demasiado lento para completar casos de prueba 20+ en menores de 60 años)
¿Cómo?
fuente
[(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
. Función .nan
.SP¬
y no abusa de la división por cero (supongo que podría ser explícito con un real o)¬+
con<
. (EDIT: no es necesario reemplazarP
conẠ
, ya que sólo está utilizando coordenadas no negativos.)7
vuelve,21
por ejemplo)JavaScript (ES7), 157 bytes
Casos de prueba
Solo se pueden calcular valores pequeños con el tamaño de pila predeterminado de la mayoría de los motores JS.
Mostrar fragmento de código
Versión no recursiva, 165 bytes.
Casos de prueba
Esta versión también funciona para un (30) y un (40) , pero eso tomaría demasiado tiempo para el fragmento.
Mostrar fragmento de código
fuente
Julia 0.6 , 135 bytes
Itere sobre los posibles puntos que no son de origen para formar el triángulo, los representa como números complejos, clasifica las longitudes de los cuadrados y los mantiene en un conjunto para verificar la congruencia. Evita los puntos colineales al verificar que el ángulo entre sus números complejos no sea cero. Luego devuelve la longitud del conjunto. Es más corto usar las longitudes directamente, pero obtienes la respuesta incorrecta
a(40)
. La solución es demasiado lenta para llegar a ejecutarsea(40)
debido a una advertencia de desaprobación, por lo que también tengo un enlace a una versión más rápida.Pruébalo en línea!
Versión más rápida y más larga con desuso evitado. Pruébalo en línea! Usos
sqrt.(g)
en lugar de obsoletos√g
para la raíz cuadrada de elementwise.fuente
Limpio ,
227... 143 bytesPruébalo en línea!
Detecta triángulos congruentes mediante la comparación de los tres valores que suman para hacer el perímetro, y los puntos colineales al verificar que los dos valores más pequeños no suman el tercero.
Aquí hay una versión que utiliza un enfoque más rápido y con más memoria: ¡ Pruébelo en línea!
fuente
Start = @ 12.0
No obtengo ningún resultado, ¿estoy haciendo algo mal?