【发布时间】:2014-04-23 16:33:15
【问题描述】:
我需要一个函数来打乱一组元素,但是,保持元素之间的最小距离为 2。
让我解释一下我的情况,我有一个不间断的输入,它每 200 毫秒不断向我发送单词。我还有一个带有预定义单词的独特数组。
我收到的每个单词,我都会检查它是否正常,如果在我的条件下正常,我想将它放入我的数组中。但是,在那一刻,我不再需要一个唯一的数组,所以我的数组中可能会有双精度数,事实上,我希望有适合我条件的双精度词。
好的,所以,问题来了,我收到的每个 OK 字,我想把它放在数组中,然后随机播放,它可以是一个双精度数,但是,在这种情况下,我想在这之间保持距离单词和数组中其他相同的单词。
示例:
唯一数组:[foo, bar, baz, qux]
我启动程序,它每 200 毫秒向我发送一次单词。
得到:fubar > 好的
插入:[foo, bar, baz, qux, fubar]
得到:橙色 > 好的
插入:[foo, bar, baz, qux, fubar, orange]
得到:石灰 > 好的
插入:[foo,bar,baz,qux,fubar,orange,lime]
得到:qux > OK (DOUBLE)
插入正确的方式:[foo, bar, baz, qux, fubar, orange,lime, qux]
插入正确的方式:[foo, qux, bar, baz, qux, fubar, orange,lime]
插入错误的方式:[foo, bar, baz, qux, qux, fubar, orange,lime]
第一个距离为 3,第二个距离为 2... 第三个和错误的,距离为0。
谁能给我一个好的方法和/或逻辑来做到这一点?对于这种情况,最小距离 = 2。
提前谢谢你。
编辑 1: 用户 jfriend00 显示了数组被双精度数填满的可能性,假设它们都有最小距离,并且下一个要插入的元素没有合适的位置,那么,我不能插入它。
编辑 2: 我还认为我必须避免插入可能无法进行下一次插入的位置,如下所示:
得到:苹果 > 好的
(A) 插入正确的方式:[baz, qux, fubar, orange,lime, apple]
得到:qux > OK (DOUBLE)
(A) 插入正确的方式:[baz, qux, fubar, orange, qux,lime, apple]
(B) 插入方式错误:[baz, qux, fubar, orange,lime, qux, apple]
在这里,插入被插入距离 3 (B) 处的 qux “截断”。
得到:qux > OK (DOUBLE)
(A) 插入正确的方式:[baz, qux, fubar, orange, qux,lime, apple, qux]
(B) 插入方式错误:[baz, qux, fubar, orange,lime, qux, apple]
【问题讨论】:
-
您是否意识到一个项目可能有如此多的副本,以至于您无法将其插入到数组中,除非它位于另一个副本旁边?
-
现在我确实这样做了,在这种情况下,我一定不能插入到数组中。
标签: javascript arrays distance shuffle