Qualquer um que esteja moderadamente otimizado para o código de baixo nível conhece os perigos da ramificação, seja ela implementada como instruções if, loops ou instruções select, a possibilidade de uma previsão incorreta de ramificação é uma terrível perda de tempo.
Problemas simples podem ser resolvidos muito melhor com aritmética simples, então vamos fazer isso.
Para os seguintes problemas, todas as variáveis são números inteiros não assinados de 32 bits e o único código permitido são instruções de conjunto simples que envolvem apenas os seguintes operadores:
+ addition
- subtraction
* multiplication
/ integer division, rounds down, division by 0 not allowed
% modulo
& binary and
| binary or
^ binary exclusive or
>> bitshift right
<< bitshift left
Logic operators, return 1 if the expression is true and 0 if it is false.
== equal
!= not equal
< less than
<= less than or equal
> greater than
>= greater than or equal
Set operator
=
Cada linha deve consistir em um identificador de variável seguido por um operador set, seguido por uma expressão.
Uma expressão pode não conter operadores de conjunto adicionais, mas pode conter identificadores de variáveis, números literais e parênteses.
A pontuação do golfe deve contar apenas o número de operadores.
Exemplo:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
Tem uma pontuação de 5 operadores.
Uma solução pode incluir tantas variáveis quanto o autor entender.
Variáveis que não foram definidas têm valor 0
.
Estouro positivo e negativo é permitido, todos os números negativos estouro negativo, então 3 - 5
é 4294967294
, como parte de uma instrução maior.
Tarefa 1: Máx.
Dois valores A
e B
existem no escopo fazem com que a RESULT
variável contenha o maior desses valores quando o programa termina.
Tarefa 2: mediana
Três valores, A
, B
e C
, existem no escopo, fazer a RESULT
variável conter a mediana desses valores quando o termina do programa.
Tarefa 3: Raiz quadrada
Um valor, A
existe no escopo, faz com que a RESULT
variável contenha a raiz quadrada de A
, arredondada para baixo, quando o programa termina.
Não há problema em postar uma resposta para apenas uma ou duas das perguntas; para alguns de vocês, encontrar soluções válidas será um desafio.
0xFFFF_FFFF_FFFF_FFFF ^ x
e 0 - x
. Como eu pude esquecer?
!
é também bastante trivial: x == 0
.
Boole[a-b]
?
-
mas~
poderia ser legal (mesmo que eu não saiba para quê).