Любой, кто в меру относится к низкоуровневой оптимизации кода, знает об опасностях ветвления, будь он реализован в виде операторов if, циклов или операторов выбора, поэтому возможность ошибочного прогнозирования ветвления - ужасная трата времени.
Простые проблемы могут быть решены намного лучше с помощью простой арифметики, так что давайте сделаем это.
Для следующих задач все переменные представляют собой 32-разрядные целые числа без знака, и единственным допустимым кодом являются операторы простого набора, включающие только следующие операторы:
+ 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
=
Каждая строка должна состоять из идентификатора переменной, за которым следует оператор набора, за которым следует выражение.
Выражение может не содержать дополнительных операторов множества, но может содержать идентификаторы переменных, буквенные числа и круглые скобки.
Игра в гольф учитывает только количество операторов.
Пример:
myvar = ( ( ( foo + 5 ) * bar ) % 7 ) == 3
Имеет оценку 5 операторов.
Решение может включать столько переменных, сколько автор сочтет нужным.
Переменные, которые не были установлены, имеют значение 0.
Переполнение и сгущенного допускаются, все отрицательные числа Underflow, так 3 - 5это 4294967294, даже как часть большего заявления.
Задача 1: Макс
Два значения Aи Bсуществуют в области видимости, чтобы RESULTпеременная содержала наибольшее из этих значений при завершении программы.
Задача 2: Медиана
Три значения, A, Bи C, существует в объеме, сделать RESULTпеременный содержат медиану тех значений , когда программа завершает свою работу .
Задача 3: Квадратный корень
Одно значение, Aсуществующее в области действия, заставляет RESULTпеременную содержать квадратный корень A, округленный вниз, когда программа завершается.
Это нормально, чтобы опубликовать ответ только на один или два вопроса, для некоторых из вас просто будет трудно найти правильное решение.
0xFFFF_FFFF_FFFF_FFFF ^ xи 0 - x. Как я мог забыть?
!является также довольно тривиально: x == 0.
Boole[a-b]?
-но~может быть приятно (даже если я не знаю, для чего).