Любой, кто в меру относится к низкоуровневой оптимизации кода, знает об опасностях ветвления, будь он реализован в виде операторов 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]
?
-
но~
может быть приятно (даже если я не знаю, для чего).