[7kyu]Battle of the characters (Medium)

该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~

  • 任务
    • 创建函数接收2个变量,比较并返回一个更大的变量。
  • 规则:
    1.每个字母都有自己的权重:
    A = 1, B = 2, ... Y = 25, Z = 26
    a = 0.5, b = 1, ... y = 12.5, z = 13
    2.只有大写字母能进行比较。
    3.总数(A + B + C + ...)大的一组被返回。
    4.如果两个组的值一样大,则返回 “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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~ 任务创建函数接收2个变...
    君肄塵阅读 1,315评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,354评论 0 33
  • 该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~ 场景给你一个包含一些正...
    君肄塵阅读 1,891评论 0 0
  • 大道至简。简单,就难在坚持做,重复做。 正悟。在最困难的时候,想办法。再重复实践。
    98633f187524阅读 1,067评论 0 0
  • {R} 【F】:《关键对话》的作者是美国一支高效合作的团队中四位成功的培训大师合著的。 堪称为“旷世奇书”,它以四...
    DevaGopalKaur子涵阅读 2,312评论 0 0

友情链接更多精彩内容