Skip to content
yowasou edited this page Aug 13, 2023 · 2 revisions

議事録(55)

KPT振り返り

  • なかった。

自己紹介

普段の活動を説明

  • 小木さんが最近の流れを説明
  • 時期によってやってることバラバラ
  • 今はCodeKataKataがメイン
  • LTと告知がある
  • 最後にKPT
  • Slackおじさん(misogiさん)にお願いしてSlackに登録して頂く。

CodeKataKata

  • 共通問題チームと、バラバラ問題チームに分かれた(7:7)

共通問題

  • 6:Aは0でない整数とし、は約数の和を表すものとします。
  • たとえば、<8>=1+2+4+8=15です。
  • 6.1 <16> - <25>を求めなさい。
  • 6.2 =24となるAは全部で3個あります
  • 7. 7けたの整数2004□□□は2,3,4,5,6,7,8すべての倍数です。 □□□に入る3けたの整数を求めなさい。
  • 終わった人はこの続きをやる。

6の回答

def sum_div(num)
  sum = 0
  (1..num).each do |i|
    sum += i if num % i == 0
  end
  sum
end
s = sum_div(16) - sum_div(25)
p s
(1..30).each do |b|
  p b if sum_div(b) == 24
end
# 問題 6. A は 0 でない整数とし、<A> は A の約数の和を表すものとします。
# たとえば、<8> = 1 + 2 + 4 + 8 = 15 です。

# 約数のリストを求める
def divisors(n)
  # 1、n は必ず含まれる
  # n/2 < d < n である d で n を割ると必ず 1 より大きく 2 未満になる
  # ので、d は約数ではない
  [1] + (2..(n / 2)).select { |d| n % d == 0 } + [n]
end

# 約数の和を求める
def sum_of_divisors(n)
  divisors(n).reduce(0, &:+)
end

# 6.1 解答
answer1 = sum_of_divisors(16) - sum_of_divisors(25)
# 6.2 解答
answer2 = (12..24).select { |n| sum_of_divisors(n) == 24 }

# 出力
puts("6.1 <16> - <25> = #{answer1}")
puts("6.2 <A> = 24 となる A は #{answer2}")
class Math6
  def initialize(a)
    @a = a
  end
  def isDivisor(x)
    return FALSE if (@a.modulo(x) != 0)
    return TRUE
  end
  def calc
    result = 0
    @a.times { |n|
      x = n + 1
      if (isDivisor(x))
        result += x
      end
    }
    return result
  end
end
def q1(x, y)
  obj1 = Math6.new(x)
  obj2 = Math6.new(y)
  return obj1.calc - obj2.calc
end
def q2(x, y)
  result = Array.new
  num = 1
  cnt = 0
  printf("Q2.\n")
  while (cnt != y) do
    obj = Math6.new(num)
    if (obj.calc == x)
      printf("\t%d\n", num)
      cnt += 1
    end
    num += 1
  end
end
printf("Q1. <%d> - <%d> = %d\n", 16, 25, q1(16, 25))
q2(24, 3)
input_value = gets
num = input_value.to_i
result = 0;
i = 1
while num >= i do
	if num % i == 0
		result = result + i
	end
	i = i + 1
end
puts result
def yakusu(n)
  n = n.to_i
  st = 1
  g = 0
  lst = []
  loop  {
    if (n % st == 0) then
      lst.push(st)
      g = g + st
    end
    st = st + 1
    if (st > n) then
      break
    end
  }
  return g
end
def sameyakusu(n)
  n = n.to_i
  ret = ""
  i = 1
  d = 0
  loop  {
    if (yakusu(i) == 24) then
      ret = ret + i.to_s + ","
      d = d + 1
    end
    i = i + 1
    if (d > 2) then
      break
    end
  }
  return ret
end
puts yakusu(ARGV[0])
puts yakusu(16) - yakusu(25) #0
puts sameyakusu(24) #14,15,23
## ベタベタですが小学生問題 6
def getDivisorsAry( x )
  # ary = Array.new()
  ary = []
  (1..x).each { |i|
    
    if ( x % i == 0 ) then
      ary << i 
    end
  }
  ary
end
## ex6_1
sumFactors16 = getDivisorsAry(16).inject(0, :+ )
sumFactors25 = getDivisorsAry(25).inject(0, :+ )
ex6_1 = sumFactors16-sumFactors25
puts "Ex6-1 :  #{ex6_1}"
## ex6_2
def ex2( arg )
  ary = []
  (1..arg).each{ | i | 
    ary << i if ( getDivisorsAry( i ).inject(0, :+ ) == arg )
  }
  ary
end
ex6_2 = ex2(24)
puts "Ex6-2 :  #{ex6_2}"
puts "6.1:"
def divisor?(x, y)
  x % y == 0
end
def sum_of_divisors(x)
  (1..x).select { |i| divisor?(x, i) }.reduce(0, :+)
