こんばんわ。代表の前田です。

今日は休日を利用して交流のあるエンジニアさん達を交えて勉強会を行いました。

勉強会のテーマはズバリ「Ruby」です。といっても宝石のルビーじゃないですよ。プログラミング言語の「Ruby」です。

Ruby勉強会風景

Ruby勉強会風景

まずは基本構文の確認から、最新バージョン 2.1 の新しい構文をチェック。

次に、配列やハッシュなどコレクション操作が必須知識ということで基本ライブラリをざっとひと巡り。

ある程度基本的なことがわかったら早速なにか作ってみよう! というわけで有名な FizzBuzz 問題にチャレンジしました。

ぼくの書いた Ruby プログラムはこんな感じでした。

#!/usr/bin/ruby -Ku

(1..100).each { |i|
  printf "%d %s%s\n", i, i % 3==0 ? 'Fizz' : '', i % 5==0 ? 'Buzz' : ''
}

途中休憩では、近所のタコ焼き屋さんで買ってきた「塩ごま油味」のタコ焼きを “ハフハフ” しながら和気あいあいとした雰囲気に。

塩ごま油味のタコ焼き

塩ごま油味のタコ焼き

 

そしてコーディング規約や命名に関する考察まで進み、最後は昨年末にネット上で話題を集めた Paiza さんのオンラインハッカソンに挑戦!!

各自黙々とコーディング。。。キーボードを叩く乾いた音と時折「あ〜」とか「う〜ん」といったうめき声が響く空間。。。

プログラミングの現場っていつもこんな感じなんです。

約3時間ほど経過してそろそろタイムリミットということで答え合わせです。

僕は3パターンのプログラムを書きましたが、3つ目は本格的なアルゴリズムを狙いましたが時間不足で完成せず。2つ目のプログラムでサイトに提出したところ、0.65秒(テストケース1)でした。テストケース2以降は通らず。まだまだですね〜

今回は弊社で初めての勉強会の開催でしたが、大成功でした。とても楽しかったです。

また次回も企画したいと想います。参加していただいた皆様、ありがとうございました!


おまけとして、オンラインハッカソンに提出したコードを掲載しておきます。かなりヤッツケです(笑

#!/usr/bin/ruby -Ku
require 'pp'

(MAX_ITEM, MAX_DAYS) = STDIN.gets.split.map! { |s| s.to_i }

# 商品の値段を入れる配列
$items = []
# 設定金額
amounts = []

while line = STDIN.gets
	($items.length <= MAX_ITEM - 1 ? $items : amounts).push(line.to_i)
end

$items.sort!

PP.pp $items, STDERR
PP.pp amounts, STDERR

def search(amount)
	max_amount = 0
	for i in 0 .. ($items.length - 2)
		tmp_a = 0
		for j in (i + 1) .. ($items.length - 1)
			next if i==j
			a = $items[i] + $items[j]
			break if a > amount
			tmp_a = a
		end
		if tmp_a > max_amount then
			max_amount = tmp_a
		end
	end
	max_amount
end

amounts.each { |amount| puts search amount }