A questão: dado um número n
≥ 2, quantos pares de pontos distintos em uma rede n
tridimensional n x n x n x n x n x n ... x n
, onde as coordenadas variam de 0
até n - 1
, estão a uma distância pelo menos n
distante? Os pares {(2,1,3,1), (3,2,1,3)}
e {(3,2,1,3), (2,1,3,1)}
não são considerados distintos um do outro, pois consistem nos mesmos dois pontos na ordem inversa. Observe que o número total de pares cresce muito rapidamente. O número de pares totais vai 6
, 351
, 32 640
, 4 881 250
, 1 088 367 840
, etc.
Casos de teste:
2 -> 0 (all pairs are at most a distance of sqrt(2) < 2 apart)
3 -> 28 (They must either be (2,2,1) or a permutation apart, or (2,2,2) apart. Each corner
has three non-corner (2,2,1) points corresponding to it. And each corner is associated
with a corner pair that is a (2,2,2). Thus. 3.5 * 8 = 28.
4 -> 4,888
5 -> 1,501,948
6 -> 486,039,360 (I would like someone to verify this if possible)
Seu código deve funcionar para n <= 5, pelo menos em teoria. Não codifique, isso é uma brecha padrão.
code-golf
combinatorics
fraudado
fonte
fonte
n=15
facilmenten=20
, mas sofre fortemente de transbordamentoall pairs are at most a distance of sqrt(2) apart
mas isso deve ser especificado com mais clareza.Respostas:
MATL , 12 bytes
Experimente online!
Explicação
fonte
Geléia ,
1413 bytes1 byte graças a Dennis.
Experimente online!
Versão rápida dos maffs
Experimente online!
fonte
æ.`½
porÆḊ€
.n=5
, mas não em um minuto. (pode demorar mais do que a idade do universo, tenha cuidado) Este não é um código mais rápido; então, por que se preocupar em fazer seu código rodar mais rápido?Python 2 ,
137133 bytesSr. Xcoder & ovs: -4 bytes. Experimente online!
fonte
f=
)J , 40 bytes
Experimente online!
O TIO atingirá o tempo limite de 5 se você usar precisão estendida (em
5x
vez de5
). Não vou me incomodar em tentar com 6 no meu computador, pois isso sem dúvida trará o intérprete.Procurando conselhos sobre golfe, especificamente a parte que passou após a geração das coordenadas. Eu sinto que deveria haver uma maneira de remover algumas das tampas.
]<:[:+/&.:*:"1
pode ser substituído equivalentemente por*:<:[:+/"1[:*:
.Explicação
Esta explicação é feita no REPL (três espaços indicam um comando, nenhum espaço indica uma saída). Eu estarei construindo a resposta.
Gerando as coordenadas
#~ #: i.@^~
fornece todas as coordenadas com as quais nos preocupamos na treliça.^~
é um número elevado a si mesmo ei.
fornece o intervalo [0, n) onde n é sua entrada.@
compõe essas funções.#~
copia um número sozinho, por exemplo#:
converte seu argumento da direita na base especificada pela matriz fornecida como argumento da esquerda. O número de dígitos na matriz corresponde ao número de dígitos na saída base (e você pode ter uma base mista). Por exemplo,Então, todos juntos, isso diz enumerar todos os valores base n (onde n é a entrada) até n ^ n, efetivamente fornecendo nossas coordenadas.
Obtendo as distâncias entre cada par
Primeiro, tomamos a diferença de cada coordenada com todas as outras usando a díade
/
-table e~
-reflexive. Observe que isso não explica o fato de que a ordem não importa para os pares: isso gera distâncias duplicadas.Em seguida, usamos esse verbo
+/&.:*:
em cada coordenada (em"1
, também conhecido como um). Este verbo é soma (+/
) sob (&.:
) quadrado (*:
). Sob aplica o verbo da direita (quadrado), em seguida, coleta seus resultados e o fornece como argumento para o verbo da esquerda (soma). Em seguida, aplica o inverso do verbo certo (que seria a raiz quadrada).Sem surpresa, muitas distâncias são as mesmas.
Contando as distâncias maiores ou iguais à entrada
A última parte é ver se a distância é maior ou igual à entrada usada
]<:
. Em seguida, todos os resultados são somados usando+/^:_
(soma até convergir), contando o número de valores verdadeiros. Então esse valor é dividido por 2 (2%~
, aqui~
significa trocar a ordem dos argumentos fornecidos%
). A razão pela qual podemos dividir por 2 é porque, para cada pareamento de verdade, haverá outro para a ordem invertida, exceto para os pares que são coordenados consigo. Tudo bem, porém, já que esses resultam em uma distância de 0.fonte
+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~