Nad*_*ius 3 javascript sorting lexicographic
问题是:
“我和我的朋友约翰是‘Fat to Fit Club (FFC)’的会员。约翰很担心,因为每个月都会发布一份会员体重名单,而每个月他都是名单上的最后一个,这意味着他是最重要的。”最重。
我是制定名单的人,所以我告诉他:“别担心,我会修改名单的顺序”。决定给数字赋予“权重”。从现在开始,一个数字的权重将是其数字之和。
例如,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(' ')
}
Run Code Online (Sandbox Code Playgroud)
字符串上的代码字即使有两个具有相同值的连续数字,但当添加 3 个以上具有相同总和的数字时,它就会开始损坏......以下是一些损坏它的字符串:
预期:'112 14 170 233100 63 29 65 138 156 67 77 79 324612 144435 143275 335392 477504 460549 96194 281479 347984',而是得到:'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 93131 440830 432353 274292 320986 371567 29858',而是得到:'200 41 113 114 52 25 109 83 155 76 59 161330 450231 274111 93131 440830 432353 274292 320986 371567 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');Run Code Online (Sandbox Code Playgroud)