Ich versuche, etwas C ++ zu spielen. Ist es möglich, diesen Zustand zu verkürzen?
X > 3 & X - Y > 1
(Abgesehen vom Entfernen von Leerzeichen natürlich.)
Also X
ist zumindest 4
doch X >= Y + 2
.
X
und Y
sind ganze Zahlen im Intervall [0,5].
Ich habe versucht, eine bitweise Formel zu finden, bin aber gescheitert.
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
quelle
quelle
x*x-y*y>9
. Es ist die gleiche Anzahl von Zeichen, aber Sie können möglicherweise eine Verknüpfung / Alternative zu diesem Ansatz finden. Nur eine andere Sichtweise.3<x>y+1
y+3<2^x
aber Cs Operator-Priorität ist anders. Ich wette, es gibt eine 7-Zeichen-Lösung. Ich muss nur mein Skript ändern, um stattdessen die Priorität des C-Operators zu berücksichtigenAntworten:
Nachdem ich jede nützliche Kombination von Symbolen unter 9 Zeichen brutal erzwungen habe, habe ich festgestellt, dass es keine kleinere Lösung als gibt
x>3&x-y>1
.Zum Spaß hier einige funky 9-Zeichen-Lösungen, die der Brute Forcer gefunden hat:
Brute Forcing wurde in Python durchgeführt, wobei Top-Down-Syntaxbäume erstellt wurden, in denen kein Kind einen Operator haben darf, dessen Priorität gemäß den Regeln von C niedriger ist als die des Elternteils. Um die Möglichkeiten einzuschränken, habe ich nur einstellige Literale zugelassen, und kein binärer Operator darf zwei konstante untergeordnete Elemente haben. Ich konnte mir unmöglich eine Lösung vorstellen, die ein zweistelliges Literal hätte oder eine Konstante, die einen binären Operator verwendet. Dann wurde jeder Ausdruck auf [0, 5] ausgewertet und wenn er übereinstimmt, wird er gedruckt.
quelle
x*x-y*y>9
. Vielleicht sollten Sie auch mehrstellige Konstanten ausprobieren? (auch in Klammern)xy
und 2 die Klammern sein müssen, wobei nur 4 Zeichen Logik übrig bleiben. Ich werde versuchen, den Brute Forcer mit zweistelligen Konstanten auszuführen, aber ich glaube wirklich nicht, dass dies zu einem Ergebnis führen wird.(a#b)$c
ist das Format. Vonabc
zwei mussx
und seiny
, wobei 3 mögliche Positionen für[0-9xy]
und nur ein Flip von übrig bleibenxy
. Nur interessante Betreiber sind+-*/&|^<>
, also 9 Möglichkeiten. Somit sind die Gesamtmöglichkeiten weniger als 3 * 12 * 2 * 9 * 9 <5832.Als Antwort auf die (fantastischen) Golfplätze von
orlp
:Die Richtigkeit muss an erster Stelle stehen
int16_t
- so gibt die Annahme. Wahrscheinlich müssten die Bitverschiebungen für 32-Bit-Ints +16 betragen (das ist heutzutage so ziemlich überall). Das macht sie zu einem größeren Charakter ...Die einzige "richtige" Art, es zu schreiben, ist IMO
(x>3) && (x > y+1)
, die aufx>3&x>y+1
(9 Zeichen) reduziert werden kann .(Sie müssen wirklich die Möglichkeit von (größeren) vorzeichenlosen Typen in Betracht ziehen, insbesondere da vorzeichenlose Typen in C ++ - Ausdrücken "ansteckend" sind. Ich nehme an, dass das "Korrigieren" mit den entsprechenden
static_cast<>
s den Zweck irgendwie zunichte machen würde ...)AKTUALISIEREN
Mit den folgenden Tests konnte ich herausfinden, welche Ausdrücke tatsächlich zuverlässig funktionieren:
Live On Coliru
Ausgabe auf coliru, hier als Referenz:
Zusammenfassung
Da dies etwa die "Kosten" für das Wiederholen von Quellcodeelementen betrifft, können Sie eine Nachschlagetabelle verwenden. Sie können die Nachschlagetabelle "ausblenden", also ist es auch so
oder
Natürlich können Sie pedantisch und stumpf sein und die LUT umbenennen
Meine "Version" ist also ... 7 Zeichen . (Oder machen Sie, wenn eine Funktion und
L(x,y)
noch kürzer ist).Oder, was noch wichtiger ist: korrekt, überprüfbar und wartbar.
quelle