エンジニア死滅
文字通りのテストコード
入力値を手元に持ってきたときに、空白を含んでいたのをそのまま実行してしまい、ひとつめ以降のテストが出来なかったのに気付かないまま、ずっと悩んでいたことが今回のハイライト
問題文
この公園ではある競技の大会がよく開催されていました。各試合結果の記録が見つかりましたが、どのチームが優勝したかの記録は欠損しています。
そこで各試合結果から優勝チームを調べるプログラムを作成することにしました。
大会は勝ち点方式の総当り戦で行います。勝つと2点、引き分けで1点、負けると0点勝ち点が増えます。
すべての試合が終わったあと、勝ち点が一番多いチームが優勝です。
大会の参加人数と、試合結果が入力されたときに、何番目のチームが勝ち点いくつの何勝何敗何引き分けで優勝したか出力するプログラムを書いてください。
出力
何番目のチームが優勝したかを表す数字 s、優勝したチームの勝ち点 t、勝った回数 W、引き分けた回数 D、敗けた回数 L をスペース区切りで出力
優勝者は必ず一人
テストコード
require 'spec_helper'
RSpec.describe Desert_park do
describe '何番目のチームが勝ち点いくつの何勝何敗何引き分けで優勝したか' do
it '例一' do
result = Desert_park.new.competition(match_results: 3, the_number_of_participants: '-DLD-DWD-')
expect(result).to eq '3 3 1 1 0'
end
it '例2' do
result = Desert_park.new.competition(
# チーム数
match_results: 10,
# トーナメント表を一つの文字列にしました
the_number_of_participants: '-WLDWWDWWWL-WDWWWLWWWL-LWWLWWDDDW-WWDWWWLLLL-LLLWWLLLLW-WLLLDLWDWL-WLWLWLLWWL-WWLLLLLWWL-WLLDLLWLLL-'
)
expect(result).to eq '4 15 6 3 0'
end
end
end
テスト対象
勝ったチームの番号と、勝ち点を出したい。
さらに悪趣味なことに、勝ち負け引き分けの数も出力しろとのこと。
class Desert_park
def initialize
@max_team_name = 0 #一番多く得点取ったチームの番号
@max_victory_point = 0 #そのとき一番多いポイント
@result = '' #勝敗の文字列を入れておいて後でその数を取り出して出力
end
def competition(match_results:, the_number_of_participants:)
tema_name = 1
team = ''
victory_point = 0
the_number_of_participants.split('').each_with_index do |result, index|
index += 1
if result == "W"
team += result
victory_point += 2
elsif result == "D"
team += result
victory_point += 1
elsif result == "L"
team += result
end
if index % match_results == 0 && index >= match_results
if @max_victory_point < victory_point
@max_team_name = tema_name
@max_victory_point = victory_point
@result = team
team = ''
victory_point = 0
tema_name += 1
else
team = ''
victory_point = 0
tema_name += 1
end
end
end
"#{@max_team_name} #{@max_victory_point} #{@result.count('W')} #{@result.count('D')} #{@result.count('L')}"
end
end
見てくれてありがとう
最近、初音ミクに、どハマりしました。
最後に
変数への説明にコメントつけてしまっていることに気づきました