과제는 가능한 빨리 OEIS A005434 를 계산하는 것입니다 .
S
length 의 이진 문자열 을 고려하십시오 n
. 에서 색인 1
우리가 경우에 결정할 수, S[1..i+1]
경기 S[n-i..n]
정확하게 모두를 i
에서 순서 0
에 n-1
. 예를 들어
S = 01010
준다
[Y, N, Y, N, Y].
이 때문입니다 0
일치 0
, 01
일치하지 않는 10
, 010
일치 010
, 0101
일치하지 않는 1010
그리고 마지막으로 01010
자신을 일치합니다.
길이가 다른 가능한 모든 비트 문자열 을 반복 할 때 얻는 s 및 s f(n)
의 개별 배열 수로 정의하십시오 .Y
N
2^n
S
n
관찰자는이 질문이 최근 의 또 다른 질문에 대한 간단한 변형이라는 것을 알게 될 것 입니다. 그러나 나는 영리한 트릭으로 훨씬 빠르고 쉽게 할 수 있다고 생각합니다.
직무
n
시작 시간을 늘리 1
려면 코드가 출력되어야합니다 n, f(n)
.
답변 예
에 대한 n = 1..24
정답은 다음과 같습니다.
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
채점
코드는 차례로 n = 1
각각 n
에 대한 답변을 제공하는 것부터 반복해야합니다 . 나는 전체 실행 시간을 정하고 2 분 후에 죽일 것이다.
n
그 시간에 당신 의 점수가 가장 높습니다 .
동점 인 경우 첫 번째 답이 이깁니다.
내 코드는 어디에서 테스트됩니까?
Lubuntu 게스트 VM (Windows 7 호스트) 의 Virtualbox 에서 코드를 실행합니다 .
내 노트북에는 8GB의 RAM과 2 개의 코어와 4 개의 스레드가있는 Intel i7 5600U@2.6GHz (Broadwell) CPU가 있습니다. 명령어 세트에는 SSE4.2, AVX, AVX2, FMA3 및 TSX가 포함됩니다.
언어 별 주요 항목
- Rust bu Anders Kaseorg 에서 n = 599
- Grimy에 의해 C 에서 n = 30 이다 . cygwin에서 기본적으로 실행될 때 병렬 버전은 32가 됩니다.