只需解决:
就性能而言,这意味着:
对于标准 1:
最佳解决方案:
我认为这会起作用。只有一种方法可以找到答案。
这是我用于识别标准 2 的代码(1、2 或 3 的差异):
let differFlag = true; let i = 1; while (differFlag && i < list.length) { let amount = Math.abs(list[i] - list[i - 1]); if (![1, 2, 3].includes(amount)) { differFlag = false; } i++; }
这是我用于识别标准 1 的代码(所有差异都会增加或减少):
let differFlag = true; let i = 1; let differences = []; while (differFlag && i < list.length) { let amount = list[i] - list[i - 1]; differences.push(amount); if (![1, 2, 3].includes(Math.abs(amount))) { differFlag = false; } i++; }
这是捕获安全报告的最终条件:
if ( differFlag && (differences.every((el) => el > 0) || differences.every((el) => el < 0)) ) { safeCount++; }
总之,我的算法为示例输入生成了正确的答案。
它会对我的拼图输入做同样的事情吗?
是的,sirrreeee!!
甜甜的!
这确实让事情变得有点复杂。
我想避免使用检查报告每种可能排列的算法。这需要生成数百万份报告。
第一个好消息是:
对于我的谜题输入,大约有 200 个不需要我检查排列。
尽管如此,800/1000 仍然是一个很多的列表来充分探索排列。
老实说,我没有找到一种方法来避免在不安全报告的每个排列上运行我的算法。
真糟糕。
是时候添加一个循环来迭代不安全报告中的每个数字 - 要删除的数字,然后检查变异列表是否通过。
我最终复制了 while 循环,并添加了行以复制并从每个后续测试报告中删除一个数字。
代码多了。
但是,它有效!我为拼图输入生成了正确答案!
问题是:
让我们运行一下看看...
嗯,它运行了,但我得到的答案只是比我的第 1 部分答案稍大一些。这似乎是错误的。
提交也没什么坏处吧???
是正确!
神圣的烟雾!
太不可思议了!
解决起来真的很有趣!
四颗金星进入第三天。
带来更多精彩的谜题!
以上是红鼻子报告的详细内容。更多信息请关注PHP中文网其他相关文章!