LoginSignup
1
1

More than 5 years have passed since last update.

第21回オフラインリアルタイムどう書く

Last updated at Posted at 2014-05-09

@Nabetani さんに誘われて参加してみました。

問題はこちら
http://d.hatena.ne.jp/torazuka/20140509/yhpg

ちなみに進捗ダメです。

lesson.rb
class Lesson
  class << self
    def create(data)
      application_list = data.split("|")
      lessons = {}
      # データを作る
      application_list.each do |a|
        split_data = a.split("_")
        employee = split_data.first
        days = split_data.last
        days.chars.each do |d|
          lessons[d] = [] unless lessons[d]
          if lessons[d].size < 4
            lessons[d].push(employee)
            break
          end
        end
      end
      # 出力用を組み立てる
      result = ""
      lessons.sort.each do |day, emps|
        result += "#{day}_"
        emps.sort_by{|e| e.to_i }.each do |e|
          result += "#{e}:"
        end
        result.chop!
        result += "|"
      end
      result.chop!
      result
    end

  end
end

lesson_spec.rb
require "spec_helper"
require "lesson"

describe Lesson do
  describe ".create" do
    let(:result){ Lesson.create(data) }
    context "one data" do
      let(:data){ "1_12345" }
      it "returns hoped data" do
        result.should eq "1_1"
      end
    end
    context "one data and other number" do
      let(:data){ "30_32451" }
      it "returns hoped data" do
        result.should eq "3_30"
      end
    end
    context "two data for same lesson" do
      let(:data){ "1_12345|2_12345" }
      it "create one lesson in two person." do
        result.should eq "1_1:2"
      end
    end
    context "three employee for one lesson" do
      let(:data){ "3_12345|2_12345|1_12345" }
      it "create one lesson in three person" do
        result.should eq "1_1:2:3"
      end
    end
    context "three persons for three lesson" do
      let(:data){ "1_23415|2_12435|3_42135" }
      it "create three lesson" do
        result.should eq "1_2|2_1|4_3"
      end
    end
    context "#5" do
      let(:data){ "1_23415|2_12435|3_42135|4_31245|5_53124" }
      it "create three lesson" do
        result.should eq "1_2|2_1|3_4|4_3|5_5"
      end
    end
    [
      # 6
      ["40_12345|21_12345|3_12345|61_12345|10_12345", "1_3:21:40:61|2_10"],
      # 7
      ["1_23415|2_12435|3_42135|4_54321|5_12345|6_13524|7_42351|8_31254|9_24513|10_12345", "1_2:5:6:10|2_1:9|3_8|4_3:7|5_4"],
      # 8
      ["1_54321|2_54321|3_54321|4_54321|5_54321|6_54321|7_54321|8_54321|9_54321|10_54321|11_54321|12_54321|13_54321|14_54321|15_54321|16_54321|17_54321|18_54321|19_54321|20_54321|21_54321", "1_17:18:19:20|2_13:14:15:16|3_9:10:11:12|4_5:6:7:8|5_1:2:3:4"],
      # 9
      ["1_34152|2_23514|3_41325|4_15342|5_45312|6_35124|7_21453|8_52431|9_13245|10_54123|11_13245", "1_4:9:11|2_2:7|3_1:6|4_3:5|5_8:10"],
      # 10
      ["92_41532|58_14325|40_25413|5_45132|71_35124|23_13452|60_35241|77_31542|53_13542|72_12354", "1_23:53:58:72|2_40|3_60:71:77|4_5:92"],
      # 11
      ["55_24153|91_24531|9_12543|41_34215|72_15423|44_42531|6_42351|79_15243|21_35412|31_52413|74_24135|83_31254|33_35421|84_53421|89_53241|16_32415|36_15234|92_34521|62_12345|14_23415|40_23415|88_43251|52_45213|77_32154|59_53241", "1_9:36:72:79|2_14:55:74:91|3_21:33:41:83|4_6:44:52:88|5_31:59:84:89"],
    ].each do |input, output|
      it "should match" do
        Lesson.create(input).should eq output
      end
    end
  end
end

悠長にテスト書いてたら途中から時間が足りなくなったし#6からの書き方にしたほうが速いことに気づくのが遅すぎましたね〜。しかも #11 のテストが通らないので進捗ダメですorz

きちんとした解答は

@Nabetaniさんのを参考に

感想

面白かったです。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1