Hamamatsu.rb #54

作成日:2015/07/09
最終更新日:2020/07/09

Hamamatsu.rb #54

作成日:2015/07/09
最終更新日:2020/07/09

概要

やったこと

  • 自己紹介
  • CodeKataKata
    • 小学生がひらめきで解く算数の問題を大人げなくコンピュータで解く!
  • LT
    • @jacoyutoriusさんによる Rebuild DB のLT
    • rebuild.fmをスクレイピングするツールを作った
  • KPT

CodeKataKata

算数オリンピックの問題らしいです。 時間内に全5問中3問までは解けました。

問題は以下のとおりです。

  1. 連続する4個の整数を掛け合わせると積が9□□□4になりました。(それぞれの□に入る数字はわかりません) この連続する4個の整数のうち、最大の数はいくつですか?
  2. 1段目は1×1個、2段目は2×2個のレンガを使い、200段のピラミッドを作るとき、 使われているレンガの数は全部で何個?
  3. 1×2×3×4×5×・・・ と順に1ずつ大きな整数をかけていきます。 この積について、次の問に答えなさい。
    • 積を2で7回割った商が初めて整数になるのは、いくつまでかけたときですか。
    • 積を6で14回割った商が初めて整数になるのは、いくつまでかけたときですか。
  4. 1,2,3,4 のいずれかの数字を使って4ケタの整数を作ります。 同じ数字を何度使ってもかまいません。次の問に答えなさい。
    • 整数は全部で何個できますか。
    • できたすべての整数の一の位の数の和を求めなさい。
    • できたすべての整数の和を求めなさい。
  5. ある直方体の高さはたてより1cm長く、横より1cm短いです。 その体積は3□□□□□26c㎡です。(5個の□の数はわかりません) この直方体の高さは何cmですか。

1問目

ソース1. 1問目の回答
class Math1
  def initialize(m, n)
    @man  = m
    @ichi = n
  end
    
  def calc(num)
    result = 1
    4.times { |i|
      result = result * (num + i)
    }
    return result
  end
    
  def judge(num)
    result = self.calc(num)
    man = result.to_i / 10000
    ichi = result.to_i % 10
    if (man == @man && ichi == @ichi)
      ret = TRUE
    else
      ret = FALSE
    end
  end

  def test(n)
      n.times { |i|
        if (self.judge(i + 1))
          return (i + 4)
        end
      }
      return -1
    end
end
  
ret = Math1.new(9, 4).test(20)
p ret if (ret > 0)

2問目

ソース2. 2問目の回答
class Math2
  def initialize(num)
    @max = num
  end

  def calc
    result = 0
    @max.times { |i|
      result = result + ((i + 1) * (i + 1))
    }
    return result
  end
end

p Math2.new(200).calc

3問目

ソース3. 3問目の回答
class Math3
  def initialize(m, n)
    @ans = m ** n
  end

  def fact(n)
    return 1 if (n == 0)
    n * fact(n - 1)
  end
  
  def calc
    i = 1
    loop {
      result = self.fact(i) % @ans
      if (result == 0)
        return i
      end
      i = i + 1
    }
  end
end

p Math3.new(2, 7).calc
p Math3.new(6, 14).calc

KPT

hmrb54 KPT

感想

今回は、皆さんもくもくとコードを書いているように感じました。 算数ネタは頭の体操になります。

ソースコードをレビューするための簡単なコード共有ツールがあると良いのかなぁと思いました。 Railsで作れるのかなぁ?