使用混合顺序

时间:2018-04-01 00:41:50

标签: javascript html combinations permutation jspsych

我正在使用jsPsych为教授设置认知实验,其中刺激是大约200个具有4种不同间距类型的形式T∧F∨T的逻辑陈述。我需要找到一种方法来生成三个真值,两个逻辑运算符和四个间距类型的每个组合,以正确的顺序编写,无需手动输入所有内容(希望如此)。

具体内容如下:

间距类型(其中 - 代表空格):

1)T∧T∨T即没有空格,2)T∧ - T∨T,3)T∧T - ∨T ,4)T∧ - T - ∨T

1)∧∧,2)∨∨,3)∧∨,4)∨∧

真值

T和F的所有3种组合(有8种)。 Ex TTT TTF FTF FFF

所以我需要经历这三件事的所有组合,将它们组合成字符串(用html编写),并生成包含所有字符串的列表或数组(大约有200个)。我对cs相当陌生,所以任何帮助都会受到这个问题的青睐,对我来说这只是太多动人的事了!

note 感谢评论者指出我没有包含我尝试的内容。

我使用3-5个嵌套for循环尝试了一段时间。我最初设置一个大小为7的数组(因为这是字符串中可能的最长长度)并使用for循环来填充数组的空格。我几乎完全没有使用这条路线。这似乎很有希望,也许我可以让它工作,但它也非常不优雅和长,我现在想知道是否有更直接的方式来做到这一点。同样,我不知道这可能是我不知道的资源。

谢谢!

3 个答案:

答案 0 :(得分:1)

要快速使用js-combinatorics

Combinatorics.cartesianProduct(
    ['     ', '--   ', '   --', '-- --'],
    ['^^', 'vv', '^v', 'v^'],
    [ true, false ],
    [ true, false ],
    [ true, false ]
).toArray()

答案 1 :(得分:0)

感谢前面给出的js-combinatorics答案。事实证明,您发布的代码确实无法正常工作(因为每个数组对应于该位置)。但它帮助我弄明白了。

Combinatorics.cartesianProduct(
            ['T', 'F'],
            ['∧', '∨'],
            ['T', 'F'],
            ['∧', '∨'],
            ['T', 'F']
    ).toArray();

然后在使用简单循环生成该列表之后,需要添加每种间距类型的空格。

答案 2 :(得分:0)

对于这种情况,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},
]
*/

您可以根据您的问题调整此问题,但是您需要对输出进行一些争论,以使其符合您要查找的确切格式。