当前位置: 首页 > 知识库问答 >
问题:

Ruby Koans评分项目

宇文勇
2023-03-14

我正在研究Ruby Koans,我很难弄清楚我写的方法出了什么问题。我在about_scoring_project.rb,我为骰子游戏编写了得分方法

def score(dice)
  return 0 if dice == []
  sum = 0
  rolls = dice.inject(Hash.new(0)) { |result, element| result[element] += 1; result; }
  rolls.each { |key, value| 
    # special condition for rolls of 1
    if key == 1  
      sum += 1000 | value -= 3 if value >= 3
      sum += 100*value
      next
    end
    sum += 100*key | value -= 3 if value >= 3
    sum += 50*value if key == 5 && value > 0
  }
  return sum
end

对于那些不熟悉该练习的人:

贪婪是一个骰子游戏,你最多掷五个骰子来累积分数。下面的“分数”函数将用于计算骰子单次掷出的分数。

贪婪掷骰得分如下:

>

一组三个数字(除1之外)值100倍的数字。(例如,三个五是500分)。

一个1(不是一组3的一部分)值100分。

一个五(不是一组三的一部分)值50分。

其他一切都值0分。

例子:

分数([1,1,1,5,1])=

下面的测试中给出了更多评分示例:

你的目标是写评分法。

当我尝试运行文件中的最后一个测试时,我遇到了麻烦:assert_equal550,分数([5,5,5,5])

出于某种原因,我返回551而不是550。谢谢你的帮助!

共有3个答案

谭绍晖
2023-03-14

我跟去了

def score(dice)
  dice.uniq.map do |die|
    count = dice.count die
    if count > 2
      count -= 3
      die == 1 ? 1000 : 100 * die
    else 0
    end + case die
          when 1 then count * 100
          when 5 then count * 50
          else 0
          end
  end.inject(:+) || 0
end
秦权
2023-03-14

我的方法使用两个查找表——一个包含三倍的分数,另一个包含单身的分数。我使用表格计算每个数字的分数,并使用注入累积总数:

def score(dice)
  triple_scores = [1000, 200, 300, 400, 500, 600]
  single_scores = [100, 0, 0, 0, 50, 0]
  (1..6).inject(0) do |score, number|
    count = dice.count(number)
    score += triple_scores[number - 1] * (count / 3)
    score += single_scores[number - 1] * (count % 3)
  end
end
甄阿苏
2023-03-14

以下是我的方法

def score(dice)
  # Count how many what
  clusters = dice.reduce(Hash.new(0)) {|hash, num| hash[num] += 1; hash }

  # Since 1's are special, handle them first
  ones = clusters.delete(1) || 0
  score = ones % 3 * 100 + ones / 3 * 1000

  # Then singular 5's
  score += clusters[5] % 3 * 50

  # Then the triples other than triple-one
  clusters.reduce(score) {|s, (num, count)| s + count / 3 * num * 100 }
end
 类似资料:
  • 介绍 用于对事物进行评级操作。 引入 import { createApp } from 'vue'; import { Rate } from 'vant'; const app = createApp(); app.use(Rate); 代码演示 基础用法 <van-rate v-model="value" /> export default { data() { retur

  • 使用指南 组件介绍 评分组件,支持自定义评分图案,评分范围等。 引入方式 import { Rate } from "feart"; components:{ 'fe-rate':Rate, } 代码演示 基础用法 使用 icon 组件 <fe-rate v-model="value" /> 不使用 icon 组件 <fe-rate v-model="value" :is-icon=

  • 当鼠标移动到星星上时,星星会暂时地指向鼠标所在的星星;此时移出星星,那么组件会恢复到原有值。只有在星星点击一下,值才会被固定下来,移出时不再恢复。 等级:<span id="level"></span> <div id="rating"></div> <div class="btn-bar"> <button id="disable">disable()</button> <but

  • 评分组件。实现一套滑动评分的机制,支持定制任意图标。 Usage 全部引入 import { Rate } from 'beeshell'; 按需引入 import Rate from 'beeshell/dist/components/Rate'; Examples Code 详细 Code import { Rate } from 'beeshell' <Rate total={3}

  • Rate component can be used to show evaluation, and it provide a quick rating operation on something. Basic The simplest usage. <rate /> Readonly Set the disabled attribute to disable mouse interactio

  • Rate 评分 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过count参数设置总共有多少颗星星可选择 通过v-model双向绑定初始化时默认选中的星星数量 1.4.5新增 通过current设置初始化时默认选中的星星数量(1.4.5后建议使用v-model的方式,此参数为了向前兼容依然有效,但优先级低于v-mo