이 과제의 목표는 목록에서 선택한 항목을 수집하여 목록의 특정 위치로 옮기는 것입니다.
시각적 예로, 입력 값 (블랙 박스 정수로 표시됨)과 해당되는 진리 값 목록을 사용합니다. 여기서 true는 항목이 선택 T되었음을 나타냅니다 ( 진실하고 거짓 인 파란색 상자로 표시 F).
첫 번째 논리적 단계는 진실이 아닌 진실로 표시된 항목을 해당 목록으로 분리하는 것입니다. 각 목록의 상대 순서는 유지되어야합니다 (즉, 선택된 항목의 순서는이어야 1,4,5하고 선택되지 않은 항목의 순서는이어야합니다 2,3,6,7).
두 번째 논리 단계에는 선택되지 않은 항목의 나머지 목록에 색인이 제공됩니다. 선택한 색인의 항목 앞에 선택한 모든 항목을 삽입하십시오. 인덱싱이 0에서 시작한다고 가정하면, 인덱스 3에 선택 항목을 삽입한다고 가정합니다. 이것은 7상자 앞의 지점에 해당 하므로 선택한 항목을 앞에 삽입해야합니다 7.
최종 솔루션은 다음과 같습니다 2,3,6,1,4,5,7.
이 논리 다이어그램은 이것이 수행 될 수있는 한 가지 방법을 나타냅니다. 출력이 항상 동일한 관찰 가능한 결과를 생성하는 한 프로그램은 동일한 논리적 단계를 수행하지 않아도됩니다.
입력
당신의 프로그램은 3 개의 입력을받습니다 :
- 항목을 나타내는 정수 목록입니다. 빈 목록 일 수 있습니다. 이 목록은 항상 고유 한 양의 정수로 구성되며 반드시 정렬 된 순서는 아닙니다 (즉, 5가 목록에 두 번 있지는 않음).
- 항목 목록과 길이가 같은 참 / 거짓 값의 목록입니다. 여기서 참 값은 동일한 색인의 항목이 선택되었음을 나타냅니다.
- 선택 영역을 삽입 할 위치를 나타내는 정수입니다. 프로그램의 모든 실행에서 일정하기 만하면 목록의 첫 번째 항목의 인덱스를 선택할 수 있습니다 (예 : 첫 번째 항목은 인덱스 0 또는 인덱스 1 일 수 있음). 프로그램이 준수하는 규칙을 지정하십시오. 이 인덱스는 범위 내에 있어야합니다
[starting_idx, ending_idx+1]. 즉, 항상 유효한 인덱스입니다. case index가ending_idx+1인 경우 목록 끝에 선택 항목을 삽입해야합니다. 이 정수가 언어의 기본 정수 유형에 적합하다고 가정 할 수 있습니다.
입력은 원하는 소스 (stdio, function parameter 등)에서 올 수 있습니다.
산출
출력은 항목의 최종 순서를 나타내는 목록입니다. 이것은 원하는 소스에 해당 할 수 있습니다 (stdio, return value, function output parameter 등). 모든 입력을 제자리에서 수정할 수 있습니다 (예 : 수정 가능한 목록을 함수 매개 변수로 지정하고 해당 목록에서 함수가 제자리에서 작동하도록).
테스트 사례
다음 테스트 사례는 모두 0 기반 인덱싱을 가정합니다. 선택 마스크에 대해 각각 잘못된 값과 잘못된 값을 나타 내기 위해 0과 1을 사용했습니다.
테스트 케이스의 목록 형식은 [a,b,c]이지만 입력 목록이 유한 한 순서를 나타내는 한 괜찮습니다.
입력:
[]
[]
0
산출:
[]
입력:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
3
산출:
[2,3,6,1,4,5,7]
입력:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
0
산출:
[1,4,5,2,3,6,7]
입력:
[1,2,3,4,5,6,7]
[1,0,0,1,1,0,0]
4
산출:
[2,3,6,7,1,4,5]
입력:
[1,2,3,4,5,6,7]
[1,1,1,1,1,1,1]
0
산출:
[1,2,3,4,5,6,7]
입력:
[1,2,3,4,5,6,7]
[0,0,0,0,0,0,0]
5
산출:
[1,2,3,4,5,6,7]
입력:
[1,3,2,5,4,6]
[1,0,0,1,1,0]
3
산출:
[3,2,6,1,5,4]
채점
이것은 코드 골프입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점은 금지되어 있습니다. 원하는 내장 기능을 사용할 수 있습니다.


