Considérez trois ensembles A
, B
et C
chacun contenant des n
entiers. De cela, nous pouvons faire l'ensemble
S_n = {a * b + c | a in A, b in B, c in C}.
Étant donné un n
, il existe une ou plusieurs tailles minimales S_n
qui dépendent des ensembles A,B and C
choisis.
Les ensembles peuvent contenir n'importe quel n
entier distinct (positif, zéro ou négatif). Il n'est pas nécessaire qu'ils soient des entiers consécutifs ou que les ensembles soient égaux entre eux par exemple. A = {-1, 0, 5, 10, 27}, B = {2, 5, 6, 10, 14} and C = {-23, 2, 100, 1000,10000}
est acceptable (mais pas une bonne idée) par exemple.
Tâche
La tâche consiste à écrire du code pour trouver le plus petit ensemble S_n
possible pour chacun n
de 1
à 20
.
Pour chacun n
de 1
à 20
votre code devrait sortir le choisi A
, B
et C
avec la taille résultante deS_n
But
Votre score sera la somme des tailles de celles que S_n
vous créez. C'est-à-dire que ce sera une somme de vingt chiffres.
Plus le score est bas, mieux c'est.
Exemples
Si A = B = C = {1, 2, 3, 4}
alors S_4 = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
qui est de taille 19
.
Ce n'est cependant nullement optimal. Par exemple, A = B = C = {-1, 0, 1, 2}
donne S_4 = {0, 1, 2, 3, 4, 5, 6, -1, -3, -2}
ce qui est de taille 10
.
Timings
Comme je devrai exécuter votre code pour vérifier la sortie, assurez-vous qu'il ne faut pas plus de 30 minutes et 4 Go de RAM pour fonctionner sur un bureau normal.
Remarques
Votre code doit réellement calculer la sortie. Vous n'êtes pas autorisé à coder en dur les réponses précalculées dans votre code.
la source
Réponses:
Rust, score
14121411src/main.rs
Cargo.toml
Compilez et exécutez avec
cargo run --release
.Production
Sur mon ordinateur portable, cela a utilisé environ 8 minutes et environ 1,5 Go de mémoire.
Comment ça fonctionne
Nous partons du principe (sans aucune justification particulière) que A et B sont la gamme évidente d'entiers consécutifs centrée à 0 ou ½, puis faire une recherche A * pour une optimale C donnée A et B .
la source
B
etC
pouvez-vous effectuer la même recherche A * surA
? Je pense à une sorte d'approche de descente coordonnée. Réparez tous les jeux sauf un, optimisez le dernier et répétez.A = B
et les deux entiers consécutifs sont vraiment toujours optimaux. Un seul contre-exemple serait passionnant.Axiom, score 1466
Les ensembles seraient A = B = [- n / 2..n / 2] si n% 2 == 0 sinon A = B = [- n / 2 .. ((n / 2) +1)]
L'ensemble C est la somme du tableau sous la forme [-2, -1, .. (n-2)] pour un tableau arr [] de ce type [0,0,0,0,0] ou [0,1 , 1,1,2] ou [0,0,0,0,3] de sorte que le tableau auquel il appartient
Si vous voulez être plus précis ou que votre PC est plus rapide, vous pouvez essayer d'augmenter `` 3 '' en `` inc (aix, 3) '', ce qui augmente le nombre de tableaux pour la variation de l'ensemble C et donc cela augmenterait la précision du résultat.
Dans les résultats, la chaîne imprimée est
où B = A et | S | est le nombre d'élément de S
la source
SQL Server, 1495
La solution peut être vérifiée ici .
Excusez-moi car la sortie est sous forme de tableau.
la source
C, score
14481431Ce serait le même +/- algo de la mise en œuvre d'Axiom
résultats
la source
Python 2 , score 1495
Essayez-le en ligne!
Une ligne de base simple pour que chaque ensemble soit un intervalle de longueur n centré autour de 0, légèrement déséquilibré même pour n. Le TIO a du code Python pour calculer votre score.
La taille est
(n*n+1)/2
pour n impair et(n*n+n)/2
pour n pair.la source
Mathematica, score 1495
la source
C ++, score 1411
Les conjectures A et B sont des entiers consécutifs centrés près de 0, utilisez simplement le recuit simulé pour trouver C.
La source:
Résultats:
Avec -O2 sur mon ordinateur, il faut 50 secondes pour calculer tous les résultats.
la source