Listas auto-descritivas ciclicamente
Uma lista de números inteiros positivos é auto-descrita ciclicamente , se as seguintes condições forem válidas.
- não é vazio.
- O primeiro e o último elementos de são diferentes.
- Se você dividir em execuções de elementos iguais, o elemento de cada execução será igual ao comprimento da próxima execução e o elemento da última execução será igual ao comprimento da primeira execução.
Por exemplo, considere . Não é vazio, e o primeiro e o último elementos são diferentes. Quando dividimos em rodadas, obtemos .
- A primeira corrida é uma corrida de s, e o comprimento da próxima corrida, , é .
- A segunda corrida é uma corrida de s, e o comprimento da próxima corrida, , é .
- A terceira corrida é uma corrida de s, e a duração da próxima corrida, , é .
- A quarta corrida é uma corrida de s, e o comprimento da próxima corrida, , é .
- Finalmente, a última corrida é de s, e o comprimento da primeira, , é .
Isso significa que é uma lista auto-descritiva ciclicamente.
Para um não exemplo, a lista não é auto-descritiva ciclicamente, uma vez que uma execução de s é seguida por uma execução de comprimento . A lista também não é auto-descritiva ciclicamente, uma vez que a última execução é uma execução de s, mas a primeira execução tem duração .
A tarefa
Neste desafio, sua entrada é um número inteiro . Sua saída deve ser o número de listas auto-descritivas ciclicamente cuja soma é igual a . Por exemplo, deve resultar em , pois as listas auto-descritivas ciclicamente cuja soma é são , , e . A menor contagem de bytes vence e outras regras padrão decódigo de golfe seaplicam.
Aqui estão os valores de saída corretos para entradas de a :
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
, e todo número ímpar maior que 13 pode ser obtido concatenando3,2,2,2,1,1
um número par. A prova de que 13 é impossível é deixada como um exercício para o leitor.Respostas:
Haskell , 75 bytes
Obrigado Ørjan por salvar um byte!
Experimente online!
O problema é equivalente a:
fonte
Geléia , 18 bytes
Experimente online!
Ideia: Cada lista auto-descritiva ciclicamente pode ser descrita como uma lista de valores para cada bloco, e podemos deduzir os comprimentos dos valores. Observe que dois valores adjacentes devem ser diferentes. Obviamente, pode haver no máximo
n
blocos e o comprimento de cada bloco é no máximon
.fonte
Haskell,
118105103 bytesEdit: -13 bytes graças a @ Ørjan Johansen, -2 bytes graças a @ H.PWiz
Experimente online!
fonte
(i#d)n
->i#d$n