【发布时间】:2020-01-05 17:20:35
【问题描述】:
const dice = [1,3,4,5,6]
const score = straightScore(dice,4)
function straightScore(dice, sizeOfStraight) {
let score = 0
sizeOfStraight > 4 ? score = 40 : score = 30
dice.sort( (a, b) => a-b )
// filter to eliminate duplicates
const filteredDice = dice.reduce( (acc, die) => {
if ( acc.indexOf(die) === -1 ) acc.push(die)
return acc
}, [] )
//determine straight
const straightFinder = filteredDice.reduce( (acc, die) => {
const lastNumInArray = acc.slice(-1)[0]
// here is my hack if the small straight starts with 3 and the last die is a 1
if ( die - lastNumInArray === 2) acc = [die]
if ( lastNumInArray === undefined || die - lastNumInArray === 1 ) acc.push(die)
return acc
}, [] )
if (straightFinder.length >= sizeOfStraight) return score
return 0
}
console.log(score)
我得到了这个工作,但感觉很hacky。任何想法将不胜感激。
我正在尝试制作一个基本的 Yahtzee 游戏。确定是否滚动顺子是我卡住的地方。它基本上是有效的,但如果它是一个小的顺子(五个骰子中的一个连续 4 个)从 3 - 6 并且第五个骰子是 1,我的减少将无法正常工作。它总是解析为 1 项数组。我可以在我的逻辑中看到问题,所以我在其中投入了一些小技巧以使其工作,但我觉得必须有十几种更好的方法。这是我的代码。感谢观看。
骰子是一个由 5 个数字 1-6 组成的数组,代表骰子,sizeOfStraight 只是为了让我可以将它重用于大顺子。不过,问题只出现在小顺子上,所以你可以为此投入 4。
输入骰子 = [1, 3, 4, 5, 6] 输出(无,只是返回,因为 StraightFinder.length = 1)
【问题讨论】:
-
请添加输入输入与预期输出的示例。
-
除了@OriDrori 所说的,这是纯JavaScript。付出一点努力并创建一个 sn-p,以便我们可以轻松地对其进行测试/修复。
-
意外并不完全正确。当我开始输入问题时确实如此。然后我弄清楚发生了什么。我只是在寻找更好的方法。在我在问题中解释的情况下,出乎意料的输出是第二次减少将其减少到一个包含数字 1 的 1 项数组。
标签: javascript arrays reduce