2014-10-27 3 views
0

В настоящее время я работаю через Ruby Koans, и я застрял в проекте оценки. Прежде всего, я с трудом оцениваю инструкции и формулирую их с точки зрения того, что я должен делать. Во-вторых, я не уверен, что я нахожусь на правильном пути с помощью метода, который я написал ниже. Мои вопросы: есть ли способ лучше понять эти инструкции? Кроме того, с помощью метода оценки, который я написал, я все еще не проходил первый тест. Думаю, я должен понять, что мне нужно сделать сначала, но я не могу понять это. Любая помощь и простые объяснения или направление приветствуются.Koans score_project и понимание необходимого метода

спасибо.

Жадность - игра в кости, в которой вы свертываете до пяти кубиков, чтобы накапливать баллов. Для вычисления оценки одного броска кубиков будет использована следующая «оценка».

жадность валок баллы следующим образом:

Набор из трех из них составляет 1000 точек

Набора из трех чисел (кроме них) стоит в 100 раз номера. (например, три пятых - 500 баллов).

Один (который не входит в комплект из трех) стоит 100 баллов.

Пять (то есть не входит в набор из трех) стоит 50 баллов.

Все остальное стоит 0 очков.

Примеры:

score([1,1,1,5,1]) => 1150 points 
score([2,3,4,6,2]) => 0 points 
score([3,4,5,3,3]) => 350 points 
score([1,5,1,2,4]) => 250 points 

Более примеры скоринг приведены в тестах ниже:

Ваша цель состоит в том, чтобы написать метод Score.

def score(dice) 

(1..6).each do |num| 
amount = dice.count(num) 

if amount >= 3 
    100 * num 
elsif num == 1 
    100 * amount 
elsif num == 5 
    50 * amount 
else 
    0 
    end 
    end 
end 

# test code for method 

class AboutScoringProject < Neo::Koan 
    def test_score_of_an_empty_list_is_zero 
    assert_equal 0, score([]) 
end 

def test_score_of_a_single_roll_of_5_is_50 
    assert_equal 50, score([5]) 
end 

def test_score_of_a_single_roll_of_1_is_100 
    assert_equal 100, score([1]) 
end 

def test_score_of_multiple_1s_and_5s_is_the_sum_of_individual_scores 
    assert_equal 300, score([1,5,5,1]) 
end 

def test_score_of_single_2s_3s_4s_and_6s_are_zero 
    assert_equal 0, score([2,3,4,6]) 
end 

def test_score_of_a_triple_1_is_1000 
    assert_equal 1000, score([1,1,1]) 
end 

def test_score_of_other_triples_is_100x 
    assert_equal 200, score([2,2,2]) 
    assert_equal 300, score([3,3,3]) 
    assert_equal 400, score([4,4,4]) 
    assert_equal 500, score([5,5,5]) 
    assert_equal 600, score([6,6,6]) 
end 

def test_score_of_mixed_is_sum 
    assert_equal 250, score([2,5,2,2,3]) 
    assert_equal 550, score([5,5,5,5]) 
    assert_equal 1100, score([1,1,1,1]) 
    assert_equal 1200, score([1,1,1,1,1]) 
    assert_equal 1150, score([1,1,1,5,1]) 
end 

end 
+2

Вы почти получили, вы только пропустить две вещи. Как вы накапливаете результаты внутри корпуса коммутатора? Вам нужно будет сохранить дополнение с каждой итерации. И если сумма равна или больше 3, а число равно 1, вам нужно сделать что-то еще. Удачи! – gmaliar

+0

спасибо gmaliar !! – user3604867

ответ

0

Это то, что я сделал:

def score(dice) 
    score = 0 
    return score if dice == nil || dice == [] 
    quantity = dice.inject(Hash.new(0)) {|result,element| result[element] +=1; result} 
    score += quantity[1] >= 3 ? 1000 + ((quantity[1] - 3) * 100) : quantity[1] * 100 
    score += quantity[5] >= 3 ? 500 + ((quantity[5] - 3) * 50) : quantity[5] * 50 
    [2,3,4,6].each {|x| score += x * 100 if quantity[x] >= 3 } 
    score 
end