Calcule o n
módulo 12
para um número inteiro de 32 bits não assinado.
As regras:
- Deve funcionar para todos
n
entre 0 e 23. Outros números são opcionais. - Só devem usar qualquer um dos operadores
+-*
,~&^|
ou<<
,>>
como comumente definida em 32 uints bits. - Pode usar um número arbitrário de uints constantes.
- Não pode usar qualquer forma de ponteiro, incluindo matrizes ou
if
declarações, incluindo itens que são compilados para declarações if, como operadores ternários ou operadores "maiores que".
A pontuação:
- Operadores
+ -
e operadores bit a bit~ & ^ | << >>
(NOT, AND, XOR, OR, turnos de bits) dão uma pontuação de1
,*
dão uma pontuação de2
. - A pontuação total mais baixa vence.
math
number-theory
atomic-code-golf
nbubis
fonte
fonte
+-*
são somar, subtrair, multiplicar;~&^|
são bit a bit NOT, AND, XOR, OR; e<< >>
são turnos de bits.for i in x:y:z, .dostuff
?n % 12
a uma multiplicação e uma mudança como no prazer do hacker, então isso é trivial, apenas a saída do conjunto e verRespostas:
4
(O idioma é irrelevante)
Uau! Chegou a 4.
11-n
garantirá que todos os bits de ordem superior sejam definidos se e somente se n> = 12.48&(11-n)
== se n> 11 então 48 mais 0(48&(11-n))>>2
== se n> 11 então mais 12 0n-((48&(11-n))>>2)
é a respostafonte
n - (((11 - n) & 0xC0000000) >> 28)
. Bem feito, acho que não pode ser feito em menos de quatro.4
Uma solução com uma tabela de pesquisa (procura
i ^ (i % 12)
):4
Aqui está outra solução com 4 operações:
Ele pressupõe que o operando de contagem dos turnos de bits seja implicitamente aceito no mod 32, ou seja,
x >> -1
é o mesmo quex >> 31
.5
Outra abordagem, usando uma tabela de pesquisa:
fonte
bash - 1
por exemplo
fonte
stdin
estdout
? Claro, internamente, são indicadores, mas podemos desqualificar o Java porque ele usa aInteger
classe internamente para muitas coisas.C, little-endian - 2
Provavelmente isso é trapaça, mas acho que satisfaz as regras ...
fonte
= 0
vez de& 0x0
, o que deve contar como mais 2 operações. Mas +1 para a criatividade :)PHP - pontuação 0
Eu me pergunto como é possível que ninguém veio com isso diante de mim !!!
fonte
C, pontuação 5
Funciona até 23, não garantido acima disso.
((n+4)>>2)&4
retorna 4 para n> = 12. Adicione-o a n e obterá a resposta correta nos 4 bits menos significativos e, em seguida, truncará os outros bits.fonte
qualquer que seja o idioma: 5
não vai ganhar, mas participar porque é divertido e talvez porque é mais fácil entender do que outros:
isso é equivalente a
isso é equivalente porque, quando você adiciona 20 a 12, obtém 32 e, assim, o 5º bit se torna 1. Isso é apenas quando n> 1 como 32 é o menor número em que o 5º bit se torna 1.
Observe também que é facilmente expansível para uma faixa mais alta, como você pode fazer
atingir um alcance até 35
fonte
Python 2.x - 4
É
=
um operador?Nesse caso, a pontuação é 6.
A solução do BTW @steveverrill também pode ser usada diretamente no Python.
Funciona para o intervalo 0 .. 23
Então o que está acontecendo ? Multiplique por 357913942 e divida por 2 ^ 32 (ou deslocamento para a direita 32)
fonte
C - 6
fonte
Cobra - 2 (ou 3)
Isso pode estar distorcendo um pouco as regras, mas pedi e tive permissão para usar isso.
Também funciona para qualquer número.
fonte
Kona - 5
Pode ser inválido porque não tenho certeza se o operador de andar é permitido, mas tenho dois
*
e um menos:O que deve funcionar para qualquer número inteiro.
fonte