3の倍数と3のつく数字でahoになるために(算数の塾講師向け)
算数の塾講師をしていると授業のアイスブレイクなどで、「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になるためのコード
簡単すぎますが、
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)}
# =>上のチートシートが作れます。
上のコードの品質保証(テストコード)です。
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