該算法題來(lái)自于 codewars【語(yǔ)言: javascript】锰茉,翻譯如有誤差乾胶,敬請(qǐng)諒解~
- 任務(wù)
- 創(chuàng)建函數(shù)接收2個(gè)變量捌年,比較并返回一個(gè)更大的變量佛点。
- 規(guī)則:
1.每個(gè)字母都有自己的權(quán)重:
A = 1, B = 2, ... Y = 25, Z = 26
a = 0.5, b = 1, ... y = 12.5, z = 13
2.只有大寫字母能進(jìn)行比較醇滥。
3.總數(shù)(A + B + C + ...)大的一組被返回黎比。
4.如果兩個(gè)組的值一樣大,則返回 “Tie!”鸳玩。 - 例如:
battle("One", "Two"); // => "Two"`
battle("ONE", "NEO"); // => "Tie!"
- 解答
- 其一
const letter1 = '1ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const letter2 = '1abcdefghijklmnopqrstuvwxyz';
const sum = str => [...str].map(el=>letter1.indexOf(el) > 0 ? letter1.indexOf(el) : letter2.indexOf(el)/2).reduce((r,v)=>r+v,0);
const battle = (x, y) => sum(x) == sum(y) ? 'Tie!' :( sum(x) > sum(y) ? x : y);
- 其二
function battle(x, y) {
return calculate([...x].reduce(score, 0), [...y].reduce(score, 0));
function calculate(a, b) {
return a === b ? 'Tie!' : a > b ? x : y;
}
function score(acc, val) {
const VALUES = { A:1,B:2,C:3,D:4,E:5,F:6,G:7,H:8,I:9,J:10,K:11,L:12,M:13,N:14,O:15,P:16,Q:17,R:18,S:19,T:20,U:21,V:22,W:23,X:24,Y:25,Z:26 };
return acc + ((VALUES[val]||(VALUES[val.toUpperCase()]/2||0)));
}
}
- 其三
const battle = (x, y) => [x,"Tie!",y][Math.sign(val(y)-val(x))+1];
const val = x => [...x].reduce( (s,v) => s+ (" abcdefghijklmnopqrstuvwxyz".indexOf(v.toLowerCase())*(v>"Z"?.5:1)), 0);