Hintergrund: Die Ramsey-Zahl gibt die minimale Anzahl von Eckpunkten im vollständigen Graphen so dass eine rot / blaue Kantenfärbung von mindestens ein rotes oder ein blaues . Grenzen für größere r, s sind sehr schwer zu ermitteln.V K V K V K r K s r , s
Ihre Aufgabe ist es, die Zahl für 1 \ le r, s \ le 5 auszugeben .
Eingang
Zwei ganze Zahlen mit und .
Ausgabe
wie in dieser Tabelle angegeben:
s 1 2 3 4 5
r +--------------------------
1 | 1 1 1 1 1
2 | 1 2 3 4 5
3 | 1 3 6 9 14
4 | 1 4 9 18 25
5 | 1 5 14 25 43-48
Beachten Sie, dass und austauschbar sind: .
Für Sie eine beliebige ganze Zahl zwischen und einschließlich ausgeben . Zum Zeitpunkt der Veröffentlichung dieser Frage sind dies die bekanntesten Grenzen.43 48
5,5
), dass dies unter Kolmogorov-Komplexität passen kann (oder passt nur eine Nicht-Eingabe, feste Ausgabe?)Antworten:
JavaScript (ES6),
51 bis49 ByteÜbernimmt Eingaben in der Currying-Syntax
(r)(s)
.Probieren Sie es online!
Wie?
In erster Näherung verwenden wir die Formel:
Andernfalls fügen wir einen Wert hinzu, der aus einer Nachschlagetabelle ausgewählt wurde, deren Schlüssel definiert ist durch:k
quelle
JavaScript (Node.js) ,
56-55ByteProbieren Sie es online! Mir ist aufgefallen, dass die Tabelle dem Pascalschen Dreieck ähnelt, jedoch mit Korrekturfaktoren. Bearbeiten: 1 Byte dank @sundar gespeichert.
quelle
x*y>19
mitx+y>8
.Jelly ,
1716 BytesProbieren Sie es online! Oder sehen Sie sich eine Testsuite an .
Ersetzen derR(5,5) 43 44 45 46 47 48
0
mit+
,,
,-
,.
, oder ,/
um Als , die gleich 43 , 44 , 45 , 46 , oder 47 jeweils (statt dem 48 hier).Wie?
Da , können wir feststellen, dass:R(r,s)≤R(r−1,s)+R(r,s−1)
Dies ist
’ScḢƊ
und würde erzeugen:Wenn wir für jedes Mal eins abziehen, wenn neun in das Ergebnis einfließen, richten wir drei weitere nach unserem Ziel aus (dies wird erreicht mit
_:¥9
):Die verbleibenden zwei falschen Werte und 63 können dann unter Verwendung von Jellys Atom- und Codepage-Indizes mit übersetzt werden .32 63
y
“ ı?0‘y
quelle
Python 2 , 62 Bytes
Probieren Sie es online!
Python 2 , 63 Bytes
Probieren Sie es online!
Das ist lächerlich, ich werde es bald bereuen, dies gepostet zu haben ... Aber äh, ¯ \ _ (ツ) _ / ¯. Dank unseres freundlichen Jonathan Allan 1 Byte weg rasiert :). Wird wohl in Kürze um ca. 20 Bytes überholt sein ...
quelle
Julia 0,6 ,
71615957 BytesProbieren Sie es online!
Ungolfed (naja, etwas besser lesbar):
Was tut es?
Übernimmt die Eingabe als Array
A
mit r und s. Entpackt das Array mit r und s mit der kleineren Nummer als r(r,s)=sort(A)
.r<3?s^(r-1)
r<3?s^~-r
Für die anderen begann ich zu bemerken, dass die Ausgabe ist:
(Ich habe anfänglich mit f (5,5) = 45 gearbeitet.)
Dies sah nach einem potenziell verwendbaren Muster aus - sie haben alle eines
2r
gemeinsam: 17 ist 8 * 2 + 1, 35 ist 17 * 2 + 1, 10 ist 3 * 3 + 1. Ich begann mit dem Extrahieren des Basiswerts aus [0, 3, 8] als[0 3 8][s-2]
(dies wurde später kürzer(s^2-4s+3)
).Der Versuch, die korrekten Werte für r = 3, 4 und 5 zu erhalten, durchlief viele Phasen, einschließlich
und
Letzteres zu erweitern und zu vereinfachen, führte zum gebuchten Code.
quelle
x86,
4937 BytesNicht sehr optimiert, nur die Eigenschaften der ersten drei Zeilen der Tabelle ausnutzen. Während ich dies schrieb, wurde mir klar, dass der Code im Grunde genommen eine Sprungtabelle ist, so dass eine Sprungtabelle viele Bytes sparen kann. Eingabe in
eax
undebx
Ausgabe ineax
.-12 von Fällen der Kombination
r >= 3
in eine Lookup - Tabelle (ursprünglich nurr >= 4
) und mit Peter Cordes Vorschlag voncmp
/jae
/jne
mit den Flags noch gesetzt , so dassr1,r2,r3
zeichnen sich durch nur einecmp
! Indizieren Sie auch intelligent mit einem konstanten Versatz in die Tabelle.Hexdump
quelle
r1: cmp $2, %al
/jae r2
setzt Flags so, dass Sie sier2: jne r3
ohne andere verwenden könnencmp
. Das Sprungziel inr1
kann einret
anderes sein und durchfallenr2
. (Den Zustand umkehren). Übrigens, dies ist die erste Code-Golf-Frage, die ich mir angesehen habe, nachdem ich Ihre Frage zur Verwendung der Short-Jump-Offset-Tabelle auf SO beantwortet habe. Ich nehme an, ich habe den richtigen von HNQ ausgewählt :)r4
kann eine Anweisung sein:mov table-8(%ebx,%eax), %al
. IDK, warum Sie eine separate Anweisung verwendet haben, um die Tabellenadresse in ein Register zu verschieben. Eines der wichtigsten Dinge ist jedoch, dass konstante Offsets von Symbolen keine zusätzlichen Kosten verursachen, da sie bereits zu einer absoluten 32-Bit-Adresse zusammengesetzt sind. Objektdateiformate können Symbolreferenzen mit einem Versatz darstellen, wenn der Linker die endgültige Adresse angibt, damit Compiler nicht jedes Feld einer Struktur oder jedes Array-Element mit einer separaten Beschriftung versehen müssen ...ret
für r1 und r2 zu speichern .mov %ebx, %eax
nach bewegenexit
, so dass er immer nach r3 läuft und r2 dorthin springt oder in r3 durchfällt? Dann r3 erzeugt sein Ergebnis in BL mitsub %bl, %al
/cmp $10, %al
/jne exit
/add $4, %bl
(neutral Größenänderung: cmp vs. add verwenden können die al, imm8 Kurzform). Der Gewinn ist, dass es dasret
von r2 auch entfernt. Hmm nein das geht nicht, naja vielleicht wenn du die tabelleneinträge negierst oder so? Und das verstopft wahrscheinlich etwas, das Sie brauchen. Ich habe das nicht durchdacht und habe leider keine Zeit dazu: /Python 2 , 70 Bytes
Probieren Sie es online!
quelle
MATL,
2521 BytesProbieren Sie es auf MATL Online aus
Versuch, Jonathan Allans Jelly-Antwort auf MATL zu portieren.
+2-lGqXn
- das gleiche wie diese Antwort: berechnent8/k
- duplizieren Sie das, teilen Sie durch 8 und Boden-
- subtrahiere das vom vorherigen Ergebnis (Wir subtrahieren, wie oft 8 in der Zahl vorkommt, anstatt 9 in der Gelee-Antwort. Das Ergebnis ist für alle gleich, mit Ausnahme der 35 und 70, die hier 31 und 62 ergeben.)t20/k
- Dupliziere auch dieses Ergebnis, dividiere es durch 20 und fülle (ergibt 0 für bereits korrekte Ergebnisse, 1 für 31, 3 für 62)6*
- multiplizieren Sie das mit 6-
- subtrahiere das vom Ergebnis (31 - 6 = 25, 62 - 18 = 44)Älter:
Probieren Sie es auf MATL Online aus
quelle
Python 3 , 74 Bytes
Probieren Sie es online!
quelle
Proton , 52 Bytes
Near-Port meiner Python-Antwort .
Probieren Sie es online!
quelle
Java 8, 62 Bytes
Lambda-Funktion, Portierung der JavaScript- Antwort von Arnauld . Probieren Sie es hier online aus .
Java, 83 Bytes
Rekursive Funktion, Port von Neils JavaScript- Antwort . Probieren Sie es hier online aus .
quelle
C (gcc), 57 Bytes
Rekursive Funktion, Port von Neils JavaScript- Antwort . Probieren Sie es hier online aus .
C (gcc) 63 Bytes
Die JavaScript- Antwort von Port of Arnauld . Probieren Sie es hier online aus .
quelle