Listy cyklicznie samoopisujące
Lista dodatnich liczb całkowitych jest cyklicznie samoopisująca , jeśli spełnione są następujące warunki.
- jest niepusty.
- Pierwszy i ostatni element są różne.
- Jeśli podzielisz na przebiegi równych elementów, element każdego biegu jest równy długości następnego biegu, a element ostatniego biegu jest równy długości pierwszego cyklu.
Weźmy na przykład . Jest niepusty, a pierwszy i ostatni element są różne. Kiedy dzielimy go na przebiegi, otrzymujemy .
- Pierwszy przebieg to s, a długość następnego wynosi .
- Drugi przebieg to s, a długość następnego wynosi .
- Trzeci przebieg to s, a długość następnego wynosi .
- Czwarty przebieg to s, a długość następnego wynosi .
- Wreszcie ostatni przebieg to s, a długość pierwszego wynosi .
Oznacza to, że jest cyklicznie samoopisującą się listą.
W przypadku nieprzykładowym lista nie jest cyklicznie samoopisująca, ponieważ po przebiegu s następuje przebieg o długości . Lista również nie jest cyklicznie samoopisująca, ponieważ ostatni bieg jest ciągiem s, ale pierwszy bieg ma długość .
Zadanie
W tym wyzwaniu twoja liczba jest liczbą całkowitą . Twój wynik będzie liczbą cyklicznie samoopisujących się list, których suma wynosi . Na przykład powinno dawać , ponieważ cyklicznie samoopisujące się listy, których suma wynosi to , , i . Wygrywa najniższa liczba bajtów i obowiązują inne standardowezasadygry w golfa.
Oto prawidłowe wartości wyjściowe dla danych wejściowych od do :
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
, a każda liczba nieparzysta większa niż 13 może być uzyskana poprzez połączenie3,2,2,2,1,1
z liczbą parzystą. Dowód, że 13 jest niemożliwe, pozostawia się czytelnikowi jako ćwiczenie.Odpowiedzi:
Haskell , 75 bajtów
Dzięki Ørjan za uratowanie jednego bajtu!
Wypróbuj online!
Problem jest równoważny z:
źródło
Galaretka , 18 bajtów
Wypróbuj online!
Pomysł: Każda cyklicznie samoopisująca się lista może być opisana jako lista wartości dla każdego bloku i możemy wydedukować długości z tych wartości. Pamiętaj, że dwie sąsiednie wartości muszą być różne. Oczywiście może być najwyżej
n
bloków, a długość każdego bloku jest najwyżejn
.źródło
Haskell,
118105103 bajtówEdycja: -13 bajtów dzięki @ Ørjan Johansen, -2 bajtów dzięki @ H.PWiz
Wypróbuj online!
źródło
(i#d)n
->i#d$n