Étant donné un nombre de 1 à 24, sortez le nombre de baisers au meilleur de la connaissance actuelle (certains nombres auront plus d'une sortie acceptable). La connaissance de la géométrie n'est pas essentielle car les résultats sont tous répertoriés ci-dessous.
À partir de la page Wikipedia sur le problème du numéro de baiser :
un nombre de baisers est défini comme le nombre de sphères unitaires qui ne se chevauchent pas et qui peuvent être disposées de manière à ce qu'elles touchent chacune une autre sphère unitaire donnée
Autrement dit, étant donné une sphère d'unité, combien de sphères d'unité supplémentaires peuvent la toucher sans qu'aucune d'entre elles ne se chevauche? La question sera posée dans un espace à N dimensions, où une sphère est considérée comme une sphère à N-1 dimensions.
Par exemple:
- dans un espace bidimensionnel, un cercle unitaire peut toucher 6 autres cercles unitaires.
- dans un espace tridimensionnel, une sphère unitaire peut toucher 12 autres sphères unitaires.
La page Wikipedia répertorie les valeurs de 1 à 24 dimensions. Cependant, certains d'entre eux ne sont pas encore connus avec précision, de sorte que seules une limite inférieure et supérieure sont données. Le tableau est reproduit ici pour qu'il reste fixe, quel que soit le rétrécissement futur des gammes dû à de nouvelles épreuves. Les solutions sont jugées par rapport à ce tableau fixe, même si la page Wikipedia est modifiée à l'avenir.
Table des limites
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
Contribution
La dimension: un entier de 1 à 24 (inclus).
Ici, "entier" indique que l'entrée n'aura pas de partie fractionnaire - elle peut l'être 2
ou 3
jamais 2.5
. Une solution peut toujours prendre l'entrée comme un flottant ou une chaîne, par exemple.
Sortie
Un nombre dans la plage appropriée, de la limite inférieure à la limite supérieure pour cette entrée (inclus).
La sortie doit être déterministe (toujours la même pour la même entrée).
La sortie doit être entière. Par exemple, pour l' entrée 5
des sorties valides sont possibles 40
, 41
, 42
, 43
, 44
. Notez qu'il s'agit d'une restriction sur la valeur, pas sur le type. Il est acceptable de renvoyer un flotteur, à condition qu'il ne contienne aucune partie fractionnaire. Par exemple, 41.5
ne serait pas valide, mais 41.0
serait valide.
Notation
C'est du code-golf . Votre score est le nombre d'octets dans votre code. Pour chaque langue, le gagnant est la solution avec le score le plus bas.
la source
Réponses:
Julia 0,6 , 52 octets
Essayez-le en ligne!
Comment?
Apprentissage automatique! (Un peu. Peut-être. Pas vraiment. )
c
ceil
la source
MLBase
!!! J / k, les lignes sont floues autour de ML comme toujours, mais probablement est trop basique pour mériter l'apprentissage de la machine d'étiquettes. Là encore, il est toujours utile de saisir un mot à la mode!x86,
62595350 octetsMa solution utilise une table de recherche d'octets et un décalage de 2 (pas de calculs FP). Les dimensions 9 à 23 offrent une marge de manœuvre suffisante pour le déplacement. Entrée
eax
et sortieecx
.-3 en échangeant
eax
etecx
depuiscmp $imm, %al
est plus court quecmp $imm, %cl
.-4 en ne traitant pas le cas N = 24 séparément mais en appliquant l'ajustement à tous les temps 1024 cas.
-2 en ne revenant pas tôt (stupide)
-3 en utilisant la table comme décalage et
movzbl
au lieu de mettre à zéro avecxor
Hexdump (table dedans au
.text
lieu de.data
)la source
.rodata
, pas de.data
toute façon. (Ou sous Windows, apparemment.rdata
). La.rodata
section est liée dans le cadre d'un segment de texte.shl
, surtout lorsque votre numéro n'est pas signé (vous l'avez utilisémovzbl
pour le charger, pasmovsbl
). Bien sûr,sal
c'est juste un autre nom pour le même opcode. gcc émetsal
, mais il est assez rare de le voir en code manuscrit.JavaScript (ES6), 60 octets
Essayez-le en ligne!
Comment?
Tous les autres termes sont calculés récursivement, en utilisant:
conduisant aux ratios suivants:
Le résultat final est finalement terrassé et rendu.
Résumé des résultats
Les résultats approximatifs sont donnés avec 2 décimales.
la source
Gelée ,
2926 octetsEssayez-le en ligne!
Comment ça marche
la source
JavaScript (Node.js) ,
12099 octetsPerte de 21 octets. Grande réduction grâce à la suggestion de tsh d'ajouter un trou au début du tableau (en sauvant deux octets de
n-1
àn
et en visant des nombres ronds dans les limites inférieure et supérieure, les réduisant ainsi de la notation à virgule fixe comme1154
à la notation exponentielle comme2e3
.Encore une fois, mon objectif initial était de montrer à quel point la voie "stupide" serait légère (par exemple, sans utiliser de vrais calculs, comme la réponse d'Arnauld. Il est impressionnant qu'il y ait encore de la place pour la rétrécir sans aucune transformation ni calcul.
Essayez-le en ligne!
Deux fois la longueur de la réponse d'Arnauld, 0 quantité de complexité.
JavaScript (Node.js) ,
129128 octets(-1 octet grâce à la suggestion d'utiliser le décalage de bits)
Essayez-le en ligne!
Pour répondre aux exigences d'être intéressant, j'ai volé la logique de la réponse x86 et construit le tableau à partir de cela. Ce qui en fait 9 octets de plus. Mais un peu plus intéressant.
la source
f=
, le changement(x)
àx
, ajouter un trou et le changementx-1
àx
. TIO ; et peut-être les rassembler TIO 99 octetsRunique, 173 octets
(Notez que le coin inférieur droit doit être compté pour les octets: ils sont implicitement remplis d'espaces.)
L'exe de TIO a besoin d'une mise à jour sur laquelle cette réponse s'appuie (et je corrige quelques autres trous avant de demander à Dennis de reconstruire). Mais en branchant une valeur (assurez-vous d'ajouter des espaces sur les lignes 2 et 3 si vous utilisez plusieurs caractères pour la valeur sur la première ligne). Voici la manière la plus simple d'écrire les valeurs nécessaires:
Essayez-le en ligne!
Fonctionnellement, c'est un port de la réponse Julia de sundar (mais Runic n'a pas de commande pour pousser
e
vers la pile (ou vraiment, aucune valeur décimale), donc une approximation était nécessaire). L'approximation pour lese
entrées inférieures à 8 est plus précise, car la perte de précision a entraîné des valeurs situées en dehors de la plage autorisée de sorties (par exemple7
, produirait 125).Ceil()
a été accompli en convertissant en un caractère, puis en revenant à un nombre (cela a échoué pour des valeurs exceptionnellement grandes, donc à 40k je l'ai fait diviser par 100, faire la conversion vers et en arrière, puis multiplier par 100 à nouveau).Il y a probablement de la place pour simplifier l'arrangement (par exemple, exécuter le point d'entrée verticalement, ci-dessous, ou trouver un moyen de compresser les approximations pour
e
), mais je suis content de pouvoir simplement faire le calcul.161 octets.
Mise à jour de l'interprète:
Avec la lecture d'entrée de fixation par poussée , Runic a maintenant plusieurs fonctions mathématiques et la capacité d'analyser les chaînes en double. Cela simplifiera considérablement cette réponse, mais je la laisserai telle quelle pour montrer l'effort que j'y ai mis (j'ai ajouté les fonctions mathématiques à argument unique et l'analyse de chaîne peu de temps après la publication: j'avais déjà eu Sin / Cos / Tan sur ma liste de tâches, mais n'avait pas pris en compte Exp, Abs, Log, etc. et manquait de caractères). TIO devrait se mettre à jour dans les prochaines 24 à 48 heures, selon le moment où Dennis le verra.
212,+16,+1c2*,+1cX,+
serait réduit à ->1'eA
avec cette mise à jour de l'interpréteur.A
saute un caractère et une valeur et effectue une opération mathématique sur cette valeur en fonction du caractère sauté (e
dans ce cas, estExp()
etExp(1)
renvoie e ).la source