end
puts sum_of_divisors(16) - sum_of_divisors(25)
puts
puts "6.2:"
c = 0
i = 1
while(c < 3)
  if sum_of_divisors(i) == 24
    puts i
    c = c + 1
  end
  i = i + 1
end
# 6. A は0でない整数とし、<A>はAの約数の和を表すものとします。 たとえば、<8>=1+2+4+8=15 です。
# 6.1 <16>-<25>を求めなさい。
# 6.2 <A>=24 となるA は全部で 3個あります。すべて答えなさい。
# 方針:やるだけ
# 約数の和を求める
def sumOfDivisor(n)
  sum = 0
  for i in 1..Math.sqrt(n)
    if n % i == 0
      sum += i
      if i != Math.sqrt(n)
        sum += n / i
      end
    end
  end
  return sum
end
# 6.1の答え
p "6.1の答え"
puts sumOfDivisor(16) - sumOfDivisor(25)
# 6.2の答え
p "6.2の答え"
loopCount = 1
ansCount = 0
while ansCount < 3
  if sumOfDivisor(loopCount) == 24
    p loopCount
    ansCount += 1
  end
  loopCount += 1
end
# 7. 7けたの整数2004□□□は2,3,4,5,6,7,8すべての倍数です。 □□□に入る3けたの整数を求めなさい。
# 方針:2~8の最小公倍数を求めてあげて、それで割り切れたやつが当たり。
require 'rational'
lcm = (2..8).inject(1){|num, i| i.lcm(num)}
ans = (2004999 - 2004999 % lcm).to_s
puts ans[4..7]

7の回答

a = 5 * 6 * 7 * 8
(1..2000).each do |i|
  b = a * i
  if 2004000 <= b && 2005000 > b
    p b
  end
end
#途中であきらめました
def getbaisu(n,na)
  head = n.gsub("x","0").to_i
  st = 0
  ed = fact(n.count("x"))   #10のx乗を求めたい
  return 0
end
def fact(n)
  return 1 if n == 0
  n * fact(n - 1)
end
puts getbaisu("2004xxx",[2,3,4,5,6,7,8])
# 7 けたの整数 2004XXX は 2, 3, 4, 5, 6, 7, 8 すべての倍数です。
# XXX に入る 3 けたの整数を求めなさい。
# 2 で割り切れるので 2004XXX は偶数
# 約数について
# * 8 で割り切れる => 4, 2 でも割り切れる
# * 6 で割り切れる => 3 でも割り切れる
# ので、[5, 6, 7, 8] で割り切れるものを選べばよい
nums = (0..999).select { |n| n % 2 == 0 }
answers = nums.select do |n|
  p m = 2004000 + n
  [5, 6, 7, 8].all? { |d| m % d == 0 }
end
puts("2004XXX が 2, 3, 4, 5, 6, 7, 8 で割り切れる XXX:")
puts(answers)
  • 数学の問題6と7。
  • reduce・・・和を求める
  • select・・・配列から一致しているものだけを抽出
  • Cっぽいコードする人とRubyっぽくコードする人で別れる
  • 起動に手間取った。javaっぽいセミコロンも入っちゃったぜ

バラバラ問題

  • SlackのAPI試した
#!/usr/bin/env ruby
require "slack"
def change(n) 
    ans = []
    [10000, 5000, 1000, 100, 10, 5, 1].each do |unit|
        x = n / unit
        n = n % unit
        ans << [unit, x]
    end
    ans
end
Slack.configure do |config|
  config.token = 'xxxxxxxxxxxx'
end
client = Slack::RealTime::Client.new
client.on :hello do
  puts 'Successfully connected.'
end
client.on :message do |data|
    if data =~ /[0-9]+/
        a = change(data.to_i)
    end
    client.message channel: data['debug'], text: "#{a}"
end
#Slack.chat_postMessage(text: '5150!', channel: '#debug')
  • 正規表現苦手なお前らへ
  • 両替
def change(n) 
    ans = []
    [10000, 5000, 1000, 100, 10, 5, 1].each do |unit|
        x = n / unit
        n = n % unit
        ans << [unit, x]
    end
    ans
end
loop do 
    s = gets.chomp
    break if s =~ /^e/
    a = change(s.to_i)
    a.each do |x|
        puts("#{x[0]}*#{x[1]}")
    end
end
  • Rails 1.2→3.2へ上げる内職。茨の道!!Railsは最新へマメに上げておくべき。
  • Ruby開発環境作ってた。UbuntuをWindows10にしてしまって…Docker Toolboxで作ってみた。すでにマシンイメージが用意されているので楽。バージョン指定もできる。 https://gist.github.com/euledge/
  • Rubyの本を買ってきて勉強。もともと他の言語をやっていたので楽しい感じで進めれた。
