Paiza エンジニアが死滅した世界 B問題「砂漠の公園」テストコード


エンジニア死滅

文字通りのテストコード
入力値を手元に持ってきたときに、空白を含んでいたのをそのまま実行してしまい、ひとつめ以降のテストが出来なかったのに気付かないまま、ずっと悩んでいたことが今回のハイライト

問題文

この公園ではある競技の大会がよく開催されていました。各試合結果の記録が見つかりましたが、どのチームが優勝したかの記録は欠損しています。
そこで各試合結果から優勝チームを調べるプログラムを作成することにしました。
大会は勝ち点方式の総当り戦で行います。勝つと2点、引き分けで1点、負けると0点勝ち点が増えます。
すべての試合が終わったあと、勝ち点が一番多いチームが優勝です。
大会の参加人数と、試合結果が入力されたときに、何番目のチームが勝ち点いくつの何勝何敗何引き分けで優勝したか出力するプログラムを書いてください。

出力

何番目のチームが優勝したかを表す数字 s、優勝したチームの勝ち点 t、勝った回数 W、引き分けた回数 D、敗けた回数 L をスペース区切りで出力

優勝者は必ず一人

テストコード

砂漠の公園_spec.rb
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

テスト対象

勝ったチームの番号と、勝ち点を出したい。
さらに悪趣味なことに、勝ち負け引き分けの数も出力しろとのこと。

砂漠の公園.rb
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

見てくれてありがとう
最近、初音ミクに、どハマりしました。

最後に

変数への説明にコメントつけてしまっていることに気づきました