Secuencia OEIS relacionada: A008867
Número triangular truncado
Una propiedad común de los números triangulares es que se pueden organizar en un triángulo. Por ejemplo, tome 21 y organícelo en un triángulo de o
s:
o oo ooo oooo ooooo oooooo
Definamos un "truncamiento:" cortando triángulos del mismo tamaño desde cada esquina. Una forma de truncar 21 es la siguiente:
. . . ooo oooo . ooo . . oo. .
(Los triángulos de .
se cortan del original).
Quedan 12 o
s, por lo que 12 es un número de triángulo truncado.
Tarea
Su trabajo es escribir un programa o una función (o equivalente) que tome un número entero y devuelva (o use cualquiera de los métodos de salida estándar) si un número es un número de triángulo truncado.
Reglas
- No hay lagunas estándar.
- La entrada es un entero no negativo.
- Un corte no puede tener una longitud lateral superior a la mitad de la del triángulo original (es decir, los cortes no pueden solaparse)
- Un corte puede tener un lado de longitud cero.
Casos de prueba
Verdad:
0
1
3
6
7
10
12
15
18
19
Falsy
2
4
5
8
9
11
13
14
16
17
20
Casos de prueba para todos los enteros hasta 50: TIO Link
Este es el código de golf , por lo tanto, las presentaciones con el recuento de bytes más corto en cada idioma ganan.
fuente
Respuestas:
Haskell,
4645 bytesPruébalo en línea!
fuente
Haskell , 46 bytes
Pruébalo en línea!
Después de haber arrojado un montón de teoría de números al problema (gracias @flawr), encontré esta caracterización:
Esto significa, por ejemplo, que 4n-1 puede no ser divisible por 5 a menos que sea más divisible por 5 2 = 25 y el número total de 5 factores sea par.
Haskell no tiene una factorización incorporada, pero podemos improvisar. Si trabajamos con factorizaciones en potencias primas como 12 = 3 * 4 , podemos usar la declaración equivalente:
Podemos extraer el poder de un primer p que aparece en k como
gcd(p^k)k
. Luego verificamos que el resultado r no es 5 o 7 módulo 12 comomod(r-5)12>2
. Tenga en cuenta que r es impar. También verificamos los compuestos como p , sin una forma de distinguirlos de los números primos, pero la verificación pasará siempre que lo hagan sus factores.Por último, negando
>2
a<3
y el cambioTrue
/False
de la producción ahorra un byte por permitirnos usaror
en lugar deand
.Una caracterización relacionada es que los divisores del módulo 12 tomado 4n-1 tienen más totales 1 y 11 que 5 y 7.
53 bytes
Pruébalo en línea!
fuente
Python 2 , 52 bytes
Pruébalo en línea!
Salidas
True
/False
volteado. Utiliza esta caracterización:Comprobamos si alguno
8*n-2+3*b*b
es un cuadrado perfecto para cualquierb
de1
an+1
. Lo evitamosb=0
porque da un error para una raíz cuadrada de un negativo cuandon==0
, pero esto no puede doler porque solo lo imparb
puede funcionar.Hecho de forma no recursiva:
Python 2 , 53 bytes
Pruébalo en línea!
fuente
range
. Aquí está cerca porqueb>n+1
es un caso base largo y0in
es corto.R ,
4543 bytes-2 bytes gracias a Vlo
Pruébalo en línea!
Estoy bastante seguro de que solo necesitamos verificar los primeros
n
números triangulares para esto; la fuerza bruta verifica sin
está en las diferencias por pares de los números triangulares y sus triples.fuente
scan()
n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Jalea , 10 bytes
Un enlace monádico que acepta un número entero y devuelve un valor verdadero (una lista no vacía) o un valor falsey (una lista vacía).
Pruébalo en línea! (el pie de página realiza una representación de Python para mostrar los
[0]
resultados tal como están)... o ver un conjunto de pruebas (se ejecuta de 0 a 20 inclusive)
¿Cómo?
Dado N, forma los primeros N números de triángulo, resta N de cada uno, divide cada resultado entre 3 y mantiene cualquier resultado que sea uno de los primeros N números de triángulo.
fuente
Pyt , 10 bytes
Pruébalo en línea!
Explicación:
fuente
ɐ-
haceHaskell , 48 bytes
Pruébalo en línea!
fuente
a==1
.J , 22 bytes
Pruébalo en línea!
Enfoque directo y algo mal golfizado.
Explicación
fuente
e.2,@(!-/3*!)[:i.2+]
e.2,@(!-/3*!)1+i.,]
tal vezMATL , 12 bytes
Salidas
1
para la verdad,0
para la falsedad.Pruébalo en línea! O verificar todos los casos de prueba .
Como funciona, con ejemplo
Considerar entrada
6
fuente
Ruby ,
65 57 5248 bytesPruébalo en línea!
Inspirado por la respuesta python de xnor
fuente
Python 3 , 84 bytes
Pruébalo en línea!
fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
Esto se basa en el hecho de que un número T es triangular si
8T+1
es un cuadrado perfecto impar.Comenzamos en la lista de triángulos que podríamos truncar, calculamos los posibles triángulos más grandes en función de ellos y verificamos si en realidad es triangular.
fuente
Japt , 16 bytes
Pruébalo | Verifique todos los casos de prueba
Explicación
Alternativa
Intentalo
fuente
Añadir ++ , 36 bytes
Pruébalo en línea!
fuente