Cette question a une configuration similaire pour rechercher un tableau qui correspond à un ensemble de sommes, bien que ses objectifs soient très différents.
Considérez un tableau A
de longueur n
. Le tableau ne contient que des entiers positifs. Par exemple A = (1,1,2,2)
. Définissons f(A)
comme l'ensemble des sommes de tous les sous-réseaux contigus non vides de A
. Dans ce cas f(A) = {1,2,3,4,5,6}
. Les étapes de production f(A)
sont les suivantes:
Les sous-réseaux de A
sont (1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)
. Leurs sommes respectives sont 1,1,2,2,2,3,4,4,5,6
. L'ensemble que vous obtenez de cette liste est donc {1,2,3,4,5,6}
.
Nous appelons un tableau A
unique s'il n'y a pas d'autre tableau B
de la même longueur tel que f(A) = f(B)
, à l'exception du tableau A
inversé. Par exemple, f((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}
mais aucun autre tableau de longueur 3
ne produit le même ensemble de sommes.
Nous ne considérerons que les tableaux où les éléments sont soit un entier donné, s
soit s+1
. Par exemple, si s=1
les tableaux contiennent uniquement 1
et 2
.
Tâche
La tâche, pour une donnée n
et s
est de compter le nombre de tableaux uniques de cette longueur. Vous pouvez supposer que s
c'est entre 1
et 9
.
Vous ne devez pas compter l'inverse d'un tableau ainsi que le tableau lui-même.
Exemples
s = 1
, la réponse est toujours n+1
.
s = 2
, les réponses qui comptent à partir de n = 1
:
2,3,6,10,20,32,52,86
s = 8
, les réponses qui comptent à partir de n = 1
:
2,3,6,10,20,36,68,130
But
Pour une donnée n
, votre code devrait afficher la réponse pour toutes les valeurs de s
à 1
à 9
. Votre score est la valeur la plus élevée n
pour laquelle cela se termine en une minute.
Essai
Je devrai exécuter votre code sur ma machine Ubuntu, veuillez donc inclure des instructions aussi détaillées que possible sur la façon de compiler et d'exécuter votre code.
Classement
- n = 24 par Anders Kaseorg dans Rust (34 secondes)
- n = 16 par Ourous dans Clean (36 secondes)
- n = 14 par JRowan en Common Lisp (49 secondes)
Réponses:
Rouille , n ≈ 24
Nécessite une rouille nocturne pour la
reverse_bits
fonction pratique . Compilez avecrustc -O unique.rs
et exécutez avec (par exemple)./unique 24
.la source
s
ets+1
en eux?s
ets + 1
(puisque vous avez dit que ce sont les seuls tableaux que nous considérerons), bien qu'il ne soit pas immédiatement évident que cela ferait une différence.Common Lisp SBCL, N = 14
fonction d'appel (goahead ns)
voici les temps d'exécution
la source
sbcl
manière ou d'une autre?Nettoyer
Ce n'est certainement pas l'approche la plus efficace, mais je suis curieux de voir à quel point un filtre de valeur naïf fonctionne bien.
Cela dit, il y a encore un peu d'amélioration à faire en utilisant cette méthode.
Placer dans un fichier nommé
main.icl
ou changer la ligne supérieure enmodule <your_file_name_here>
.Compiler avec
clm -h 1500m -s 50m -fusion -t -IL Dynamics -IL StdEnv -IL Platform main
.Vous pouvez obtenir la version TIO (et moi-même) à partir du lien dans l'en-tête, ou une version plus récente d' ici .
la source
s
? Dans la question, vous indiquez " Pour un n donné , votre code doit afficher la réponse pour toutes les valeurs de s de 1 à 9."