javascript - CodeWars 中的权重
问题描述
问题是:
“我的朋友 John 和我是“Fat to Fit Club (FFC)”的成员。John 很担心,因为每个月都会发布一份包含会员体重的名单,而且每个月他都是名单上的最后一个,这意味着他是最重的。
我是建立名单的人,所以我告诉他:“别担心,我会修改名单的顺序”。决定将“权重”归因于数字。从现在开始,一个数字的权重将是其数字的总和。
例如,99 的“权重”为 18,100 的“权重”为 1,因此在列表中 100 将排在 99 之前。给定一个具有 FFC 成员权重的字符串以正常顺序排列,您可以给该字符串按“权重”排序吗?这些数字?”
例子
“56 65 74 100 99 68 86 180 90”按数字权重排序变为:“100 180 90 56 65 74 68 86 99” 当两个数字具有相同的“权重”时,让我们将它们分类为字符串(按字母顺序排列) ) 而不是数字:100 在 180 之前,因为它的“权重”(1) 小于 180 (9) 之一,而 180 在 90 之前,因为具有相同的“权重”(9),它作为字符串出现在之前.
列表中的所有数字都是正数,列表可以为空。
这是我到目前为止的代码:
function sumOfParts(num) {
return num.split('').reduce((a, b) => parseInt(a) + parseInt(b), 0)
}
function orderWeight(string) {
return string.split(' ').sort().sort((a,b) => sumOfParts(a) - sumOfParts(b)).join(' ')
}
字符串上的代码字即使有两个具有相同值的连续数字,但是当添加 3+ 个具有相同总和的数字时,它开始中断....以下是一些破坏它的字符串:
Expected: '112 14 170 233100 63 29 65 138 156 67 77 79 324612 144435 143275 335392 477504 460549 96194 281479 347984', instead got: '112 14 170 63 233100 29 65 156 138 67 77 79 324612 144435 143275 335392 477504 460549 96194 281479 347984'
预期:'200 113 41 114 25 52 109 155 83 76 161330 59 450231 274111 274111 93131 440830 440830 432353 274292 320986 371567 29858'相反: 29858'
被困在这个上的时间更长了,然后我想承认大声笑
谢谢
解决方案
对于相同的总和,您需要单次排序和按字符串排序。
function sumOfParts(num) {
return num.split('').reduce((a, b) => a + +b, 0)
}
function orderWeight(string) {
return string
.split(' ')
.sort((a, b) => sumOfParts(a) - sumOfParts(b) || a > b || -(a < b))
.join(' ');
}
console.log('out', orderWeight('112 14 170 63 233100 29 65 156 138 67 77 79 324612 144435 143275 335392 477504 460549 96194 281479 347984'));
console.log('exp', '112 14 170 233100 63 29 65 138 156 67 77 79 324612 144435 143275 335392 477504 460549 96194 281479 347984');
console.log('out', orderWeight('200 41 113 114 52 25 109 83 155 76 59 161330 450231 274111 93131 440830 432353 274292 320986 371567 29858'));
console.log('exp', '200 113 41 114 25 52 109 155 83 76 161330 59 450231 274111 93131 440830 432353 274292 320986 371567 29858');
推荐阅读
- java - 将 JNI 与 Gradle(和 lombok)一起使用
- vb.net - : '不能绑定到新的值成员。参数名称:value' vb.net 以及如何使用组合框中的值
- excel - 将列中的日期合并到 Excel 中的单个单元格中
- java - 如何使用 OpenCSV 解析多行记录?
- javascript - 如何在 React 中的兄弟组件之间传递数据?
- ios - 获取 UIColor 的深色样式
- azure-active-directory - 有没有办法使用 Graph API 获取 SharePoint Site Creator 电子邮件和网站状态
- tcp - 如何在 Microsoft Teams 中阻止聊天和通话
- r - 向数据框中添加一行,其中 n 列填充一个(相同)值 dplyr (add_row)
- flutter - snapshot.ConnectionState 总是在等待 FLUTTER