Dada lista de números inteiros {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}
. Para aqueles interessados, esses números são usados no cálculo dos dias úteis.
Dia da semana = (m[n] + d + y + y>>2 + y/400 - y/100) % 7;
, onde m[n]
- expressão que estou procurando, d
- dia do mês, y
- year - (month <= 2)
.
Construa a expressão que consiste em operadores aritméticos, lógicos e bit a bit, que produzirão um número n
inteiro positivo m
para que m % 7
seja igual ao n-ésimo número na lista.
Ramos, operadores ternários, pesquisas de tabela e ponteiros não são permitidos.
Pontuação:
1 - para | & ^ ~ >> <<
operadores
1.1 - para + - < > <= >= == != ! && ||
operadores
1.2 - para *
operador
1.4 - para / %
operadores
Responda com vitórias mais baixas.
Pessoalmente eu encontrei:
(41*n)>>4+((n+61)>>4)<<2
com pontuação 6.4. Eu pensei que isso seria difícil de encontrar, de modo a fornecer uma expressão própria para começar.
fonte
table lookups
Interessante fraseado, suponho ... #Respostas:
2
2.2Eu amo aritmética de precisão arbitrária.
Ou, se você não gosta de hex,
Teste:
fonte
4*n
e economizar 0,2 pontos escrevendo-a comon<<2
?7
. Meu melhor candidato da divisão de piso inteiroconst/n
entra em contradição comn=4
en=8
.const%n
o que poderia satisfazer tudo excepto n = 1,2 e 3.2.0
ou (pontuação 2.2):
Todos encontrados com força bruta :-)
fonte
for
loop duplo , testando todos os valores p, q para a fórmula(p >> i) ^ q
, depois fui tomar um café e 10 minutos depois vim ler os resultados.35,3
Eu suspeito que este pode ser o método menos eficiente para criar a lista:
Acabei de calcular a regressão polinomial. Estou tentado a ver que outro método terrível poderia ser tentado.
Notavelmente, eu poderia economizar 3,3 pontos se o resultado fosse arredondado. Neste ponto, não acho que isso importe.
fonte
3.2.
Solução baseada em zero:
Uma solução baseada:
Inicialmente, pensei que a
%7
operação seria contada também e%
sendo uma operação cara aqui, tentei resolvê-la sem ela.Cheguei a um resultado de 3.2 como este:
Eu estaria interessado em otimizações usando essa abordagem (sem
%
). Obrigado.fonte
(0426415305230 >> (i*3)) & 7
? Você pode ver os dígitos da saída na ordem inversa.Python (3)
Como existem muitas dessas perguntas atualmente, decidi criar um programa para resolvê-las automaticamente em 3 (ou 2) tokens. Aqui está o resultado para este desafio:
Prova de que isso funciona:
fonte
&
.