Conta elenchi ciclicamente auto-descrittivi


19

Elenchi ciclicamente auto-descrittivi

Un elenco L di numeri interi positivi si auto-descrive ciclicamente , se valgono le seguenti condizioni.

  1. L è non vuoto.
  2. Il primo e l'ultimo elemento di sono diversi.L
  3. Se si divide in corse di elementi uguali, l'elemento di ciascuna corsa equivale alla lunghezza della corsa successiva e l'elemento dell'ultima corsa equivale alla lunghezza della prima corsa.L

Ad esempio, considera . È non vuoto e il primo e l'ultimo elemento sono diversi. Quando lo dividiamo in sequenze, otteniamo .L=[1,1,1,2,3,3,1,1,1,3][[1,1,1],[2],[3,3],[1,1,1],[3]]

  • La prima corsa è una corsa di s e la lunghezza della corsa successiva, , è .1[2]1
  • La seconda corsa è una corsa di secondi e la lunghezza della corsa successiva, , è .2[3,3]2
  • La terza corsa è una corsa di secondi e la lunghezza della corsa successiva, , è .3[1,1,1]3
  • La quarta corsa è una corsa di s e la lunghezza della corsa successiva, , è .1[3]1
  • Infine, l'ultima corsa è una corsa di secondi e la lunghezza della prima corsa, , è .3[1,1,1]3

Ciò significa che è un elenco ciclicamente auto-descrittivo.L

Per un non esempio, l'elenco non è auto-descrittivo ciclicamente, poiché una corsa di s è seguita da una corsa di lunghezza . Anche la lista non è auto-descrittiva ciclicamente, poiché l'ultima corsa è una corsa di s, ma la prima corsa ha lunghezza .[3,2,2,2,1,4,1,1,1]21[2,2,4,4,3,3,3,3]32

L'obiettivo

In questa sfida, il tuo input è un numero intero . Il risultato deve essere il numero di elenchi ciclicamente auto-descrittivi la cui somma è uguale a . Ad esempio, dovrebbe risultare in , poiché gli elenchi ciclicamente autodescritti la cui somma è sono , , e . Vince il conteggio di byte più basso e si applicano altre regole standard .n1nn=848[1,1,1,1,4][1,1,2,1,1,2][2,1,1,2,1,1][4,1,1,1,1]

Ecco i valori di uscita corretti per gli ingressi da a :150

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

4
Una svolta inaspettata! A metà della descrizione mi aspettavo il compito meno interessante di determinare se un elenco fosse CSD. Complimenti.
Sparr,

Sono un po 'triste che la definizione non includa elenchi in cui il primo e l'ultimo elemento sono uguali e contano come lo stesso gruppo, come farebbero se l'elenco fosse in realtà un ciclo senza un inizio / una fine distinti.
Sparr,

Questo è code-golf, quindi penso che determinare se un elenco sia auto-descrittivo ciclicamente sia più interessante (soluzioni più veloci da eseguire) - se non c'è altro modo che generare tutti gli elenchi e contare.
user202729

Esiste un algoritmo di tempo polinomiale, ma è abbastanza difficile da programmare e sicuramente non è da golf come una soluzione che genera e verifica tutti i possibili elenchi.
user202729,

2
Ogni numero pari tranne 2 può essere ottenuto come n,1,...,1, e ogni numero dispari maggiore di 13 può essere ottenuto concatenando 3,2,2,2,1,1un numero pari. La prova che 13 è impossibile è lasciata come esercizio per il lettore.
Nitrodon,

Risposte:


6

Haskell , 75 byte

Grazie Ørjan per aver salvato un byte!

g n=sum[x#n|x<-[1..n],let a#n=sum$[b#(n-a*b)|b<-[1..n],a/=b]++[0^n^2|a==x]]

Provalo online!

Il problema è equivalente a:

In quanti modi è possibile scrivere come conni=0kaiai+1aiN,aiai+1,a0=ak



1

Gelatina , 18 byte

ṗⱮ¹Ẏ;ḷ/$€IẠ$Ƈ×Ɲ€§ċ

Provalo online!

Idea: ogni elenco che si auto-descrive ciclicamente può essere descritto come un elenco di valori per ciascun blocco e possiamo dedurre le lunghezze dai valori. Si noti che due valori adiacenti devono essere diversi. Naturalmente ci possono essere al massimo nblocchi e la lunghezza di ogni blocco è al massimo n.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.