Tło: liczba Ramsey, daje minimalną liczbę wierzchołków w pełnej wykres tak, że czerwono / niebieski krawędź barwienia ma co najmniej jeden czerwony lub jedna niebieska . Granice dla większej są trudne do ustalenia.
Twoim zadaniem jest wyprowadzenie liczby dla .
Wejście
Dwie liczby całkowite z i .
Wynik
jak podano w tej tabeli:
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
Zauważ, że i są wymienne: .
Dla możesz wypisać dowolną liczbę całkowitą z przedziału od 43 do 48 włącznie. W chwili opublikowania tego pytania są to najbardziej znane granice.
5,5
), który może zmieścić się pod Kołmogorowa-złożoności (lub nie tylko zakaz wprowadzania, ustaloną wyjściową pasuje?)Odpowiedzi:
JavaScript (ES6),
5149 bajtówPobiera dane wejściowe w składni curry
(r)(s)
.Wypróbuj online!
W jaki sposób?
Jako pierwsze przybliżenie używamy wzoru:
1min ( r , s ) < 3 1
W przeciwnym razie dodajemy wartość wybraną z tabeli odnośników, której klucz jest zdefiniowany przez:k
źródło
JavaScript (Node.js) ,
5655 bajtówWypróbuj online! Zauważyłem, że tabela przypomina trójkąt Pascala, ale ze współczynnikami korekcji. Edycja: Zapisano 1 bajt dzięki @sundar.
źródło
x*y>19
zx+y>8
.Galaretka ,
1716 bajtówWypróbuj online! Lub zobacz zestaw testowy .
WymienićR(5,5) 43 44 45 46 47 48
0
z+
,,
,-
,.
lub/
do zadanej równej , , , lub odpowiednio, (zamiast tutaj).43 44 45 46 47 48W jaki sposób?
Ponieważ możemy stwierdzić, że:R(r,s)≤R(r−1,s)+R(r,s−1)
Jest to
’ScḢƊ
i spowodowałoby:Jeśli odejmiemy jeden za każdym razem, gdy dziewięć przejdzie do wyniku, dopasujemy trzy kolejne do naszego celu (osiąga się to za pomocą
_:¥9
):Pozostałe dwie niepoprawne wartości, i można następnie przetłumaczyć za pomocą atomu Jelly i indeksów strony kodowej za pomocą .6332 63
y
“ ı?0‘y
źródło
Python 2 , 62 bajty
Wypróbuj online!
Python 2 , 63 bajty
Wypróbuj online!
To niedorzeczne, wkrótce będę żałować, że to opublikowałem ... Ale eh, ¯ \ _ (ツ) _ / ¯. Ogolono 1 bajt dzięki naszemu miłemu Jonathanowi Allanowi :). Prawdopodobnie wkrótce zostanie obrzucony około 20 bajtami ...
źródło
Julia 0,6 ,
71615957 bajtówWypróbuj online!
Niegolfowany (cóż, nieco bardziej czytelny):
Co to robi?
Pobiera dane wejściowe jako tablicę
A
zawierającą r i s. Rozpakowuje tablicę do r i si mniejszą liczbą jako r, używając(r,s)=sort(A)
.Jeśli r wynosi 1, wyjście powinno wynosić 1. Jeśli r wynosi 2, wyjście powinno być tym, czym jest s. będzie dla r = 1, a dla r = 2. Tak więc lub krócej,sr−1 s0=1 s1=s
s 0 = 1 s 1 = s
r<3?s^(r-1)
r<3?s^~-r
W przypadku innych zacząłem od zauważenia, że dane wyjściowe to:
(Początkowo pracowałem dla f (5,5) = 45 dla wygody.)
Wyglądało to na potencjalnie użyteczny wzór - wszystkie mają
2r
ze sobą wspólnego, 17 to 8 * 2 + 1, 35 to 17 * 2 + 1, 10 to 3 * 3 + 1. Zacząłem od wyodrębnienia wartości podstawowej z [0, 3, 8], ponieważ[0 3 8][s-2]
(to później stało się krótsze(s^2-4s+3)
).Próba uzyskania poprawnych wartości dla r = 3, 4 i 5 przeszła przez wiele etapów, w tym
i
Rozszerzenie tego ostatniego i uproszczenie doprowadziło do opublikowania kodu.
źródło
x 86,
4937 bajtówNiezbyt zoptymalizowany, po prostu wykorzystując właściwości pierwszych trzech wierszy tabeli. Podczas pisania tego zdałem sobie sprawę, że kod jest w zasadzie tabelą skoków, dzięki czemu tabela skoków może zaoszczędzić wiele bajtów. Wejście
eax
iebx
wyjścieeax
.-12 poprzez połączenie przypadków z
r >= 3
tabelą odnośników (pierwotnie tylkor >= 4
) i użycie sugestii Petera Cordesa ocmp
/jae
/jne
z ustawionymi flagami, tak abyr1,r2,r3
można je było odróżnić tylko jednymcmp
! Również inteligentnie indeksuje do tabeli za pomocą stałego przesunięcia.Hexdump
źródło
r1: cmp $2, %al
/jae r2
ustawi flagi tak, abyś mógł ich używaćr2: jne r3
bez innegocmp
. Cel skokur1
może byćret
gdzieś indziej i wpaść dor2
. (Odwróć warunek). BTW, to jest pierwsze pytanie o golfa kodowego, na które patrzyłem po odpowiedzi na pytanie dotyczące użycia stołu do skoku krótkiego na SO. Chyba wybrałem właściwy z HNQ :)r4
może być jedna instrukcja:mov table-8(%ebx,%eax), %al
. IDK, dlaczego użyłeś osobnej instrukcji, aby przenieść adres tabeli do rejestru. Ale jedną z kluczowych rzeczy jest to, że stałe przesunięcia od symboli nie kosztują nic dodatkowego, ponieważ już się składa do 32-bitowego adresu bezwzględnego. Formaty obiekt może reprezentować bibl symbol offset dla kiedy wypełnia łącznika w końcowej adres więc kompilatory nie trzeba umieścić osobne etykiety na każdym polu struct lub każdego elementu tablicy ...ret
dla r1 i r2.mov %ebx, %eax
doexit
, więc zawsze biegnie po r3, a r2 tam skacze lub spada do r3? Następnie r3 daje wynik w BL za pomocąsub %bl, %al
/cmp $10, %al
/jne exit
/add $4, %bl
(neutralna zmiana rozmiaru: cmp vs. add może użyć krótkiej formy al, imm8). Zysk polega na tym, że usuwa równieżret
z R2. Hmm nie, to nie działa, może jeśli zignorujesz wpisy w tabeli lub coś takiego? I to prawdopodobnie blokuje coś, czego potrzebujesz. Nie przemyślałem tego i niestety nie mam na to czasu: /Python 2 , 70 bajtów
Wypróbuj online!
źródło
MATL,
2521 bajtówWypróbuj na MATL Online
Próba przeniesienia galaretki Jonathana Allana na MATL.
+2-lGqXn
t8/k
- powiel to, podziel przez 8 i piętro-
- odejmij to od poprzedniego wyniku (odejmujemy, ile razy 8 liczb zamiast 8 w odpowiedzi Galaretki. Wynik jest taki sam dla wszystkich oprócz 35 i 70, które tutaj dają 31 i 62).t20/k
- zduplikuj również ten wynik, podziel go przez 20 i piętro (daje 0 dla już poprawnych wyników, 1 dla 31, 3 dla 62)6*
- pomnóż to przez 6-
- odejmij to od wyniku (31 - 6 = 25, 62 - 18 = 44)Starsze:
Wypróbuj na MATL Online
źródło
Python 3 , 74 bajty
Wypróbuj online!
źródło
Proton , 52 bajty
Bliski port mojej odpowiedzi w języku Python .
Wypróbuj online!
źródło
Java 8, 62 bajty
Funkcja Lambda, port odpowiedzi JavaScript Arnaulda . Wypróbuj online tutaj .
Java, 83 bajty
Funkcja rekurencyjna, port odpowiedzi JavaScript Neila . Wypróbuj online tutaj .
źródło
C (gcc), 57 bajtów
Funkcja rekurencyjna, port odpowiedzi JavaScript Neila . Wypróbuj online tutaj .
C (gcc), 63 bajty
Odpowiedź JavaScript na Port of Arnauld . Wypróbuj online tutaj .
źródło