Antecedentes: o número de Ramsey fornece o número mínimo de vértices no gráfico completo modo que uma coloração de borda vermelha / azul de tenha pelo menos um vermelho ou um azul . Limites para maiores são muito difíceis de estabelecer.
Sua tarefa é gerar o número para .
Entrada
Dois inteiros com e .
Resultado
conforme indicado nesta tabela:
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
Observe que e são intercambiáveis: .
Para você pode gerar qualquer número inteiro entre 43 e 48 , inclusive. No momento em que esta pergunta foi publicada, esses são os limites mais conhecidos.
5,5
) que este pode caber sob Kolmogorov-complexidade (ou faz apenas uma não-entrada, ajuste de saída fixa?)Respostas:
JavaScript (ES6),
5149 bytesRecebe entrada na sintaxe de currying
(r)(s)
.Experimente online!
Quão?
Como primeira aproximação, usamos a fórmula:
Se tivermos , basta adicionar 1 :min ( r , s ) < 3 1
Caso contrário, adicionamos um valor escolhido em uma tabela de pesquisa cuja chave é definida por:k
fonte
JavaScript (Node.js) ,
5655 bytesExperimente online! Notei que a tabela se assemelha ao triângulo de Pascal, mas com fatores de correção. Editar: salvou 1 byte graças a @sundar.
fonte
x*y>19
porx+y>8
.Geléia ,
1716 bytesExperimente online! Ou veja uma suíte de testes .
Substituir oR ( 5 , 5 ) 43 44 45 46. 47 48.
0
com+
,,
,-
,.
, ou/
ao conjunto igual a 43 , 44 , 45 , 46 , ou 47 , respectivamente, (em vez de a 48 aqui).Quão?
Como podemos encontrar que:R ( r , s ) ≤ R ( r - 1 , s ) + R ( r , s - 1 )
Isso é
’ScḢƊ
e produziria:Se subtrairmos um para cada vez que nove entrarem no resultado, alinharemos mais três com nosso objetivo (isso é alcançado com
_:¥9
):Os dois valores incorretos restantes, e 63, podem ser traduzidos usando o átomo de Jelly e os índices da página de código com .32. 63.
y
“ ı?0‘y
fonte
Python 2 , 62 bytes
Experimente online!
Python 2 , 63 bytes
Experimente online!
Isso é ridículo, em breve me arrependo de ter postado isso ... Mas eh, ¯ \ _ (ツ) _ / ¯. Raspou 1 byte graças ao nosso tipo Jonathan Allan :). Provavelmente será superado em cerca de 20 bytes em breve ...
fonte
Julia 0.6 ,
71615957 bytesExperimente online!
Ungolfed (bem, um pouco mais legível):
O que isso faz?
Recebe a entrada como uma matriz
A
contendo re es. Descompacta a matriz em re es com o número menor como r, usando(r,s)=sort(A)
.r<3?s^(r-1)
r<3?s^~-r
Para os outros, comecei percebendo que a saída é:
(Inicialmente trabalhei com f (5,5) = 45 por conveniência.)
Parecia um padrão potencialmente utilizável - todos eles têm
2r
em comum, 17 é 8 * 2 + 1, 35 é 17 * 2 + 1, 10 é 3 * 3 + 1. Comecei com a extração do valor base de [0, 3, 8], pois[0 3 8][s-2]
(mais tarde isso se tornou mais curto(s^2-4s+3)
).A tentativa de obter valores corretos para r = 3, 4 e 5 com isso passou por vários estágios, incluindo
e
Expandir o último e simplificá-lo levou ao código publicado.
fonte
x86,
4937 bytesNão é muito otimizado, apenas explorando as propriedades das três primeiras linhas da tabela. Enquanto escrevia isso, percebi que o código é basicamente uma tabela de salto, portanto uma tabela de salto poderia salvar muitos bytes. Entrada
eax
eebx
saída emeax
.-12 combinando casos de
r >= 3
em uma tabela de pesquisa (originalmente apenasr >= 4
) e usando a sugestão de Peter Cordes decmp
/jae
/jne
com os sinalizadores ainda configurados para quer1,r2,r3
sejam distinguidos por apenas umcmp
! Também indexando na tabela de maneira inteligente usando um deslocamento constante.Hexdump
fonte
r1: cmp $2, %al
/jae r2
definirá sinalizadores para que você possa usarr2: jne r3
sem outrocmp
. O alvo do saltor1
pode estarret
em outro lugar e cair parar2
. (Inverta a condição). BTW, esta é a primeira pergunta sobre código-golfe que eu examinei depois de responder à sua pergunta sobre o uso da tabela de deslocamento de salto curto no SO. Eu acho que eu escolhi o caminho certo a partir HNQ :)r4
pode ser uma instrução:mov table-8(%ebx,%eax), %al
. IDK: por que você usou uma instrução separada para mover o endereço da tabela para um registro? Mas uma das principais coisas é que deslocamentos constantes de símbolos não custam nada extra, pois já são montados em um endereço absoluto de 32 bits. Formatos de arquivo objeto pode representar refs símbolo com um deslocamento para quando os preenchimentos vinculador no endereço final para compiladores não tem que colocar rótulos separados em todos os campos de uma estrutura, ou cada elemento da matriz ...ret
para r1 e r2.mov %ebx, %eax
paraexit
, para que ele sempre corra atrás de r3 e r2 salte para lá ou caia em r3? Então r3 produz seu resultado em BL comsub %bl, %al
/cmp $10, %al
/jne exit
/add $4, %bl
(alteração de tamanho neutro: cmp vs. add pode usar a forma abreviada imm8). O ganho é que ele também remove oret
R2. Hmm não, isso não funciona, bem, talvez se você negar as entradas da tabela ou algo assim? E isso provavelmente derruba algo que você precisa. Eu não pensei sobre isso e, infelizmente, não tenho tempo para fazê-lo: /Python 2 , 70 bytes
Experimente online!
fonte
MATL,
2521 bytesExperimente no MATL Online
Tente portar a resposta Jelly de Jonathan Allan para o MATL.
+2-lGqXn
- o mesmo que a resposta: calculart8/k
- duplicar isso, dividir por 8 e andar-
- subtraia isso do resultado anterior (subtraímos quantas vezes 8 vai no número, em vez de 9 na resposta Jelly. O resultado é o mesmo para todos, exceto os 35 e 70, que aqui dão 31 e 62.)t20/k
- duplique esse resultado também, divida-o por 20 e reduza (dá 0 para resultados já corretos, 1 para 31, 3 para 62)6*
- multiplique isso por 6-
- subtraia isso do resultado (31 - 6 = 25, 62 - 18 = 44)Mais velho:
Experimente no MATL Online
fonte
Python 3 , 74 bytes
Experimente online!
fonte
Próton , 52 bytes
Near-port da minha resposta Python .
Experimente online!
fonte
Java 8, 62 bytes
Função Lambda, porta da resposta JavaScript de Arnauld . Experimente online aqui .
Java, 83 bytes
Função recursiva, porta da resposta JavaScript de Neil . Experimente online aqui .
fonte
C (gcc), 57 bytes
Função recursiva, porta da resposta JavaScript de Neil . Experimente online aqui .
C (gcc), 63 bytes
Resposta JavaScript do Port of Arnauld . Experimente online aqui .
fonte