Dado um número de 1 a 24, imprima o número de beijo com o melhor conhecimento atual (alguns números terão mais de uma saída aceitável). O conhecimento da geometria não é essencial, pois as saídas estão todas listadas abaixo.
Na página da Wikipedia sobre o problema do número de beijos :
um número de beijo é definido como o número de esferas unitárias não sobrepostas que podem ser organizadas de modo que cada uma toque outra esfera unitária
Ou seja, dada uma esfera unitária, quantas esferas unitárias podem tocá-la sem que nenhuma delas se sobreponha? A pergunta será feita no espaço N dimensional, onde uma esfera é entendida como uma esfera dimensional N-1.
Por exemplo:
- no espaço bidimensional, um círculo unitário pode tocar em outros 6 círculos unitários.
- no espaço tridimensional, uma esfera unitária pode tocar em outras 12 esferas unitárias.
A página da Wikipedia lista valores para 1 a 24 espaços dimensionais. No entanto, algumas delas ainda não são conhecidas com precisão, portanto, apenas um limite inferior e superior são dados. A tabela é reproduzida aqui para permanecer fixa, independentemente de qualquer restrição futura dos intervalos devido a novas provas. As soluções são julgadas nessa tabela fixa, mesmo que a página da Wikipedia seja modificada no futuro.
Tabela de limites
Dimension Lower bound Upper bound
1 2 2
2 6 6
3 12 12
4 24 24
5 40 44
6 72 78
7 126 134
8 240 240
9 306 364
10 500 554
11 582 870
12 840 1357
13 1154 2069
14 1606 3183
15 2564 4866
16 4320 7355
17 5346 11072
18 7398 16572
19 10668 24812
20 17400 36764
21 27720 54584
22 49896 82340
23 93150 124416
24 196560 196560
Entrada
A dimensão: um número inteiro de 1 a 24 (inclusive).
Aqui "inteiro" indica que a entrada não terá parte fracionária - pode ser 2
ou 3
mas nunca 2.5
. Uma solução ainda pode receber a entrada como um flutuador ou uma string, por exemplo.
Saída
Um número no intervalo relevante, do limite inferior ao limite superior dessa entrada (inclusive).
A saída deve ser determinística (sempre a mesma para a mesma entrada).
A saída deve ser inteira. Por exemplo, para a entrada de 5
possíveis saídas válidas são 40
, 41
, 42
, 43
, 44
. Observe que isso é uma restrição ao valor, não ao tipo. É aceitável retornar um flutuador, desde que ele tenha zero parte fracionária. Por exemplo, 41.5
não seria válido, mas 41.0
seria válido.
Pontuação
Isso é código-golfe . Sua pontuação é o número de bytes no seu código. Para cada idioma, o vencedor é a solução com a menor pontuação.
fonte
Respostas:
Julia 0,6 , 52 bytes
Experimente online!
Quão?
Aprendizado de máquina! (Meio. Talvez. Na verdade não. )
c
ceil
fonte
MLBase
!!! Bem, as linhas em torno de ML estão borradas como sempre, mas isso provavelmente é básico demais para merecer o aprendizado de máquina de etiquetas. Por outro lado, é sempre útil obter uma palavra da moda!x86,
62595350 bytesMinha solução usa uma tabela de pesquisa de bytes e muda em 2 (sem cálculos de FP). As dimensões 9 a 23 fornecem margem de manobra suficiente para a mudança. Entrada
eax
e saídaecx
.-3 trocando
eax
eecx
já quecmp $imm, %al
é menor quecmp $imm, %cl
.-4 não tratando o caso N = 24 separadamente, mas aplicando o ajuste a todos os tempos 1024 casos.
-2 por não retornar cedo (estúpido)
-3 usando a tabela como deslocamento e em
movzbl
vez de zerar comxor
Hexdump (tabela em
.text
vez de.data
)fonte
.rodata
, de.data
qualquer maneira. (Ou no Windows, aparentemente.rdata
). A.rodata
seção é vinculada como parte do segmento de texto.shl
, especialmente quando seu número não está assinado (você usoumovzbl
carregá-lo, nãomovsbl
). Claro quesal
é apenas outro nome para o mesmo opcode. o gcc emitesal
, mas é muito raro vê-lo em código escrito à mão.JavaScript (ES6), 60 bytes
Experimente online!
Quão?
O último termouma24= 196560
Todos os outros termos são computados recursivamente, usando:
Ondeqn
levando aos seguintes rácios:
O resultado final é eventualmente encerrado e retornado.
Resumo dos resultados
Os resultados aproximados são fornecidos com 2 casas decimais.
fonte
Geléia ,
2926 bytesExperimente online!
Como funciona
fonte
JavaScript (Node.js) ,
12099 bytesEliminados 21 bytes. Redução de graças grandes para a sugestão de TSH para adicionar um buraco para o início da matriz (economia de dois bytes indo de
n-1
an
, e apontando para números redondos dentro dos superior limites baixos e, portanto, encolhendo-os de notação de ponto fixo, como1154
a notação exponencial gostar2e3
.Novamente, meu objetivo original era mostrar o quão leve seria o modo "burro" (por exemplo, não usar nenhuma matemática real, como a resposta de Arnauld. É impressionante que ainda houvesse espaço para reduzi-lo sem nenhuma transformação ou cálculo.
Experimente online!
O dobro da duração da resposta de Arnauld, 0 da complexidade.
JavaScript (Node.js) ,
129128 bytes(-1 byte, graças à sugestão de usar deslocamento de bits)
Experimente online!
Para atender às demandas de ser interessante, roubei a lógica da resposta x86 e construí a matriz a partir disso. Tornando 9 bytes mais longos. Mas um pouco mais interessante.
fonte
f=
, alterar(x)
parax
, adicionar um furo e alterarx-1
parax
. TIO ; e talvez arredondá-los TIO 99 bytesRúnico, 173 bytes
(Observe que o canto inferior direito deve ser contado em bytes: eles estão implicitamente preenchidos com espaços.)
O exe do TIO precisa de uma atualização em que esta resposta seja válida (e eu estou consertando outros buracos antes de pedir a Dennis para reconstruir). Mas insira um valor (certifique-se de adicionar espaço em branco nas linhas 2 e 3 se estiver usando mais de um caractere para o valor na primeira linha). Aqui está a maneira mais fácil de escrever os valores necessários:
Experimente online!
Funcionalmente, essa é uma porta da resposta Julia do sundar (mas o Runic não tem um comando para enviar
e
para a pilha (ou realmente, qualquer valor decimal), portanto, era necessária uma aproximação). A aproximação parae
entradas menores que 8 é mais precisa, pois a perda de precisão resultou em valores fora do intervalo permitido de saídas (por exemplo7
, produziria 125).Ceil()
foi realizado convertendo-se em um caractere e depois retornando a um número (isso falhou em valores excepcionalmente grandes, então a 40k eu o dividi por 100, faça a conversão para e para trás e multiplique por 100 novamente).Provavelmente há espaço para simplificar o arranjo (por exemplo, executar o ponto de entrada na vertical, abaixo ou encontrar uma maneira de comprimir as aproximações
e
), mas estou feliz por poder fazer o cálculo.161 bytes.
Atualização do intérprete:
Com a leitura da entrada de fixação por push , o Runic agora tem várias funções matemáticas e a capacidade de analisar seqüências de caracteres como dobras. Isso simplificará bastante essa resposta, mas deixarei como está para mostrar o esforço que coloco nela (adicionei as funções matemáticas de argumento único e a análise de string logo após a postagem: eu já tinha Sin / Cos / Tan no minha lista de tarefas, mas não tinha considerado Exp, Abs, Log etc. e estava ficando sem caracteres). O TIO deve ser atualizado nas próximas 24 a 48 horas, dependendo de quando Dennis o vir.
212,+16,+1c2*,+1cX,+
reduziria para ->1'eA
com esta atualização de intérprete.A
exibe um caractere e um valor e executa uma operação matemática nesse valor com base no caractere exibido (e
nesse caso, éExp()
eExp(1)
retorna e ).fonte