先週末、TokyuRuby会議12というイベントがありました。
TokyuRuby会議12 - Regional RubyKaigi
イベントの概要はこんな感じです。
このイベントには初参加(LTでなく参加自体が初めて)だったんですが、LT王で4位をいただきました!
30人くらいの発表者がいたため、かなり好評だったようです。
プレミアムモルツ
繰り返しますが、プレモルが無料で飲み放題とかいうアタマのネジが飛んだかのようなイベントでした。
僕自身は飲むのを夢中で撮影を忘れていたので、Twitterに上がったみなさんの写真をごらんください。
13:30開場で14:00開始だったんですが、開始時点ですでに出来上がってる人が何名かおり、イベントの恐ろしさを感じました。
LTをしました
「Project Eulerから生まれたワンライナーたち」というタイトルでオーディエンス参加型のLTをしました。
初参加だったため、ここまで皆が猛烈に飲むとは知らずに酔ったアタマで数学の問題を解かせるという鬼畜LTになってしまいました。
この状態では無理に決まってるだろwww #tqrk12
— kaiba (@kaiba) 2018年7月29日
それな。
ただ、いままで参加型LTをやった人はいないらしく、「斬新」と評価されたので良かったと思います。
また、最前列で大声でリアクション取ってくださってた @joker1007さんにもだいぶ助けられました。
(終わったあとトイレでたまたま一緒になったのでお礼をいえました)
ちなみに、投票で頂いたコメントはこんな感じです
今年の上半期は同じProject Eulerネタで見せ方を変えていろんなところで発表していたのですが、今回は結果的に集大成になりました。
また、RubyKaigiLTに出せって煽られたんですがチキって出せずにモヤモヤしてたので、そういう意味でもスッキリしました。
LTの中で「ブログで解説します」って言ってた内容は最後に。
他のかたのLT
印象に残ったというと、
- ほとんど叫んでたのに内容は超ハイレベルだった優勝LT「シン・リファインメンツ」
- 内容がわかった瞬間、TLが総ツッコミとなった「Rubyistなら知っておきたい継承の話」
- たぶんこの世で一番盛り上がった
ruby -v
を実行した「RubyKaigi で配ったフロッピーから Ruby 0.49 をビルドする」 - コミッターにだけはタネのわかった「Make Your Ruby Script Confusing」
- TokyuRuby会議と利根川さんへの愛が伝わってきた「TokyuRuby会議行ったら人生変わったww」
でしょうか。
戦闘力の高い人たちがたくさんいたおかげで技術的にハイレベルなトークが聴けて、「勉強会」としても十二分に有意義なイベントでした。
第2問を require 'date' なしで解くワンライナーの解説
LTの中で、こんな問題を出題しました。
20世紀(1901年1月1日から2000年12月31日)中に月の初めが日曜日になるのは何回あるか?
なお, 1900年1月1日は月曜日であり, 20世紀において4の倍数の年は必ずうるう年である.
出典: Project Euler - Problem 19
require 'date'
を使うと結構簡単に解ける(スライド参照)のですが、使わない場合は以下のように複雑になります。
基本のアイデアは、以下の通りです。
- ちょうど1年前が月曜日でうるう年でないことから、1901年1月1日は火曜日である
- この日は日曜ではないのでカウントしなくてよい
- また、日曜日はこの日の5日後、12日後、19日後...となる
- つまり、1901年1月1日からの経過日数を7で割ったあまりが5である日は日曜日である
これを踏まえて、アルゴリズムは
- 1901年1月から2000年11月まで、各月の日数が順に並んだ要素数1199個の配列を作成
- 上の配列を順に足していったときの、そこまでの累積の値が入った配列を作成
- 元の配列:
[30, 28, 31, ...]
- 作成する配列:
[30, 58, 89, ...]
- 元の配列:
- すると、この配列が格納している値は1901年1月1日から各月1日までの日数になる
- つまり、
[(1901/01/01から1901/02/01までの経過日数), (同じく1901/03/01までの経過日数), ... , (2000/12/01までの経過日数)]
のような配列が出来上がる
- つまり、
- この配列の各成分について、7で割ったあまりが5である日を数えれば答えが出る
のようになっています。
ごめんなさい
この解き方をするには、「1900年は4で割り切れるがうるう年ではない」ということを知っていなければいけません。
つまり、問題に情報が足りませんでした。すみませんでした。
(require 'date'
するなら関係ないですけど)
まとめ
- Project Eulerをみんなに解いてもらったらLT王4位になった
- ハイレベルなトークと美味しいお酒と美味しい食べ物
- 第2問は
require 'date'
なしでもワンライナー可能
ぜひとも来年も行きたいですね!!
とっておきのLTを持っていきます!!