주기적으로 자체 설명 목록을 계산


19

주기적으로 자체 설명하는 목록

다음 조건이 충족되는 경우 양의 정수 목록 L주기적으로 자체 설명 됩니다.

  1. L 은 비어 있지 않습니다.
  2. L 의 첫 번째 요소와 마지막 요소 는 다릅니다.
  3. L 을 동일한 요소의 런으로 분할하면 각 런의 요소는 다음 런의 길이와 같으며 마지막 런의 요소는 첫 번째 런의 길이와 같습니다.

예를 들어, L=[1,1,1,2,3,3,1,1,1,3] . 비어 있지 않으며 첫 번째 요소와 마지막 요소가 다릅니다. 런으로 나누면 [[1,1,1],[2],[3,3],[1,1,1],[3]] .

  • 첫 번째 런은 1 초이며, 다음 런의 길이 [2]1 입니다.
  • 두 번째 런은 2 초이고, 다음 런의 길이 [3,3]2 입니다.
  • 세 번째 런은 3 초이고, 다음 런의 길이 [1,1,1]3 입니다.
  • 네 번째 런은 1 초이며, 다음 런의 길이 [3]1 입니다.
  • 마지막으로 마지막 런은 3 초이며, 첫 번째 런의 길이 [1,1,1]3 입니다.

이것은 L 이 주기적으로 자체 설명 목록 임을 의미 합니다.

비-예의 경우,리스트 [3,2,2,2,1,4,1,1,1]2 의 런이 길이 1 의 런으로 이어 지기 때문에 주기적으로 자기-설명되지 않는다 . 목록 [2,2,4,4,3,3,3,3] 최종 런의 실행 이후,도하지 주기적 자기 설명 적이다 3 (S)이 있지만, 제 런 길이를 갖는다2 .

작업

이 문제에서 입력 값은 정수 n1 입니다. 귀하의 출력은 합계가 n 과 같은 주기적으로 자체 설명 목록의 수입니다 . 예를 들어, 합이 8 인 주기적 자기 설명 목록 이 [ 1 , 1 , 1 , 1 , 4 ] , [ 1 , 1 , 2 , 1 , 1 , 2 ] , [ = n=84 결과는 4 가 됩니다 . 2 , 18[1,1,1,1,4][1,1,2,1,1,2][2,1,1,2,1,1][4,1,1,1,1] . 가장 적은 바이트 수가 이기고 다른 표준규칙이 적용됩니다.

1 에서 50 까지의 입력에 대한 올바른 출력 값은 다음과 같습니다 .

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
예상치 못한 비틀기! 설명 중반에 나는 목록이 CSD인지 여부를 결정하는 덜 흥미로운 작업을 기대하고있었습니다. 명성.
Sparr

정의에 첫 번째 요소와 마지막 요소가 동일한 목록이 포함되어 있지 않으며 목록이 실제로 시작 / 끝이없는 사이클 인 경우와 동일한 그룹으로 계산됩니다.
Sparr

이것은 코드 골프이므로 목록이 주기적으로 자체 설명인지 여부를 결정하는 것이 더 흥미 롭습니다 (해결 방법이 더 빠릅니다). 모든 목록과 수를 생성하는 것 외에 다른 짧은 방법이 없다면.
user202729 2016

다항식 시간 알고리즘이 있지만 프로그래밍이 어렵고 모든 가능한 목록을 생성하고 확인하는 솔루션만큼 골치 거리가 아닙니다.
user202729 2016

2
2를 제외한 모든 짝수는로 구할 수 있으며 n,1,...,1짝수에 연결 3,2,2,2,1,1하면 13보다 큰 모든 홀수를 얻을 수 있습니다 . 13이 불가능하다는 증거는 독자를위한 연습으로 남아 있습니다.
Nitrodon

답변:



1

젤리 , 18 바이트

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

온라인으로 사용해보십시오!

아이디어 : 주기적으로 자체 설명하는 각 목록은 각 블록의 값 목록으로 설명 할 수 있으며 값에서 길이를 추론 할 수 있습니다. 인접한 두 값이 달라야합니다. 물론 최대 n블록 이있을 수 있으며 각 블록의 길이는 최대 n입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.