S
length 의 이진 문자열 을 고려하십시오 n
. 에서 색인 1
, 우리는 계산할 수 해밍 거리 사이 S[1..i+1]
와 S[n-i..n]
모두를 i
에서 순서 0
에 n-1
. 길이가 같은 두 줄 사이의 해밍 거리는 해당 기호가 다른 위치 수입니다. 예를 들어
S = 01010
준다
[0, 2, 0, 4, 0].
이 때문입니다 0
일치 0
, 01
에 해밍 거리 두 가지고 10
, 010
일치 010
, 0101
에 해밍 거리 네 가지가 있습니다 1010
그리고 마지막으로 01010
자신을 일치합니다.
그러나 해밍 거리가 최대 1 인 출력에만 관심이 있습니다. 따라서이 작업 Y
에서 해밍 거리가 최대 한 개인 지 아닌지 를보고합니다 N
. 위의 예에서 우리는
[Y, N, Y, N, Y]
길이가 다른 가능한 모든 비트 문자열 을 반복 할 때 얻는 s 및 s f(n)
의 개별 배열 수로 정의하십시오 .Y
N
2^n
S
n
직무
n
시작 시간을 늘리 1
려면 코드가 출력되어야합니다 f(n)
.
답변 예
에 대한 n = 1..24
정답은 다음과 같습니다.
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
채점
코드는 차례로 n = 1
각각 n
에 대한 답변을 제공하는 것부터 반복해야합니다 . 나는 전체 실행 시간을 정하고 2 분 후에 죽일 것이다.
n
그 시간에 당신 의 점수가 가장 높습니다 .
동점 인 경우 첫 번째 답이 이깁니다.
내 코드는 어디에서 테스트됩니까?
cygwin 아래의 (약간 오래된) Windows 7 랩톱에서 코드를 실행합니다. 결과적으로이 작업을 쉽게 수행 할 수 있도록 도움을주십시오.
내 노트북에는 8GB의 RAM과 2 개의 코어와 4 개의 스레드가있는 Intel i7 5600U@2.6GHz (Broadwell) CPU가 있습니다. 명령어 세트에는 SSE4.2, AVX, AVX2, FMA3 및 TSX가 포함됩니다.
언어 별 주요 항목
- Anders Kaseorg의 CryptoMiniSat을 사용하여 Rust 에서 n = 40 입니다 . (Vbox 아래의 Lubuntu 게스트 VM에서)
- Christian Seviers의 BuDDy 라이브러리를 사용하는 C ++ 에서 n = 35 (Vbox 아래의 Lubuntu 게스트 VM에서)
- N = 34 에 Clingo 앤더스 Kaseorg 의해. (Vbox 아래의 Lubuntu 게스트 VM에서)
- Anders Kaseorg의 Rust 에서 n = 31 .
- NikoNyrh의 Clojure 에서 n = 29
- bartavelle에 의해 C 에서 n = 29 .
- Bartavelle의 Haskell 에서 n = 27
- alephalpha에 의한 Pari / gp 에서 n = 24 .
- N = 22 에서 파이썬 2 + pypy 내게로.
- N = 21 에 티카 alephalpha 의해. (자체보고)
미래 바운티
이제 2 분 안에 내 컴퓨터에서 최대 n = 80 에 이르는 답변에 대해 200 포인트의 현상금을 줄 것입니다.