💬

3の倍数と3のつく数字でahoになるために(算数の塾講師向け)

2024/09/18に公開

算数の塾講師をしていると授業のアイスブレイクなどで、「3の倍数と3のつく数字でahoになるタイミング」があるかと思います。
(※冗談です。アイスブレイクでよく使われるフォーマットがある、などという意味ではありません。個人的に勝手に使っているだけです。念の為!)

3の倍数と3のつく数字でアホになるときのチートシート(40まで)

1
2
3:aho!
4
5
6:aho!
7
8
9:aho!
10
11
12:aho!
13:aho!
14
15:aho!
16
17
18:aho!
19
20
21:aho!
22
23:aho!
24:aho!
25
26
27:aho!
28
29
30:aho!
31:aho!
32:aho!
33:aho!
34:aho!
35:aho!
36:aho!
37:aho!
38:aho!
39:aho!
40

実践する場合は40までだと思います。
披露したあと、影で練習している様子を想像しないよう、注意することを忘れないようにしましょう。

3の倍数と3のつく数字でahoになるためのコード

簡単すぎますが、

aho_three.rb
def aho_three(n)
  if n % 3 == 0 || n.to_s.match(/3/)
    "#{n}:aho!"
  else
    n
  end
end
# (1..40).each {|i| puts aho_three(i)}
# =>上のチートシートが作れます。

上のコードの品質保証(テストコード)です。

aho_three.rb
require 'minitest/autorun'
require_relative '../lib/aho_three'

class AhoThreeTest < Minitest::Test
  # A…3の倍数、B…3が含まれる、_A…3の倍数ではない、_B…3が含まれない、∧…かつ
  def test_aho_three
    assert_equal      1, aho_three(1)    # _A ∧ _B
    assert_equal 'aho!', aho_three(6)    #  A ∧ _B
    assert_equal 'aho!', aho_three(13)   # _A ∧  B
    assert_equal 'aho!', aho_three(30)   #  A ∧  B
  end
end

MinitestはRailsのデフォルトのテスティングフレームワークです。
テスティングフレームワークはRailsでRSpecを使っていましたが、簡単なコードのテストならMinitestが便利だなと思いました。

他のメソッド

4月から学習をはじめて少しずつ慣れてきたので、だんだんとメソッドの中身が知りたくなってきましたので、試しに他にもいくつかメソッドを作ってみました。

maxメソッド

def max(ary)
  max = 0
  ary.each.with_index do |num, i|
    if ary[i] > max
      max = ary[i]
    end
  end
  max
end

ary = (1..10).to_a.shuffle
p ary
# =>[8, 3, 1, 2, 9, 7, 5, 4, 10, 6]
# =>10 

引数に配列を渡すと配列内の最大の数を表示する、というシンプルなものですが、答え合わせをしてみると(Rubyの公式リファレンスをみてみると)、引数を指定することで「最大の要素が降順に入った配列を返す」などの機能もあるようでした。

sortメソッド

挿入ソート、選択ソート、バブルソートを作りました。
挿入ソートが一番てこずりました。(2重ループに入る前にコピーを取らないと上書きされてしまうところ)

def insertion_sort(ary)
  len = ary.length

  (1..(len-1)).each do |i|
      tmp = ary[i]
      j = i - 1        
      while j >= 0
          if ary[j] > tmp
              ary[j], ary[j+1] = ary[j+1], ary[j]
          else
              break
          end
          j -= 1
      end
      puts ary.join(" ")
  end      
end

ary = (1..5).to_a.shuffle
p ary
#=>[2, 1, 4, 3, 5]
#=>1 2 4 3 5
#=>1 2 4 3 5
#=>1 2 3 4 5
#=>1 2 3 4 5

メソッドを作る過程でアルゴリズムがわかるととても楽しいです。

正規表現でも遊びたい

少し前からチェリー本を読み進めていて、6章の正規表現が終わって7章のクラスに入ったところです。
正規表現もだいぶわかってきた(気がする?)ので、遊んだ結果をまたどこかで披露したいです。

今回は以上です!

Discussion