Sequência OEIS relacionada: A008867
Número triangular truncado
Uma propriedade comum dos números triangulares é que eles podem ser organizados em um triângulo. Por exemplo, pegue 21 e organize em um triângulo de o
s:
o oo ooo oooo ooooo oooooo
Vamos definir um "truncamento:" cortando triângulos do mesmo tamanho de cada canto. Uma maneira de truncar 21 é a seguinte:
. . . ooo oooo . ooo . . oo. .
(Os triângulos de .
são cortados do original).
Há 12 o
s restantes, então 12 é um número de triângulo truncado.
Tarefa
Seu trabalho é escrever um programa ou uma função (ou equivalente) que use um número inteiro e retorne (ou use qualquer um dos métodos de saída padrão) se um número é um número de triângulo truncado.
Regras
- Sem brechas padrão.
- A entrada é um número inteiro não negativo.
- Um corte não pode ter um comprimento lateral superior à metade do triângulo original (ou seja, os cortes não podem se sobrepor)
- Um corte pode ter comprimento lateral zero.
Casos de teste
Verdade:
0
1
3
6
7
10
12
15
18
19
Falsy:
2
4
5
8
9
11
13
14
16
17
20
Casos de teste para todos os números inteiros até 50: Link TIO
Isso é código-golfe , então os envios com a menor contagem de bytes em cada idioma ganham!
fonte
Respostas:
Haskell,
4645 bytesExperimente online!
fonte
Haskell , 46 bytes
Experimente online!
Depois de lançar um monte de teoria dos números no problema (obrigado @flawr), encontrei esta caracterização:
Isso significa, por exemplo, que 4n-1 pode não ser divisível por 5, a menos que seja divisível por 5 2 = 25 e o número total de 5 fatores é par.
Haskell não tem uma fatoração embutida, mas podemos improvisar. Se trabalharmos com fatorações em potências primas como 12 = 3 * 4 , podemos usar a instrução equivalente:
Podemos extrair a potência de um primo p aparecendo em k as
gcd(p^k)k
. Verificamos então que o resultado r não é 5 ou 7, módulo 12 comomod(r-5)12>2
. Observe que r é ímpar. Também verificamos os compósitos como p , sem uma maneira de diferenciá-los dos números primos, mas a verificação passará enquanto seus fatores o fizerem.Finalmente, negando
>2
para<3
e comutaçãoTrue
/False
na saída salva um byte por nos deixar usaror
em vez deand
.Uma caracterização relacionada é que os divisores de 4n-1 do módulo 12 têm mais 1 e 11 totais do que 5 e 7.
53 bytes
Experimente online!
fonte
Python 2 , 52 bytes
Experimente online!
Saídas
True
/False
invertidas. Usa esta caracterização:Verificamos se algum
8*n-2+3*b*b
é um quadrado perfeito para qualquer umb
de1
atén+1
. Evitamosb=0
porque isso dá um erro para uma raiz quadrada de um negativo quandon==0
, mas isso não pode prejudicar porque apenas o ímparb
pode funcionar.Feito de forma não recursiva:
Python 2 , 53 bytes
Experimente online!
fonte
range
. Aqui está próximo, porqueb>n+1
é um caso de base longo e0in
curto.R ,
4543 bytes-2 bytes graças ao Vlo
Experimente online!
Tenho certeza de que precisamos apenas verificar os primeiros
n
números triangulares para isso; a força bruta verifica sen
há diferenças entre pares dos números triangulares e seus triplos.fonte
scan()
n<-scan();n%in%outer(T<-cumsum(0:n),3*T,"-")
Gelatina , 10 bytes
Um link monádico que aceita um número inteiro e retorna um valor verdadeiro (uma lista não vazia) ou um valor falsey (uma lista vazia).
Experimente online! (o rodapé executa a representação do Python para mostrar os
[0]
resultados como estão)... ou vê uma suíte de testes (executa de 0 a 20 inclusive)
Quão?
Dado N, forma os primeiros números do triângulo N, subtrai N de cada um, divide cada resultado por 3 e mantém todos os resultados que são um dos primeiros números do triângulo N.
fonte
Pyt , 10 bytes
Experimente online!
Explicação:
fonte
ɐ-
fazHaskell , 48 bytes
Experimente online!
fonte
a==1
.J , 22 bytes
Experimente online!
Abordagem direta e um pouco mal praticada.
Explicação
fonte
e.2,@(!-/3*!)[:i.2+]
e.2,@(!-/3*!)1+i.,]
talvezMATL , 12 bytes
Saídas
1
para verdade,0
para falsidade.Experimente online! Ou verifique todos os casos de teste .
Como funciona, com exemplo
Considere entrada
6
fonte
Ruby ,
65 57 5248 bytesExperimente online!
Inspirado pela resposta python do xnor
fonte
Python 3 , 84 bytes
Experimente online!
fonte
05AB1E , 11 bytes
Experimente online!
Explicação
Isso se baseia no fato de que um número T é triangular se
8T+1
for um quadrado perfeito ímpar.Começamos na lista de triângulos que poderíamos truncar, calculamos os possíveis triângulos maiores com base neles e verificamos se é de fato triangular.
fonte
Japonês , 16 bytes
Experimente | Verifique todos os casos de teste
Explicação
Alternativo
Tente
fonte
Adicionar ++ , 36 bytes
Experimente online!
fonte