配列要素をハッシュキーと比較し、ハッシュ値を配列に追加します

MrSandman98765
SCORECARD = {
   "1" => 40,
   "2" => 100,
   "3" => 300,
   "4" => 1200
}


def get_score(arr)
  
   score_base = []
  
   #level = getPoints(arr) / 10
   score_base = calculateScore(arr)

end

def getPoints(points)
    points.inject(0) do |sum, point|
       sum + point
    end
end


def calculateScore(lines)
    score_base = []  
    lines.each do |line|
  
        SCORECARD.each do |key, value|
  
            if line == key
                score_base << value
            end
            score_base
        end
     end
end
  

describe "Basic tests" do
  Test.assert_equals(get_score([0, 1, 2, 3, 4]), 1640)
  Test.assert_equals(get_score([0, 1, 1, 3, 0, 2, 1, 2]), 620)
  Test.assert_equals(get_score([2, 0, 4, 2, 2, 3, 0, 0, 3, 3]), 3300)
end

describe "Special tests" do
  Test.assert_equals(get_score([0]), 0)
  Test.assert_equals(get_score([]), 0)
end

Test Results:
Basic tests
Expected: 1640, instead got: [0, 1, 2, 3, 4]
Expected: 620, instead got: [0, 1, 1, 3, 0, 2, 1, 2]
Expected: 3300, instead got: [2, 0, 4, 2, 2, 3, 0, 0, 3, 3]
STDERR
/runner/frameworks/ruby/cw-2.rb:60:in `block in describe': Expected: 1640, instead got: [0, 
1, 2, 3, 4] (Test::Error)
    from /runner/frameworks/ruby/cw-2.rb:46:in `measure'
    from /runner/frameworks/ruby/cw-2.rb:51:in `describe'
    from /runner/frameworks/ruby/cw-2.rb:202:in `describe'
    from main.rb:46:in `<main>'

問題:calculateScoreメソッドのデバッグについて支援が必要です。基本的に、lines配列とSCORECARDハッシュを繰り返し処理し、現在の行がハッシュキーと等しいかどうかを確認し、最後に一致したキーの値をscore_base配列にプッシュします

すべての値をscore_base配列にプッシュしたら、配列内の各要素にscore_baseユーザーの現在のレベルを掛けてから、すべての要素を合計してtotalScore

出力は、lines配列内の要素のみを返すようです。誰かが何が起こっているのかを明らかにすることができますか?

編集:問題に対する私の解決策

```
SCORECARD = {
  "1" => 40,
  "2" => 100,
  "3" => 300,
  "4" => 1200
}

def get_score(arr)
  totalScore = multiplyByLevel(arr)
end

def calculateScore(line)
  score_base = []
  
   score_base.push SCORECARD.fetch(line.to_s, 0)  
   score_base.reduce(:+)
end

def multiplyByLevel(points)
  experience = 1.0
  level = 0
  totalScore = 0
  
  points.each do |point|
   
    experience = experience.round(1) + (point.to_f / 10)
  
    if level < 2
      totalScore = totalScore + (1 * calculateScore(point))
    elsif level >= 2
      totalScore = totalScore + (level.round(1) * calculateScore(point))
    else
      print "Outside loop, level is #{level}"
    end
    level = experience.to_i
    
  end  
  
  totalScore
end
```

編集:BOBRODESフィードバックへの応答:リファクタリング計算スコア法

```
def calculateScore(lines)
  score_base = []
  lines.map {|line| score_base << SCORECARD[line.to_s]}
  score_base.compact
