生成具有混合顺序的多个组合的字符串列表
Generating a list of strings of multiple combinations with intermingled order
我正在使用 jsPsych 为教授设置一个认知实验,其中刺激物是大约 200 个形式为 T ∧ F ∨ T 的逻辑语句,具有 4 种不同的间距类型.我需要找到一种方法来生成 three 真值、two 逻辑运算符和 four 的每种组合] 间距类型,以正确的顺序编写,无需手动输入(希望如此)。
具体如下:
间距类型(其中--代表space):
1) T∧T∨T即没有space, 2) T∧--T∨T, 3) T∧T--∨T, 4) T∧--T--∨T
运算符:
1) ∧ ∧ , 2) ∨ ∨ , 3) ∧ ∨ , 4) ∨∧
真值:
T 和 F 的所有 3 个组合(共有 8 个)。 Ex: T T T, T T F, F T F, F F F,等等
所以我需要遍历这三个东西的所有组合,将它们组合成字符串(写在html),并生成一个包含所有字符串的列表或数组(大约有200)。我是 cs 的新手,所以非常感谢任何帮助解决这个问题,这对我来说太多了!
注意感谢评论者指出我没有包含我尝试过的内容。
我已经使用 3-5 个嵌套的 for 循环尝试了一段时间。我最初设置了一个大小为 7 的数组(因为这是字符串的最长可能长度)并使用 for 循环填充数组的 spaces。使用这条路线我几乎完全没有成功。它看起来很有前途,也许我可以让它工作,但它也很不优雅而且很长,我现在想知道是否有更直接的方法来做到这一点。同样,由于我是新手,因此可能有我不知道的资源。
谢谢!
为了加快速度,我会使用 js-combinatorics。
Combinatorics.cartesianProduct(
[' ', '-- ', ' --', '-- --'],
['^^', 'vv', '^v', 'v^'],
[ true, false ],
[ true, false ],
[ true, false ]
).toArray()
感谢之前的回答让我看到 js-combinatorics。事实证明,您发布的代码无法正常工作(因为每个数组都对应于该位置)。但它帮助我弄明白了。
Combinatorics.cartesianProduct(
['T', 'F'],
['∧', '∨'],
['T', 'F'],
['∧', '∨'],
['T', 'F']
).toArray();
然后在使用简单循环生成该列表后,需要添加每种间距类型的空格。
jsPsych 有 a built in factorial method 用于这种情况。
文档中的示例:
var factors = {
stimulus: ['a.jpg', 'b.jpg'],
ms_delay: [100, 200]
}
var full_design = jsPsych.randomization.factorial(factors, 1);
/*
output:
full_design = [
{stimulus: 'a.jpg', ms_delay: 200},
{stimulus: 'b.jpg', ms_delay: 200},
{stimulus: 'b.jpg', ms_delay: 100},
{stimulus: 'a.jpg', ms_delay: 100},
]
*/
您可以根据您的问题调整它,但您随后需要对输出进行一些整理,以使其成为您正在寻找的确切格式。
我正在使用 jsPsych 为教授设置一个认知实验,其中刺激物是大约 200 个形式为 T ∧ F ∨ T 的逻辑语句,具有 4 种不同的间距类型.我需要找到一种方法来生成 three 真值、two 逻辑运算符和 four 的每种组合] 间距类型,以正确的顺序编写,无需手动输入(希望如此)。
具体如下:
间距类型(其中--代表space):
1) T∧T∨T即没有space, 2) T∧--T∨T, 3) T∧T--∨T, 4) T∧--T--∨T
运算符:
1) ∧ ∧ , 2) ∨ ∨ , 3) ∧ ∨ , 4) ∨∧
真值:
T 和 F 的所有 3 个组合(共有 8 个)。 Ex: T T T, T T F, F T F, F F F,等等
所以我需要遍历这三个东西的所有组合,将它们组合成字符串(写在html),并生成一个包含所有字符串的列表或数组(大约有200)。我是 cs 的新手,所以非常感谢任何帮助解决这个问题,这对我来说太多了!
注意感谢评论者指出我没有包含我尝试过的内容。
我已经使用 3-5 个嵌套的 for 循环尝试了一段时间。我最初设置了一个大小为 7 的数组(因为这是字符串的最长可能长度)并使用 for 循环填充数组的 spaces。使用这条路线我几乎完全没有成功。它看起来很有前途,也许我可以让它工作,但它也很不优雅而且很长,我现在想知道是否有更直接的方法来做到这一点。同样,由于我是新手,因此可能有我不知道的资源。
谢谢!
为了加快速度,我会使用 js-combinatorics。
Combinatorics.cartesianProduct(
[' ', '-- ', ' --', '-- --'],
['^^', 'vv', '^v', 'v^'],
[ true, false ],
[ true, false ],
[ true, false ]
).toArray()
感谢之前的回答让我看到 js-combinatorics。事实证明,您发布的代码无法正常工作(因为每个数组都对应于该位置)。但它帮助我弄明白了。
Combinatorics.cartesianProduct(
['T', 'F'],
['∧', '∨'],
['T', 'F'],
['∧', '∨'],
['T', 'F']
).toArray();
然后在使用简单循环生成该列表后,需要添加每种间距类型的空格。
jsPsych 有 a built in factorial method 用于这种情况。
文档中的示例:
var factors = {
stimulus: ['a.jpg', 'b.jpg'],
ms_delay: [100, 200]
}
var full_design = jsPsych.randomization.factorial(factors, 1);
/*
output:
full_design = [
{stimulus: 'a.jpg', ms_delay: 200},
{stimulus: 'b.jpg', ms_delay: 200},
{stimulus: 'b.jpg', ms_delay: 100},
{stimulus: 'a.jpg', ms_delay: 100},
]
*/
您可以根据您的问题调整它,但您随后需要对输出进行一些整理,以使其成为您正在寻找的确切格式。