codewars是一个在线编程网站,其奖励机制像打怪升级。你不能查看高于你级别的问题的答案。除非自己通过提交测试。通过提交之后可以看到各种解法排行榜 。通过对比自己解法和排行榜对比,可以找到差距,提高能力。

描述 : greed dice 是一个骰子游戏,使用5个骰子,5个点数根据 一定的规则 算出分数,你要做的就是根据输入的数组点数,输出最后的分数 。

规则如下 : 3个 1  = 1000分,3个6  = 600分,3个5=500分,3个4 = 400分,3个3 = 300分,3个2 = 200分,1个1 = 100分,1个5 = 50分。

题目应该很简单,根据输入的点数,统计每个点数的个数,然后根据规则计算得分。

我的代码:

<span style="font-size:18px;">function score( dice ) {// Fill me in!var score = 0 ;var diceR = [ 0,0,0,0,0,0] ;var length = dice.length ;for (var i =0 ; i < dice.length ; ++ i){diceR[dice[i] ] += 1;}for(var index = 1;index <= diceR.length ;++ index ){var item = diceR[index] ;if ( item > 0) {switch (index){case 1 :  score +=  1000* Math.floor(item /3) + 100* (item %3);continue;case 2 :  case 3 : case 6 :  case 4 :  score +=  index*100 * Math.floor(item /3) ;continue;case 5 :  score +=  index*100 * Math.floor(item /3) + 50* (item %3); continue;  default : score += 0 ;continue ;                }  }}return score ;
}</span>

diceR 数组是根据下标对应个数。在官网test通过,submit有一个测试案例通不过,但是不知道输入,到现在也没想到原因,纠结中,求看到有兴趣的私信呀

看一下排行榜第一的代码 :

<span style="font-size:18px;"> function score( dice ) {var diceR = [0,0,0,0,0,0] ;var tdr = [1000,200,300,400,500,600] ;var sdr = [100,0,0,0,50,0] ;dice.forEach(function(item){diceR[item -1] ++ ;})return   diceR.reduce(function(prev,cur,index){return prev + ( cur >= 3 ? tdr[index] : 0)+ sdr[index] * (cur%3) ;},0)
}</span>

分析 :  精妙之处 1 ,对原数组出现个数的统计,我使用了for循环,这里使用forEach函数,数组的forEach函数,不返回值,只对每一项运行特定的函数,本质上与用for循环迭代数组一样,用自身函数,效率更高。 2  计算最终结果时,我又用了for循环,并且因为要判断6中情况,所以我还嵌套了一个switch语句,简直不能忍,这里把的分数放入数组,类似于哈希表的都是用,计算个数对应的得分。 3 归并函数的使用,reduce函数就是逐个迭代数组所有项,然后构建一个最终返回值。用在这里简练精巧。

JavaScript提供了很多原生的方法,多练习才能更熟练的运用。

codewars打怪日记 Greed is Good JavaScript中数组用法和 哈希表的使用相关推荐

  1. JavaScript中数组使用总结

    一. 数组的概念 1.1 什么是数组 数组是指的数据的有序列表. 数组中每个值称之为数组的一个元素. 数组中的每个元素都有一个位置,这个位置称之为索引(下标.index).数组的索引是从 0 开始的 ...

  2. java中字符串和数组如何比较_[Java教程]javascript中数组和字符串的方法比较

    [Java教程]javascript中数组和字符串的方法比较 0 2016-07-19 23:00:05 ×目录[1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的 ...

  3. [乐意黎原创] JavaScript中数组使用总结

    原文地址:http://blog.csdn.net/u012468376/article/details/53147098 一. 数组的概念 1.1 什么是数组 数组是指的数据的有序列表. 数组中每个 ...

  4. Python中常用的数据结构---哈希表(字典)

    Python中常用的数据结构-哈希表(字典) 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. ...

  5. 【C++ 包装器类 map】C++ 标准库(std)中的map结构 哈希表(unordered_map)和黑红树(map)教程

    目录标题 1. 哈希表(unordered_map)和黑红树(map)简介以及初始化 1.1 哈希表的基本介绍 1.1.1 哈希表初始化接口示例 1.1.2 哈希表的键值的注意事项 1.1.3 自定义 ...

  6. JavaScript中数组slice和splice的对比小结

    前言 今天重温了一下Javascript,看到了数组的方法,其中有两个比较相似的方法--splice和splice,看着很像,就是多了一个p,但是用法却相当不一样. 在使用中,可以通过选择一个具有强语 ...

  7. javascript中数组的22种方法

    前面的话数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细 ...

  8. php中不让数组初始化,javascript中数组与php数组初始化差异

    准确来说,javascript中我们需要称之为数组对象,因为数组就是对象,不信你看: var a=[1,2,3]; //竟然会弹出object alert(typeof(a)); 之前学习php的时候 ...

  9. Javascript中数组的sort方法的分析

    定义和用法 JavaScript中sort() 方法用于对数组的元素进行排序, 返回一个元素已经进行了排序的 Array 对象 语法 arrayObject.sort(sortby) 参数 描述 so ...

最新文章

  1. mysql行列转换_Excel、SQL、Python分别实现行列转换
  2. canvas.translate(x,y)
  3. win7桌面图标计算机打不开,win7系统下双击电脑桌面图标打不开的解决方法
  4. 深入探讨运维驱动的可监控性设计
  5. 设置DIV块元素在浏览器页面中垂直居中
  6. 关与 @EnableConfigurationProperties 注解
  7. 学习PLC编程必须要知道的小常识,一起学起来
  8. 通过删除注册表破解plsql
  9. 小白都不知道的互联网行业黑化大全
  10. python 有限域函数库_有限域:计算矩阵的逆
  11. 接口测试神奇APIPOST
  12. 一键删除越狱环境方法教程,uncOvre4.0.2发布了
  13. 用php怎样将图片gif转化为jpg
  14. 设计模式 | 装饰者模式及典型应用
  15. 5款在线制图工具分享,快来看看!
  16. Flutter: Dart 参数,以及 @required 与 required
  17. 孩子升年级难适应?猿辅导语文金牌教研来支招
  18. Layui 重载后表格内容重复 更换提交方式已解决
  19. 计讯物联二次供水水池泵站监测方案,从根本上保障居民饮用水安全
  20. 指针之野指针系列(2):如何规避野指针

热门文章

  1. 高性能无线综合测试仪 无线电综合测试仪 ---TFN PM5100 100KHz-1GHz
  2. 第 1 份工作,我只干了 2 周就被辞退了 | 十年系列
  3. Python每日一练(13)-IQ智商判断及测试
  4. [048量化交易]python获取股票 量比 换手率 市盈率-动态 市净率 总市值 流通市值写入数据库MongoDB
  5. java 有五个学生_《Java程序设计》 创建5个学生对象,给一个学生数组赋值,每个学生属性有:学号,姓名,年龄。...
  6. 深度学习常见名词概念:Sota、Benchmark、Baseline、端到端模型、迁移学习等的定义
  7. 布林带止盈止损策略改进
  8. python利用pyinstaller打包文件
  9. unity 显示太阳_太阳系究竟有多大?来看看天文学家是怎么解答的
  10. 太理同学APP——个人比较有成就感的作品吧!