Antecedentes: el número de Ramsey da el número mínimo de vértices en el gráfico completo manera que una coloración de borde rojo / azul de tenga al menos una roja o una azul . Los límites para más grandes son muy difíciles de establecer.
Su tarea es generar el número para .
Entrada
Dos enteros con y .
Salida
como se indica en esta tabla:
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
Tenga en cuenta que y son intercambiables: .
Para puede generar cualquier número entero entre 43 y 48 , inclusive. En el momento de publicación de esta pregunta, estos son los límites más conocidos.

5,5) que esto puede encajar bajo la complejidad de kolmogorov (¿o solo un ajuste fijo de salida sin entrada?)Respuestas:
JavaScript (ES6),
5149 bytesToma entrada en la sintaxis de curry
(r)(s).Pruébalo en línea!
¿Cómo?
Como primera aproximación, usamos la fórmula:
Si tenemos , simplemente agregamos 1 :min(r,s)<3 1
De lo contrario, agregamos un valor seleccionado de una tabla de búsqueda cuya clave está definida por:k
fuente
JavaScript (Node.js) ,
5655 bytesPruébalo en línea! Noté que la tabla se parece al triángulo de Pascal pero con factores de corrección. Editar: Guardado 1 byte gracias a @sundar.
fuente
x*y>19porx+y>8.Jalea ,
1716 bytesPruébalo en línea! O ver un conjunto de pruebas .
Sustituir elR(5,5) 43 44 45 46 47 48
0con+,,,-,., o/al conjunto igual a 43 , 44 , 45 , 46 , o 47 , respectivamente (en lugar del 48 aquí).¿Cómo?
Como podemos encontrar que:R(r,s)≤R(r−1,s)+R(r,s−1)
Esto es
’ScḢƊy produciría:Si restamos uno por cada vez que entra nueve en el resultado, alineamos tres más con nuestro objetivo (esto se logra con
_:¥9):Los dos valores incorrectos restantes, y 63 , se pueden traducir utilizando el átomo de Jelly y los índices de página de códigos con .32 63
y“ ı?0‘yfuente
Python 2 , 62 bytes
Pruébalo en línea!
Python 2 , 63 bytes
Pruébalo en línea!
Esto es ridículo, pronto lamentaré haber publicado esto ... Pero eh, ¯ \ _ (ツ) _ / ¯. Afeitado 1 byte gracias a nuestro amable Jonathan Allan :). Probablemente será superado por unos 20 bytes en breve ...
fuente
Julia 0.6 ,
71615957 bytesPruébalo en línea!
Sin golf (bueno, un poco más legible):
¿Qué hace?
Toma la entrada como una matriz que
Acontiene r y s. Desempaqueta la matriz en rys con el número menor como r, usando(r,s)=sort(A).Si r es 1, la salida debería ser 1. Si r es 2, la salida debería ser lo que sea s.
sr - 1 estarán s0 0= 1 para r = 1, y s1= s para r = 2.
Entonces,
r<3?s^(r-1)o más corto,r<3?s^~-rPara los demás, comencé a notar que la salida es:
(Inicialmente trabajé con f (5,5) = 45 por conveniencia).
Esto parecía un patrón potencialmente utilizable: todos tienen
2ren común, 17 es 8 * 2 + 1, 35 es 17 * 2 + 1, 10 es 3 * 3 + 1. Comencé extrayendo el valor base de [0, 3, 8], como[0 3 8][s-2](esto luego se hizo más corto(s^2-4s+3)).Intentar obtener valores correctos para r = 3, 4 y 5 con esto pasó por muchas etapas, incluyendo
y
Expandir este último y simplificarlo condujo al código publicado.
fuente
x86,
4937 bytesNo muy optimizado, solo explota las propiedades de las primeras tres filas de la tabla. Mientras escribía esto, me di cuenta de que el código es básicamente una tabla de salto, por lo que una tabla de salto podría ahorrar muchos bytes. Entrada
eaxyebxsalidaeax.-12 combinando casos de
r >= 3en una tabla de búsqueda (originalmente solor >= 4) y usando la sugerencia de Peter Cordes decmp/jae/jnecon las banderas aún establecidas para quer1,r2,r3se distingan por una solacmp. También indexando en la tabla de manera inteligente usando un desplazamiento constante.Hexdump
fuente
r1: cmp $2, %al/jae r2establecerá marcas de modo que pueda usarr2: jne r3sin otracmp. El objetivo de saltor1puede ser otroretlugar y caer a través de élr2. (Invierta la condición). Por cierto, esta es la primera pregunta de código de golf que vi después de responder a su pregunta de uso de la tabla de desplazamiento de salto corto en SO. Supongo que elegí el correcto de HNQ :)r4puede ser una instrucción:mov table-8(%ebx,%eax), %al. IDK por qué usó una instrucción separada para mover la dirección de la tabla a un registro. Pero una de las cosas clave es que los desplazamientos constantes de los símbolos no cuestan nada extra porque ya se ensambla en una dirección absoluta de 32 bits. Los formatos de archivo de objetos pueden representar referencias de símbolos con un desplazamiento para cuando el enlazador completa la dirección final para que los compiladores no tengan que poner etiquetas separadas en cada campo de una estructura, o cada elemento de matriz ...retpara r1 y r2.mov %ebx, %eaxaexit, por lo que siempre se ejecuta después de r3, y r2 salta allí o cae en r3? Entonces r3 produce su resultado en BL consub %bl, %al/cmp $10, %al/jne exit/add $4, %bl(cambio de tamaño neutral: cmp vs. add puede usar la forma corta al, imm8). La ganancia es que también elimina elretr2. Hmm no, eso no funciona, bueno, ¿tal vez si niegas las entradas de la tabla o algo así? Y eso probablemente encubra algo que necesitas. No he pensado en esto y desafortunadamente no tengo tiempo para hacerlo: /Python 2 , 70 bytes
Pruébalo en línea!
fuente
MATL,
2521 bytesPruébalo en MATL Online
Intenta portar la respuesta Jelly de Jonathan Allan a MATL.
+2-lGqXn- igual que esa respuesta: calculart8/k- duplicar eso, dividir por 8 y piso-- reste eso del resultado anterior (restamos cuántas veces va 8 en el número, en lugar de 9 en la respuesta Jelly. El resultado es el mismo para todos menos para los 35 y 70, que aquí dan 31 y 62.)t20/k- duplique ese resultado también, divídalo por 20 y piso (da 0 para resultados ya correctos, 1 para 31, 3 para 62)6*- multiplique eso por 6-- reste eso del resultado (31 - 6 = 25, 62 - 18 = 44)Mayor:
Pruébalo en MATL Online
fuente
Python 3, 74 bytes
Try it online!
fuente
Proton, 52 bytes
Near-port of my Python answer.
Try it online!
fuente
Java 8, 62 bytes
Lambda function, port of Arnauld's JavaScript answer. Try it online here.
Java, 83 bytes
Función recursiva, puerto de la respuesta JavaScript de Neil . Pruébelo en línea aquí .
fuente
C (gcc), 57 bytes
Función recursiva, puerto de la respuesta JavaScript de Neil . Pruébelo en línea aquí .
C (gcc), 63 bytes
La respuesta de JavaScript del puerto de Arnauld . Pruébelo en línea aquí .
fuente