Listes auto-descriptives cycliquement
Une liste d'entiers positifs se décrit de façon cyclique si les conditions suivantes sont réunies.
- n'est pas vide.
- Les premier et dernier éléments de sont différents.
- Si vous divisez en séries d'éléments égaux, l'élément de chaque série est égal à la longueur de la série suivante et l'élément de la dernière série est égal à la longueur de la première série.
Par exemple, considérons . Il n'est pas vide et les premier et dernier éléments sont différents. Lorsque nous le divisons en séries, nous obtenons .
- La première exécution est une exécution de s, et la longueur de l'exécution suivante, , est de .
- La deuxième manche est une course de s, et la longueur de la manche suivante, , est de .
- La troisième manche est une course de s, et la longueur de la manche suivante, , est de .
- Le quatrième cycle est un cycle de s, et la longueur du cycle suivant, , est de .
- Enfin, la dernière série est une série de s et la longueur de la première série, , est de .
Cela signifie que est une liste cycliquement auto-descriptive.
Pour un non-exemple, la liste n'est pas auto-descriptive cycliquement, puisqu'un passage de s est suivi d'un passage de longueur . La liste , , , , , , n'est pas non plus auto-descriptive cycliquement, puisque la dernière série est une série de s, mais la première série a une longueur de .
La tâche
Dans ce défi, votre entrée est un entier . Votre sortie doit être le nombre de listes cycliquement auto-descriptives dont la somme est égale à . Par exemple, devrait donner , car les listes cycliquement auto-descriptives dont la somme est sont , , et . Le nombre d'octets le plus bas gagne et d'autres règles de code-golf standard s'appliquent.
Voici les valeurs de sortie correctes pour les entrées de à :
1 -> 0
2 -> 0
3 -> 0
4 -> 2
5 -> 0
6 -> 2
7 -> 0
8 -> 4
9 -> 0
10 -> 6
11 -> 6
12 -> 12
13 -> 0
14 -> 22
15 -> 10
16 -> 32
17 -> 16
18 -> 56
19 -> 30
20 -> 96
21 -> 56
22 -> 158
23 -> 112
24 -> 282
25 -> 198
26 -> 464
27 -> 364
28 -> 814
29 -> 644
30 -> 1382
31 -> 1192
32 -> 2368
33 -> 2080
34 -> 4078
35 -> 3844
36 -> 7036
37 -> 6694
38 -> 12136
39 -> 12070
40 -> 20940
41 -> 21362
42 -> 36278
43 -> 37892
44 -> 62634
45 -> 67154
46 -> 108678
47 -> 118866
48 -> 188280
49 -> 209784
50 -> 326878
n,1,...,1
, et chaque nombre impair supérieur à 13 peut être obtenu en concaténant3,2,2,2,1,1
un nombre pair. La preuve que 13 est impossible est laissée au lecteur comme exercice.Réponses:
Haskell , 75 octets
Merci Ørjan pour avoir sauvé un octet!
Essayez-le en ligne!
Le problème est équivalent à:
Combien de façonsn peut-il être écrit comme ∑ki=0aiai+1 avec ai∈N,ai≠ai+1,a0=ak
la source
Gelée , 18 octets
Essayez-le en ligne!
Idée: Chaque liste cycliquement auto-descriptive peut être décrite comme une liste de valeurs pour chaque bloc, et nous pouvons déduire les longueurs des valeurs. Notez que deux valeurs adjacentes doivent être différentes. Bien sûr, il peut y avoir au plus des
n
blocs et la longueur de chaque bloc est au plusn
.la source
Haskell,
118105103 octetsEdit: -13 octets grâce à @ Ørjan Johansen, -2 octets grâce à @ H.PWiz
Essayez-le en ligne!
la source
(i#d)n
->i#d$n