Quiconque est modérément dans l'optimisation de code de bas niveau connaît les dangers de la ramification, qu'elle soit implémentée comme des instructions if, des boucles ou des instructions select, la possibilité d'une mauvaise interprétation de la branche est une horrible perte de temps.
Les problèmes simples peuvent être résolus beaucoup mieux avec une arithmétique simple, alors faisons-le.
Pour les problèmes suivants, toutes les variables sont des entiers non signés de 32 bits et le seul code autorisé est des instructions en clair contenant uniquement les opérateurs suivants:
+ 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
=
Chaque ligne doit être constituée d'un identificateur de variable suivi d'un opérateur d'ensemble, suivi d'une expression.
Une expression peut ne pas contenir d'opérateurs d'ensemble supplémentaires, mais peut contenir des identificateurs de variable, des nombres littéraux et des parenthèses.
Le score de golf ne compte que le nombre d'opérateurs.
Exemple:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
A un score de 5 opérateurs.
Une solution peut inclure autant de variables que l’auteur le juge bon.
Les variables qui n'ont pas été définies ont une valeur 0
.
Dépassement supérieur et inférieur est autorisé, tous les numéros de négatifs UNDERFLOW, donc 3 - 5
est4294967294
, même dans le cadre d'une déclaration plus grande.
Tâche 1: Max
Deux valeurs, A
et B
, existent dans la portée, font leRESULT
variable contienne la plus grande de ces valeurs lorsque le programme se termine.
Tâche 2: médiane
Trois valeurs, A
, B
et C
, existent dans le domaine, faire leRESULT
variable de contenir la médiane de ces valeurs lorsque le programme de Met fin de.
Tâche 3: racine carrée
Une valeur, A
existe dans la portée, fait que la RESULT
variable contienne la racine carrée deA
, arrondie vers le bas, à la fin du programme.
Il est acceptable de poster une réponse à une ou deux des questions seulement, pour certains d'entre vous, trouver des solutions valables sera un défi.
0xFFFF_FFFF_FFFF_FFFF ^ x
et 0 - x
. Comment aurais-je pu oublier?
!
n'est assez trivial: x == 0
.
Boole[a-b]
?
-
mais~
pourrait être sympa (même si je ne sais pas pourquoi).