Я пытаюсь играть в гольф на C ++. Можно ли сделать это условие короче?
X > 3 & X - Y > 1
(Помимо удаления пробелов, конечно.)
Итак, X
по крайней мере, 4
но X >= Y + 2
.
X
и Y
являются целыми числами в интервале [0,5].
Я попытался найти некоторую побитовую формулу, но не смог.
code-golf
number
tips
c++
code-golf
popularity-contest
obfuscation
code-golf
c
code-golf
board-game
hexagonal-grid
code-golf
game
grid
code-golf
number
permutations
popularity-contest
math
graphical-output
number-theory
king-of-the-hill
code-challenge
compression
code-challenge
fastest-code
code-golf
math
ascii-art
animation
code-golf
popularity-contest
generation
counting
fastest-code
fastest-code
popularity-contest
image-processing
king-of-the-hill
code-golf
conversion
binary-tree
code-golf
math
number
rational-numbers
division
code-golf
restricted-source
hashing
atomic-code-golf
logic-gates
code-golf
function
code-challenge
puzzle-solver
ai-player
test-battery
popularity-contest
music
compression
code-golf
number
stack
atomic-code-golf
logic-gates
ascii-art
popularity-contest
code-golf
date
grid
code-challenge
game
code-golf
parsing
code-golf
math
geometry
sequence
popularity-contest
code-trolling
code-golf
string
restricted-source
code-golf
quine
king-of-the-hill
code-golf
math
code-golf
simulation
code-golf
ascii-art
code-challenge
sorting
optimization
Cristy
источник
источник
x*x-y*y>9
. Это то же количество символов, но вы можете найти ярлык / альтернативу этому подходу. Просто еще один способ взглянуть на это.3<x>y+1
y+3<2^x
, но приоритет оператора C отличается. Я держу пари, что есть решение с 7 символами, просто нужно изменить мой сценарий, чтобы вместо этого использовать приоритет оператора CОтветы:
После грубого форсирования каждой полезной комбинации символов длиной до 9 символов, я обнаружил, что есть не меньшее решение, чем
x>3&x-y>1
.Для забавы вот несколько причудливых 9-символьных решений, найденных грубой силой:
Грубое принуждение было сделано в Python, создавая синтаксические деревья сверху вниз, где ни один дочерний элемент не может иметь оператор с приоритетом ниже, чем его родительский в соответствии с правилами Си. Чтобы сократить возможности, я допустил только однозначные литералы, и ни у одного двоичного оператора не может быть двух постоянных детей. Я никак не мог придумать какое-либо решение, которое будет иметь двухзначный литерал, или решение, которое строит константу с использованием бинарного оператора. Затем каждое выражение было оценено для [0, 5] и, если оно совпадает, оно печатается.
источник
x*x-y*y>9
. Возможно, вам стоит попробовать и многозначные константы? (также в скобках)xy
, а 2 должны быть круглыми скобками, оставляя только 4 символа логики. Я попробую запустить брутфорсер с 2-значными константами, но я действительно не думаю, что это даст результат.(a#b)$c
это формат. Изabc
двух должно бытьx
иy
, оставляя 3 возможных местоположения[0-9xy]
, и только один бросокxy
. Только интересные операторы+-*/&|^<>
, так что 9 возможностей. Таким образом, суммарные возможности составляют менее 3 * 12 * 2 * 9 * 9 <5832.В ответ на (удивительные) гольфы
orlp
:Корректность должна быть на первом месте
int16_t
- так что есть предположение. Вероятно, сдвиги битов должны были бы +16 для 32-битных целых (это почти везде в наши дни). Это делает их персонаж больше ...Единственный «правильный» способ написать это, IMO, это
(x>3) && (x > y+1)
, возможно, игра в гольфx>3&x>y+1
( до 9 символов).(Вы действительно должны принять во внимание возможность (более крупных) типов без знака, тем более что unsigned-ness является «заразной» в выражениях C ++. Я предполагаю, что «исправление» того, что с помощью соответствующих
static_cast<>
s, как бы побеждает цель ...)ОБНОВИТЬ
С помощью следующих тестов я смог выяснить, какие выражения на самом деле работают надежно:
Live On Coliru
Вывод на колиру, вот для справки:
Резюме
Поскольку речь идет о «стоимости» повторяющихся элементов исходного кода, вы можете использовать таблицу поиска. Вы можете «спрятать» таблицу поиска, так что это либо
или же
Конечно, вы можете быть педантичным и тупым и переименовать LUT
Так что моя "версия" ... 7 символов . (Или сделай если функция и
L(x,y)
еще короче).Или, что еще более важно: правильно, проверяемо и ремонтопригодно.
источник