이 과제의 목표는 목록에서 선택한 항목을 수집하여 목록의 특정 위치로 옮기는 것입니다.
시각적 예로, 입력 값 (블랙 박스 정수로 표시됨)과 해당되는 진리 값 목록을 사용합니다. 여기서 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]
채점
이것은 코드 골프입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점은 금지되어 있습니다. 원하는 내장 기능을 사용할 수 있습니다.