require"minitest/autorun"classScrabbleLetterSCORES={'a'=>1,'b'=>3,'c'=>3,'d'=>2,'e'=>1,'f'=>4,'g'=>2,'h'=>4,'i'=>1,'j'=>8,'k'=>5,'l'=>1,'m'=>3,'n'=>1,'o'=>1,'p'=>3,'q'=>10,'r'=>1,'s'=>1,'t'=>1,'u'=>1,'v'=>4,'w'=>4,'x'=>8,'y'=>4,'z'=>10}.freeze# Parses a string of scrabble letters and separates# them with their multiplier still intact.## @example## ScrabbleLetter.parse("h^i**")# # => [#<ScrabbleLetter @letter="h^">, #<ScrabbleLetter @letter="i**">]#defself.parsestringstring.chars.each_with_object([])do|char,letters|SCORES[char]?letters<<char:letters[-1]<<charend.map{|letter|newletter}enddefinitializeletter@letter=letterenddefscoreletter_score*multiplierendprivatedefletter_scoreSCORES[@letter.chr]enddefmultiplierreturn0if@letter.end_with?('^')return3if@letter.end_with?('**')return2if@letter.end_with?('*')return1endendclassScrabbleWordDOUBLE_WORD_TOKEN='(d)'.freezeTRIPLE_WORD_TOKEN='(t)'.freezedefinitializeword@word=wordenddefscoreletters_score*multiplier+length_bonusendprivatedefletters_scoreletters.map(&:score).reduce(:+)enddefmultiplierreturn2if@word.end_with?(DOUBLE_WORD_TOKEN)return3if@word.end_with?(TRIPLE_WORD_TOKEN)return1enddeflength_bonusletters.count==7?50:0enddeflettersScrabbleLetter.parseword_without_multiplierenddefword_without_multiplier@word.gsub(DOUBLE_WORD_TOKEN,"").gsub(TRIPLE_WORD_TOKEN,"")endendclassScrabbleWordTest<MiniTest::Testdeftest_simple_wordassert_equal23,ScrabbleWord.new("quintessential").scoreenddeftest_double_and_triple_lettersassert_equal11,ScrabbleWord.new("he*llo**").scoreenddeftest_triple_wordassert_equal69,ScrabbleWord.new("quintessential(t)").scoreenddeftest_blank_tile_with_triple_wordassert_equal39,ScrabbleWord.new("q^uintessential(t)").scoreenddeftest_double_and_triple_letters_with_double_wordassert_equal22,ScrabbleWord.new("he*llo**(d)").scoreenddeftest_blank_tile_with_double_letter_and_double_wordassert_equal18,ScrabbleWord.new("he^llo**(d)").scoreenddeftest_seven_letter_word_bonusassert_equal72,ScrabbleWord.new("wordier(d)").scoreendend
I borrowed your tests, @yzhernand
. Thank you for writing them, so I didn't have to.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Ruby solution
I borrowed your tests, @yzhernand . Thank you for writing them, so I didn't have to.