Dado un número del 1 al 24, envíe el número de beso al mejor conocimiento actual (algunos números tendrán más de una salida aceptable). El conocimiento de la geometría no es esencial ya que las salidas se enumeran a continuación.
De la página de Wikipedia sobre el problema del número de besos :
un número de beso se define como el número de esferas de unidades no superpuestas que se pueden organizar de manera que cada una toque otra esfera de unidad dada
Es decir, dada una esfera de unidad, ¿cuántas esferas de unidad más pueden tocarla sin que ninguna se superponga? La pregunta se hará en el espacio N dimensional, donde se entiende que una esfera es una esfera dimensional N-1.
Por ejemplo:
- en un espacio de 2 dimensiones, un círculo unitario puede tocar otros 6 círculos unitarios.
- En un espacio tridimensional, una esfera unitaria puede tocar otras 12 esferas unitarias.
La página de Wikipedia enumera valores para el espacio dimensional de 1 a 24. Sin embargo, algunos de estos aún no se conocen con precisión, por lo que solo se proporcionan un límite inferior y superior. La tabla se reproduce aquí para que permanezca fija, independientemente de cualquier estrechamiento futuro de los rangos debido a nuevas pruebas. Las soluciones se juzgan en función de esta tabla fija, incluso si la página de Wikipedia se modifica en el futuro.
Tabla de límites
Dimension Lower bound Upper bound
1 2 2
2 6 6
3 12 12
4 24 24
5 40 44
6 72 78
7 126 134
8 240 240
9 306 364
10 500 554
11 582 870
12 840 1357
13 1154 2069
14 1606 3183
15 2564 4866
16 4320 7355
17 5346 11072
18 7398 16572
19 10668 24812
20 17400 36764
21 27720 54584
22 49896 82340
23 93150 124416
24 196560 196560
Entrada
La dimensión: un entero del 1 al 24 (inclusive).
Aquí "entero" indica que la entrada no tendrá una parte fraccionaria, puede ser 2
o 3
nunca 2.5
. Una solución aún puede tomar la entrada como flotante, o una cadena, por ejemplo.
Salida
Un número en el rango relevante, desde el límite inferior hasta el límite superior para esa entrada (inclusive).
La salida debe ser determinista (siempre la misma para la misma entrada).
La salida debe ser entera. Por ejemplo, para la entrada de 5
las posibles salidas válidas son 40
, 41
, 42
, 43
, 44
. Tenga en cuenta que esta es una restricción en el valor, no en el tipo. Es aceptable devolver un flotador, siempre que tenga una parte fraccional cero. Por ejemplo, 41.5
no sería válido, pero 41.0
sería válido.
Tanteo
Este es el código de golf . Su puntaje es el número de bytes en su código. Para cada idioma, el ganador es la solución con la puntuación más baja.
fuente
Respuestas:
Julia 0.6 , 52 bytes
Pruébalo en línea!
¿Cómo?
¡Aprendizaje automático! (Un poco. Tal vez. En realidad no ) .
Primero, al trazar los datos del límite inferior y superior contra N, y algunas pruebas y errores manuales, parecía que una función exponencial podría encajar bien para N> = 8. Después de algunos intentos de encontrar esta función manualmente, recurrí al uso de un parámetro función de sintonización para sintonizar (donde K = 8 a 24) para encontrar a, byc de modo que la expresión proporcione valores que se encuentren dentro del rango correcto para cada K (con un rango sucesivamente menor de valores posibles y precisiones correspondientemente más altas para a, b, c en diferentes ejecuciones de la función). Había algunos de esos conjuntos de valores, aunque ninguno de ellos podía ajustarse exactamente al caso N = 24, así que elegí uno que tenía 0 y codifiqué el valor para N = 24.a ∗ eb K+ c
c
Para el N inferior, del 1 al 7, esperaba encontrar alguna expresión o polinomio más simple, pero no pude encontrar ninguno que se ajustara. Entonces, volviendo a ajustar , esta vez para K = 1 a 7 (aunque realmente no pensé que un exponencial sería un ajuste correcto en este caso, basado en las tendencias de la trama visual). Afortunadamente, hay eran los parámetros a, b, c que podría dar valores correctos en toda la gama aquí (al menos dentro de una llamada).a ∗ eb K+ c
ceil
fuente
MLBase
! J / k, las líneas alrededor de ML están borrosas como siempre, pero esto probablemente es demasiado básico para merecer el aprendizaje automático de etiquetas. Por otra parte, ¡siempre es útil tener una palabra de moda!x86,
62595350 bytesMi solución utiliza una tabla de búsqueda de bytes y se desplaza por 2 (sin cálculos de FP). Las dimensiones 9 a 23 proporcionan suficiente margen de maniobra para el cambio. Entrada
eax
y salida enecx
.-3 intercambiando
eax
yecx
ya quecmp $imm, %al
es más corto quecmp $imm, %cl
.-4 al no tratar el caso N = 24 por separado pero aplicando el ajuste a todos los tiempos 1024 casos.
-2 al no regresar temprano (estúpido)
-3 usando la tabla como desplazamiento y en
movzbl
lugar de poner a cero conxor
Hexdump (tabla en
.text
lugar de.data
)fuente
.rodata
, no de.data
todos modos. (O en Windows, aparentemente.rdata
). La.rodata
sección se vincula como parte del segmento de texto.shl
, especialmente cuando su número no está firmado (solíamovzbl
cargarlo, nomovsbl
). Por supuesto,sal
es solo otro nombre para el mismo código de operación. emite gccsal
, pero es bastante raro verlo en código escrito a mano.JavaScript (ES6), 60 bytes
Pruébalo en línea!
¿Cómo?
Todos los demás términos se calculan recursivamente, utilizando:
conduciendo a las siguientes proporciones:
El resultado final finalmente se derriba y se devuelve.
Resumen de resultados
Los resultados aproximados se dan con 2 decimales.
fuente
Jalea ,
2926 bytesPruébalo en línea!
Cómo funciona
fuente
JavaScript (Node.js) ,
12099 bytesSe descartaron 21 bytes. Gran reducción gracias a la sugerencia de tsh de agregar un agujero al comienzo de la matriz (ahorrando dos bytes yendo de
n-1
an
, y apuntando a números redondos dentro de los límites inferior y superior, reduciéndolos así de la notación de punto fijo como1154
a la notación exponencial como2e3
.Nuevamente, mi objetivo original era mostrar cuán ligera sería la forma "tonta" (por ejemplo, no usar ninguna matemática real, como la respuesta de Arnauld. Es impresionante que todavía hubiera espacio para reducirla sin ninguna transformación o cálculo).
Pruébalo en línea!
El doble de la longitud de la respuesta de Arnauld, 0 cantidad de la complejidad.
JavaScript (Node.js) ,
129128 bytes(-1 byte gracias a la sugerencia de usar bitshifting)
Pruébalo en línea!
Para satisfacer las demandas de ser interesante, robé la lógica de la respuesta x86 y construí la matriz a partir de eso. Haciéndolo 9 bytes más largo. Pero un poco más interesante.
fuente
f=
, cambiar(x)
ax
, agregar un agujero y cambiarx-1
ax
. Tio ; y quizás redondearlos a TIO 99 bytesRúnico, 173 bytes
(Tenga en cuenta que la esquina inferior derecha debe contarse para los bytes: están llenos implícitamente de espacios).
El exe de TIO necesita una actualización en la que se base esta respuesta (y estoy reparando algunos otros agujeros antes de pedirle a Dennis que reconstruya). Pero agregue un valor (asegúrese de agregar espacios en blanco en las líneas 2 y 3 si usa más de un carácter para el valor en la primera línea). Aquí está la forma más fácil de escribir los valores necesarios:
Pruébalo en línea!
Funcionalmente, este es un puerto de respuesta de Sundar de Julia (pero Runic no tiene un comando para empujar
e
a la pila (o realmente, cualquier valor decimal), por lo que se necesitaba una aproximación). La aproximación parae
entradas inferiores a 8 es más precisa, ya que la pérdida de precisión dio como resultado valores que se encuentran fuera del rango permitido de salidas (por ejemplo7
, produciría 125).Ceil()
se logró mediante la conversión a un personaje y luego a un número (esto falló para valores excepcionalmente grandes, por lo que a 40k lo dividí por 100, hice la conversión hacia atrás y luego la multipliqué por 100 nuevamente).Probablemente haya espacio para simplificar la disposición (por ejemplo, ejecutar el punto de entrada verticalmente, debajo, o encontrar una forma de comprimir las aproximaciones
e
), pero estoy contento de poder hacer el cálculo.161 bytes.
Actualización del intérprete:
Con la lectura de entrada de fijación de inserción , Runic ahora tiene varias funciones matemáticas y la capacidad de analizar cadenas como dobles. Eso simplificará enormemente esta respuesta, pero la dejaré como para mostrar el esfuerzo que puse en ella (agregué las funciones matemáticas de argumento único y el análisis de cadenas poco después de la publicación: ya había puesto Sin / Cos / Tan en mi lista de tareas pendientes, pero no había considerado Exp, Abs, Log, etc. y se estaba quedando sin caracteres). TIO debería actualizarse en las próximas 24-48 horas, dependiendo de cuándo lo vea Dennis.
212,+16,+1c2*,+1cX,+
se reduciría a ->1'eA
con esta actualización del intérprete.A
muestra un carácter y un valor y realiza una operación matemática sobre ese valor en función del carácter que aparece (e
en este caso esExp()
yExp(1)
devuelve e ).fuente