htmlfile = "test.html"
textfile = "test.txt"
html = File.read(htmlfile)
File.open(textfile , "w") do |f|
	headinfo = true
	html.each_line do |line|
		if headinfo && /<title>/ !~ line
			puts(line)
			next
		else
			puts("false")
			headinfo = false
		end
		break
		if /<\/title>/ =~ line
		f.write line
	end
end

見学者

  • 顔を見てるだけで面白かった。
  • 次回はぜひタブレットを(※記号が打ちにくい

LT

  • まさかの3本立て

石垣さん:Ruby会議のRubyソフトウェアシンセの続き

  • 当社比2倍の改善
  • 完成度高まってきてる!
  • だんだんシンセのノウハウがたまってきた
  • 良かったらコード読んで突っ込みください

Langurさん:Rubyでエミュレータを作ってみた

  • CPUでほかのCPUをつくる
  • TD4という簡単なCPU
  • "CPUの創り方"の本に載っている。
  • コードをRubyで書いてみました。
  • 命令4ビットデータ4ビット。

立花さん:Rails5の変更点

  • 英語ブログを翻訳して抜き出してみました
  • 目玉
  • rails-apiというgemが公式に入る。
  • websocketを使うactioncabbleが登場
  • turbolinks3.0
  • だけでなく部分的な書き換えができるように
  • 細かいの(資料参照)
  • 小木さんが3時間はまってたネタが直る
  • 誠に遺憾ながら時間が!・・・
  • まとめ
  • 4.1よりはおとなしい
  • 昔に比べて変更がわかりやすくなった。

告知

小木さん:JAWS-UGのイベント

  • re:Mote 9/5 13~18
  • 名古屋か磐田で(わーくぴあ磐田)車じゃないと行きづらい
  • 近場の人は参加してね

KPT

Keep

  • 参加者が多かった
  • CodeKata2の課題が自由と共通の選択肢があったので、自分のような初心者でも楽しめた
  • Code Kata^2 のお題に真剣に取り組めた
  • 出席できた
  • みんなコード書くことができた
  • 電源タップ持って来てくれた人
  • 机を近づけてよかった、LTおもしろかった
  • slackお兄さんinviteありがとうございます
  • 人数多くて良かった。発表の内容も濃くて良かった
  • 机で近くした
  • slackおじさん
  • 新しい方や久しぶりの方やいつもの方がいて良かった
  • mackatoさんが来た
  • 発表がバラエティに富んでいた
  • 人が多かった
  • 集中できた
  • 人がたくさん
  • 机の並び
  • LTした
  • LT

Problem

  • 紙と鉛筆を忘れた
  • 時間管理
  • 参加者やLTが多かったのでしょうがないかもですが、時間の使い方がもったいなかったかと
  • 名札のルールがよく分からなかった
  • 遅刻した
  • そもそも何時間もかけて作ってくれた資料やコードをたった5分ぽっちで説明せよというのがおかしいのだ!
  • ネットワークが無い人
  • やっぱり同じ課題を共有するほうが会話が盛り上がったかなー、 と @個別課題チーム
  • 会話もっと盛り上げたかったけどできなかった >独自お題チーム
  • 立花さんの資料もったいない
  • 時間が短い
  • 新しい方が多いのに名札とステッカー忘れた……
  • コード読解力が追いついていない
  • ノート忘れた...orz
  • 時間ない、名札がなかった
  • 時間ギリギリ><

Try

  • ネット環境
  • CodeKata2とLTは参加者、発表者の数やボリュームに応じてあらかじめスケジュールを調整できるといいかなぁ
  • 名札を作って持って行こう
  • 遅刻しないで出席する
  • AWSカルタというものが以前あって、AWSのサービスをゲーム感覚で覚えられるという。完全にオフラインでできるので結構重宝してました(今はAWS麻雀というものが出てきてます) そういうののRuby版ないかなと。 @jacoyutorius
  • 毎回2~3発表あると内容が濃く感じられる気がします。 資料作らなくてはいけない理由はないので、例えば自分のblogとかQiitaとかに投稿した記事を紹介するでも良いと思うのですよ @jacoyutorius
  • 今回くらい発表が盛りだくさんだったら、code kata はオマケでいいかも。
  • LTは一般的には5分なので司会もそれでスケジューリングしてしまう。それ以上かかる発表をしたい場合はあらかじめ申告する。
  • 時間の段取り
  • 環境ない人でも楽しめるなにか
  • 名札予備持ってくる
  • 問題減らしてレビュー時間ふやしたい
  • LT&告知のほうが話が飛躍して盛り上がりがちな気がするので、会の冒頭にやってみる?
  • LTしてくれたお三方の発表は次回もっとゆっくり聞きたい
  • 早めに次回の予約するの忘れてた。次回予約は会の終わりではなく、途中でするようにする
  • 週末にやってみる
  • 全員が時間を意識する
  • LTする
  • 自力でコードを書く
  • LT続編
Clone this wiki locally