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 .n≥1nn=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 conn∑i=0kaiai+1ai∈N,ai≠ai+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.