Próbuję zagrać w golfa w C ++. Czy można skrócić ten warunek?
X > 3 & X - Y > 1
(Oczywiście oprócz usuwania białych znaków).
Więc X
jest przynajmniej 4
ale X >= Y + 2
.
X
i Y
są liczbami całkowitymi w przedziale [0,5].
Próbowałem znaleźć formułę bitową, ale nie udało mi się.
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
źródło
źródło
x*x-y*y>9
. Jest to ta sama liczba znaków, ale możesz znaleźć skrót / alternatywę dla tego podejścia. Po prostu inny sposób patrzenia na to.3<x>y+1
y+3<2^x
Pierwszeństwo operatora C jest inne. Założę się, że istnieje 7-znakowe rozwiązanie, po prostu muszę zmodyfikować skrypt, aby zajął się priorytetem operatora COdpowiedzi:
Po brutalnym wymuszeniu każdej użytecznej kombinacji symboli poniżej 9 znaków, znalazłem rozwiązanie nie mniejsze niż
x>3&x-y>1
.Oto zabawne rozwiązania dla 9 postaci, które brutalny forcer znalazł:
W Pythonie dokonano brutalnego wymuszania, budując odgórne drzewa składniowe, w których żadne dziecko nie może mieć operatora o priorytecie niższym niż jego rodzic, zgodnie z regułami języka C. Aby ograniczyć możliwości, dopuściłem tylko literały jednocyfrowe i żaden operator binarny nie może mieć dwóch stałych dzieci. Nie mogłem wymyślić żadnego rozwiązania, które miałoby dwucyfrowy literał lub takiego, który buduje stałą za pomocą operatora binarnego. Następnie każde wyrażenie zostało ocenione dla [0, 5] i jeśli pasuje, zostanie wydrukowane.
źródło
x*x-y*y>9
. Być może powinieneś również wypróbować stałe wielocyfrowe? (także nawiasy)xy
, a 2 muszą być nawiasami, pozostawiając tylko 4 znaki logiki. Spróbuję uruchomić brutalny forcer z dwucyfrowymi stałymi, ale tak naprawdę nie sądzę, że da to wynik.(a#b)$c
jest formatem. Zabc
dwóch musi byćx
iy
, pozostawiając 3 możliwe lokalizacje[0-9xy]
i tylko jedno odwróceniexy
. Są tylko interesujący operatorzy+-*/&|^<>
, więc 9 możliwości. Zatem łączne możliwości są mniejsze niż 3 * 12 * 2 * 9 * 9 <5832.W odpowiedzi na (niesamowite) golfa
orlp
:Poprawność musi być na pierwszym miejscu
int16_t
- więc nie jest to założenie. Prawdopodobnie przesunięcia bitów wymagałyby +16 dla 32-bitowych liczb całkowitych (w dzisiejszych czasach jest to prawie wszędzie). To sprawia, że postać jest większa ...Jedynym „poprawnym” sposobem na napisanie go jest IMO
(x>3) && (x > y+1)
, który może być golfowany dox>3&x>y+1
(9 znaków).(Naprawdę musisz wziąć pod uwagę możliwość (większych) typów niepodpisanych, zwłaszcza, że niepodpisana jest „zaraźliwa” w wyrażeniach C ++. Podejrzewam, że „naprawienie”, które przy pomocy odpowiednich
static_cast<>
znaków snułoby cel ...AKTUALIZACJA
Dzięki następującym testom udało mi się ustalić, które wyrażenia faktycznie działają niezawodnie:
Live On Coliru
Dane wyjściowe dotyczące coliru, tutaj w celach informacyjnych:
streszczenie
Ponieważ chodzi o „koszt” powtarzania elementów kodu źródłowego, możesz użyć tabeli odnośników. Możesz „ukryć” tabelę odnośników, więc jest to albo
lub
Oczywiście możesz być pedantyczny, tępy i zmienić nazwę LUT
Więc moja „wersja” to ... 7 znaków . (Lub wykonaj, jeśli funkcja i
L(x,y)
jest jeszcze krótsza).Lub, co ważniejsze: poprawne, testowalne i konserwowalne.
źródło