議事録(54) - hamamatsu-rb/hamamatsu-rb.github.com GitHub Wiki
議事録(54)
KPT振り返り
自己紹介
- 新人:はたさん
- @Langurさんの紹介。ルーターの開発をやっている
- Kuroyanagiさんが久しぶりに出席。最近はPHPやってる
- @chuiさんがポジションペーパーを初めて作成
- あとはいつも通り
CodeKataKata
- お題『小学生がひらめきで解く算数の問題を大人げなくコンピュータで解く!』
- 5問目まで行った人もいるよ
- みんなのコードは以下
1 . 連続する4個の整数を掛け合わせると積が9□□□4になりました。(それぞれの□に入る数字はわかりません) この連続する4個の整数のうち、最大の数はいくつですか?
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)
require 'minitest/autorun'
# 連続する4個の整数を掛け合わせると積が9□□□4になりました。
# (それぞれの□に入る数字はわかりません)
# この連続する4個の整数のうち、最大の数はいくつですか?出典
# ※どっかまちがってます
def kansu n
n * (n - 1) * (n - 2) * (n - 3)
end
def answer
(1..10).each do |n|
ret = kansu(n).to_s
if ret[0] == "9" && ret[ret.length - 1] == "4"
p ret
return n
end
end
end
describe "answer spec" do
it "" do
answer = 19
(answer * (answer - 1) * (answer - 2) * (answer - 3)).to_s.must_equal "93024"
end
end
- minitestおすすめ
n = 1
regexp = /^9...4$/
loop do
range = n...n+4
prod = range.reduce(&:*)
if regexp =~ prod.to_s
puts "#{range.to_a.join('*')} = #{prod}"
break
end
n += 1
end
- reduceしらん人多数
a = 1
ans = 0
times = 0
while times <= 99994
times = a*(a+1)*(a+2)*(a+3)
if times.to_s =~ /^9\d{3}4$/
ans = a + 3
end
a += 1
end
puts ans
#連続する4個の整数を掛け合わせると積が9□□□4になりました。(それぞれの□に入る数字はわかりません)
#この連続する4個の整数のうち、最大の数はいくつですか?
def renzoku
m = [1,2,3,4]
loop{
v = m[0] * m[1] * m[2] * m[3]
s = v.to_s
if ((s.length > 4) and (s[0] == '9') and (s[4] == '4'))
then
return m[3]
end
m[0] = m[0] + 1
m[1] = m[1] + 1
m[2] = m[2] + 1
m[3] = m[3] + 1
}
end
print renzoku()
## 小学生問題 1
(1..100).each { |x|
y = (x)*(x+1)*(x+2)*(x+3)
if ( (y/10000).to_i == 9 && (y%10) == 4) then
printf("Found!: %d == %d x %d x %d x %d .", y,x,x+1,x+2,x+3 )
end
}
def nth(m,n)
(m/10**(n-1))%10
end
(0..99999).each do |i|
m = (i)*(i+1)*(i+2)*(i+3)
if nth(m,5) == 9 && nth(m,1) == 4
puts "ans: " + (i+3).to_s
puts "num: " + m.to_s
break
end
end
2 . 1段目は1×1個、2段目は2×2個のレンガを使い、200段のピラミッドを作るとき、 使われているレンガの数は全部で何個?
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
require 'active_support/all'
puts (1..200).sum { |n| n * n }
ret = 0
(1..200).each do |i|
ret += i * i
end
#1段目は1×1個、2段目は2×2個のレンガを使い、
#200段のピラミッドを作るとき、使われているレンガの数は全部で何個?
def pla(kai)
v = 0
(1..kai).each{|i|
v = v + i * i
}
return v
end
print pla(200)
p (1..200).inject(0) {|t, i| t + i*i }
p (1..200)
p (1..200).map { |i| i * i }
p (1..200).map { |i| i * i }.reduce(:+)
# 問題
# 1段目は1×1個、2段目は2×2個のレンガを使い、200段のピラミッドを作るとき、
# 使われているレンガの数は全部で何個?
p (200*(200+1)*(2*200+1))/6
-
漸化式を使った解法
-
証明しつつ問題2を解き直してみました。
-
数学、使わないと忘れますね...
3 . 1×2×3×4×5×・・・ と順に1ずつ大きな整数をかけていきます。 この積について、次の問に答えなさい。出典 3 .1 積を2で7回割った商が初めて整数になるのは、いくつまでかけたときですか。 3 .2 積を6で14回割った商が初めて整数になるのは、いくつまでかけたときですか。
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
def fact
n = 1
prod = 1
loop do
yield n, prod
n += 1
prod *= n
end
end
factor = enum_for(:fact)
p factor.find { |_, prod| (prod % 2 ** 7) == 0 }
p factor.find { |_, prod| (prod % 6 ** 14) == 0 }
fact = -> n { (1..n).reduce(:*) }
(1..999).each do |i|
n = fact[i]
if n % (2 ** 7) == 0
puts "3.1 ans: " + i.to_s
puts "3.1 num: " + n.to_s
break
end
end
(1..999).each do |i|
n = fact[i]
if n % (6 ** 14) == 0
puts "3.2 ans: " + i.to_s
puts "3.2 num: " + n.to_s
break
end
end
4 .1,2,3,4 のいずれかの数字を使って4ケタの整数を作ります。 同じ数字を何度使ってもかまいません。次の問に答えなさい。出典 4 .1 整数は全部で何個できますか。 4 .2 できたすべての整数の一の位の数の和を求めなさい。 4 .3 できたすべての整数の和を求めなさい。
5 .ある直方体の高さはたてより1cm長く、横より1cm短いです。 その体積は3□□□□□26c㎡です。(5個の□の数はわかりません) この直方体の高さは何cmですか。
LT
- @jacoyutoriusさんの子LT。Rebuild.fmを検索するものを作ってHerokuへ上げた話
- スライド
- http://www.slideshare.net/YutoOgi/rebuild-db
- Github
- https://github.com/jacoyutorius/rebuild_database
KPT
https://hmrb.doorkeeper.jp/events/26815
Keep
- 再帰久しぶりに書いた
- 発表やった!
- 次回会場予約を帰り時ではなく、途中でやった。
- 終了前に次回場所予約
- ついにねんがんのテザリング機能をてにいれたぞ!
- いろんなひとのコードがみれて勉強になった。またやりたい。
- お題良かった!
- ちゃんと答えをSlackに貼った
- 敢えて突っ込みどころの多いコードを晒す勇気
- 机の広さ
- 久しぶりの参加でも、すぐに馴染む
- ネタが適度なレベルだった
- ネタが良かった
- まず環境を整えます。あと基本構文憶えてきます。
- Hamamatsu.rbに参加すること。
- お菓子持ってきた
Problem
- 正規表現勉強しよう...
- Cygwin+Ruby環境、久々に触ると動かなかった。
- 正規表現ザコ勢
- ちょっと寒い
- Yutoさんに仕切り役とかお任せが多くてごめんなさい
- レーザーポインターがあるといいかも。 どこの説明しているかわかりやすくなるので。
- ネタをやりきれなかった...
- エアコン効き過ぎ
- ちょっとコード突っ込みどころ多かった、
- マシン重い(物理的にも)
- 漸化式思い出せねぇぇぇ....
Try
- コードの解説をするときはマウスカーソルの位置に気をつけよう
- 2〜3または、4〜5人のチームに分けてみる?
- minitestいいね!
- kata2の適切なネタを補充
- rubyの基本を最低限勉強する
- コード共有ツールを作る?
- slackを使っていない人でもコード共有できるツールはないものか
- また参加する
- Ruby環境用意 手順の説明?
- Ruby環境作成チャート作る
- みんなでやるお題
- もっと周りと話して解いても良かったか?
- LTする
- お菓子持ってくる
雑談
- 新人にSlackとKPTについて説明
- 9月にAWSの勉強会(リモートで各支部繋げて作業?)があるらしい。パブリックビューイング的な?・・・
- cloud 9 はいきなりrailsのアプリケーションができてしまうので今回の目的では微妙だった。
- Ruby環境作成チュートリアル整えなければ。
- 浜松自作OS友の会やるよー(8月)