젤리 , 4 바이트
ẆQSḢ
온라인으로 사용해보십시오!
0
s 및 1
s 목록으로 입력을 받습니다.
숫자와 함께 온라인으로 사용해보십시오!
설명:
ẆQSḢ Argument: B = list of bits, e.g. [1, 1, 0, 1]
Ẇ Get B's non-empty sublists (i.e. [[1], [1], [0], [1], [1, 1], [1, 0], [0, 1], [1, 1, 0], [1, 0, 1], [1, 1, 0, 1]])
Q Keep first occurrences (i.e. [[1], [0], [1, 1], [1, 0], [0, 1], [1, 1, 0], [1, 0, 1], [1, 1, 0, 1]])
S Reduce by vectorized addition (i.e. [6, 4, 1, 1])
Ḣ Pop first element (i.e. 6)
작동한다는 증거 :
이 프로그램은 입력 번호 N을 얻습니다. . 이 제품이 수행하는 첫 번째 일은 물론,의 문자열 걸릴 것입니다 N 2 ( N 자료 2 ). 여기에는 0 또는 1로 시작하는 중복 하위 문자열이 포함됩니다 .
그런 다음 하위 문자열 목록에서 각 값의 첫 번째 항목 만 유지하여 고유 한 하위 문자열을 가져옵니다.
그런 다음이 프로그램은 목록의 첫 번째 요소를 합한 다음 두 번째 요소, 세 번째, 네 번째 등을 합하며 목록 중 하나에 해당 요소 0
가없는 것으로 가정합니다. 문제는 효과적으로 묻는 것입니다. 이 숫자는 1로 시작하는 고유 한 하위 문자열 이 몇 개입니까? . 계산할 첫 번째 요소는 모두이므로 1
적절한 하위 문자열을 필터링하는 대신 간단히 합할 수 있습니다.
이제 위에서 설명한 합계 목록의 첫 번째 요소는 하위 문자열의 첫 번째 비트 수를 유지하므로 간단히 팝하고 마지막으로 반환합니다.