end
#=> [40,100,300,1200]
```
BobRodes

あなたの基本的な問題は、#each常にレシーバーを返すことですレシーバーは左側にあるものです.each)。あなたのコードを見てみましょう:

def calculateScore(lines)
  score_base = []  
  lines.each do |line|
    SCORECARD.each do |key, value|
      if line == key
        score_base << value
      end
      score_base
    end # << returns SCORECARD
  end # << returns lines
end 

だから、あなたはscore_baseここに置く必要があります:

def calculateScore(lines)
  score_base = []  
  lines.each do |line|
    SCORECARD.each do |key, value|
      if line == key
        score_base << value
      end
    end # << returns SCORECARD
  end # << returns lines
  score_base
end 

これはsteenslagの答えの最初の部分の説明ですが、彼の残りのアドバイスも見ていきます。

コードに別の問題があります。のキーSCORECARDは文字列ですが、のテスト入力の値linesは整数です。したがって、質問した問題を修正すると、結果に対して常に空の配列が取得されます。

しかし、コードにはさらに大きな問題があります。それは、#map1行の単純なコードで必要なものを取得するために使用できることです。を使用している間は確かにコードをかなり凝縮することができますが#each#map値を反復処理しながら変換するように設計されており、値を反復処理するように#each設計されています。値を(SCORECARDキーからSCORECARD値に)変換したいので、これ#mapが最も簡単な方法です。

私はすべての楽しみを奪ってあなたのためにそれをしたくないので、ここに簡単な例があり#mapます:

[1, 2, 3, 4].map { |num| num + 1 } #=> [2, 3, 4, 5]

テスト入力でそのアイデアを取り入れて[0, 1, 2, 3, 4]、を返すことができるかどうかを確認してください[nil, 40, 100, 300, 1200]次に、それらすべてを合計する方法を考え出し(nil役立つと思われる値を削除する方法があります)、ワンライナーを作成します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ハッシュの他の配列からキーと値を追加します

分類Dev

配列の配列をハッシュに変換し、最初の配列の要素をハッシュのキーとして使用します

分類Dev

Perl:キーと値の配列をハッシュに変換します

分類Dev

ハッシュのキーと値のペアの値を配列にプッシュします

分類Dev

ArgumentError:ハッシュとハッシュの比較に失敗しました-ハッシュの配列をハッシュ名で並べ替えます

分類Dev

Ruby配列ハッシュは値ごとにキーを取得し、キーごとに値を取得します

分類Dev

配列のハッシュ内の配列に新しい要素を追加する

分類Dev

配列要素をハッシュキーとして使用し、すべてのハッシュ値をすべて指定された値に設定して、配列をハッシュに変換する方法

分類Dev

ハッシュ値を配列と順番に比較する

分類Dev

Perlのハッシュに配列を追加します

分類Dev

2番目の配列の部分文字列に応じて、最初の配列のハッシュにキーと値のペアを追加します

分類Dev

Perl:ハッシュの2つの配列の値を組み合わせ、2番目の配列の値を出力ハッシュのキーにします

分類Dev

ハッシュの配列を配列に変換します

分類Dev

PowerShellのハッシュ内の既存の配列に値を追加しますか?

分類Dev

常にハッシュ要素を配列として扱いますか?

分類Dev

キーを文字列として使用して、ハッシュの最初の要素でハッシュの配列を並べ替えます

分類Dev

ハッシュキー順に並べられたハッシュの配列を出力します

分類Dev

ハッシュ内の配列内の値のキーを検索します

分類Dev

ハッシュ配列から特定のキーの値を取得します

分類Dev

配列の要素をハッシュテーブルに挿入します

分類Dev

他のハッシュ配列のキー値に基づいて、ハッシュの1つの配列を更新します

分類Dev

配列のハッシュをハッシュの配列にマージします

分類Dev

配列のハッシュをハッシュの配列にマージします

分類Dev

ハッシュをハッシュの配列に変換します

分類Dev

文字列をキー、整数配列リストを値として、txtドキュメントをハッシュマップに前処理します

分類Dev

配列の配列を配列値でRubyのハッシュにソートします

分類Dev

Ruby-それぞれのキーでハッシュの配列の値を追加します

分類Dev

配列型としてのキーを持つハッシュ

分類Dev

配列の配列をハッシュの配列に変換します

Related 関連記事

  1. 1

    ハッシュの他の配列からキーと値を追加します

  2. 2

    配列の配列をハッシュに変換し、最初の配列の要素をハッシュのキーとして使用します

  3. 3

    Perl:キーと値の配列をハッシュに変換します

  4. 4

    ハッシュのキーと値のペアの値を配列にプッシュします

  5. 5

    ArgumentError:ハッシュとハッシュの比較に失敗しました-ハッシュの配列をハッシュ名で並べ替えます

  6. 6

    Ruby配列ハッシュは値ごとにキーを取得し、キーごとに値を取得します

  7. 7

    配列のハッシュ内の配列に新しい要素を追加する

  8. 8

    配列要素をハッシュキーとして使用し、すべてのハッシュ値をすべて指定された値に設定して、配列をハッシュに変換する方法

  9. 9

    ハッシュ値を配列と順番に比較する

  10. 10

    Perlのハッシュに配列を追加します

  11. 11

    2番目の配列の部分文字列に応じて、最初の配列のハッシュにキーと値のペアを追加します

  12. 12

    Perl:ハッシュの2つの配列の値を組み合わせ、2番目の配列の値を出力ハッシュのキーにします

  13. 13

    ハッシュの配列を配列に変換します

  14. 14

    PowerShellのハッシュ内の既存の配列に値を追加しますか?

  15. 15

    常にハッシュ要素を配列として扱いますか?

  16. 16

    キーを文字列として使用して、ハッシュの最初の要素でハッシュの配列を並べ替えます

  17. 17

    ハッシュキー順に並べられたハッシュの配列を出力します

  18. 18

    ハッシュ内の配列内の値のキーを検索します

  19. 19

    ハッシュ配列から特定のキーの値を取得します

  20. 20

    配列の要素をハッシュテーブルに挿入します

  21. 21

    他のハッシュ配列のキー値に基づいて、ハッシュの1つの配列を更新します

  22. 22

    配列のハッシュをハッシュの配列にマージします

  23. 23

    配列のハッシュをハッシュの配列にマージします

  24. 24

    ハッシュをハッシュの配列に変換します

  25. 25

    文字列をキー、整数配列リストを値として、txtドキュメントをハッシュマップに前処理します

  26. 26

    配列の配列を配列値でRubyのハッシュにソートします

  27. 27

    Ruby-それぞれのキーでハッシュの配列の値を追加します

  28. 28

    配列型としてのキーを持つハッシュ

  29. 29

    配列の配列をハッシュの配列に変換します

ホットタグ

アーカイブ