这项挑战的目标是收集列表中的选定项目并将其移动到列表中的特定位置。
作为一个直观示例,请使用输入值(用黑框整数表示)和相应的真值列表,其中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]
,即它将始终是有效索引。如果案例索引为ending_idx+1
,则选择内容应插入列表的末尾。您可能会认为此整数适合您语言的本机整数类型。
输入可以来自任何所需的来源(stdio,功能参数等)
输出量
输出是代表项目最终顺序的列表。这可以是任何所需的源(stdio,返回值,函数输出参数等)。允许您就地修改任何输入(例如,给定一个可修改列表作为函数参数,并让您的函数在该列表上就地操作)。
测试用例
以下所有测试用例均假定基于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]
计分
这是代码高尔夫;以字节为单位的最短答案获胜。禁止出现标准漏洞。允许您使用所需的任何内置函数。