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>19
porx+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
0
con+
,,
,-
,.
, 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‘y
fuente
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
A
contiene 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^~-r
Para 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
2r
en 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
eax
yebx
salidaeax
.-12 combinando casos de
r >= 3
en una tabla de búsqueda (originalmente solor >= 4
) y usando la sugerencia de Peter Cordes decmp
/jae
/jne
con las banderas aún establecidas para quer1,r2,r3
se distingan por una solacmp
. También indexando en la tabla de manera inteligente usando un desplazamiento constante.Hexdump
fuente
r1: cmp $2, %al
/jae r2
establecerá marcas de modo que pueda usarr2: jne r3
sin otracmp
. El objetivo de saltor1
puede ser otroret
lugar 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 :)r4
puede 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 ...ret
para r1 y r2.mov %ebx, %eax
aexit
, 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 elret
r2. 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