フォルシア サマーインターン 参加記

こんにちは、君津です。
先月の中旬にフォルシア株式会社(以下フォルシア)さんにインターンに行っていました。
ずいぶん遅くなってしまいましたが、紹介したいと思います。

www.forcia.com

コースと待遇について

私が参加したのは3日間の検索高速化コースでした。
初日に説明を受けるまで知らなかったのですが、就業時間は10:00~19:00でとても体に優しいです。
お昼は1時間が目安でしたが、時間の使い方は任されていて休憩や外出などは自由にできました。
報酬も3日間で5万円、時給で考えると2000円以上と、高待遇だと思います。
ランチや懇親会はもちろん全額負担してもらいましたし、(私はあまり関係ありませんでしたが)交通費全額支給で、遠方からの方には徒歩10分ほどの場所にホテルを用意してもらっていました。

www.forcia.com

選考について

実は第一希望でRust検索エンジン開発コースを選んでおり、検索高速化コースは第二希望でしたが、書類選考の段階でRustのほうは落ちてしまいました。
これについては結論から言うと検索高速化コースで良かったと思っています。
第一希望で通過できなかった敗因としてはRustを書いたことがなかったことと、インターンまでにRustをマスターするだけのポテンシャルがないと判断されたのかなと思っていますが、実際に自分でもそんな気がするのであまり気にしていません(当時AtCoder青で自分と大体同じ状態の友人も落ちているので)。
面接では実際にインターンでメンターをしてくださるエンジニアの方3人とお話させていただきましたが、研究や競プロなどの雑談がメインでした。
この時点では相性を主に判断されていたのではないかと思います。

選考後インターンまで

SQLの入門本を送ってくださったのでそれを一通り読みました。

www.shoeisha.co.jp

タイトルの通りSQL初心者が初めに読むには良い本だと思います。
ただインデックスも書いてないのはどうなんでしょう笑。
他にも、昨年度のインターンの報告ブログを読んでみたり、SQLの高速化に関するあれこれを勉強だけした状態でインターンに望みました。

インターン中にやったこと

インターンではフォルシアさんが実際に作っているある商品検索サービスの元データを使って、それに対する検索を高速化しながら条件を追加していきました。
中身としては商品が200万種類以上、テーブル数も(あまり覚えていませんが)10以上はあるようなデータベースを触ることができました。

学んだこと

SQLについて大体のことを学べたと思います。
そのうち上記の本に書いていなかったことを箇条書きすると

  • ジョインは遅い
  • (部分)インデックス
  • EXPLAIN (ANALYZE)
  • 共通テーブル
  • pg_bigm

などを学ぶことができました。
SQLを使ってる人からすると当たり前かもしれませんが、私はどれも知らなかったのでお金をもらいながら勉強できてとても楽しかったです。
逆に言うともうSQLを使いこなせている人は物足りないかもしれませんね。

フォルシアさんについて

全体的に手厚い印象でした。
面接の時点でメンターの方が3人いらっしゃってこの中の誰かに担当してもらうのかなと思っていたら、全員で僕含め2人のインターン生の面倒を見ていただけてとても驚きました。
僕の前に同じコースでインターンに行った友人の時は1人に3人付いていたらしいです。
メンターになっていない社員の方々ともランチに連れて行ってくれたり、就活の相談に乗ってもらったりと交流することができました。
あとは、ここまでに書いたこともありますが、

  • 始業が10時で体に優しい
  • お金をいっぱい貰いながら勉強できる
  • 飲み物食べ物(シリアル、ピノなど)取り放題
  • 生データを使わせてくれた

などがよかったと思います。
特に食べ放題のピノですが、同じ期間のインターン生の中で私が1番食べていたという謎の自信があります。
インターンを通してスキルを身に着けつつ、フォルシアさんのことをいろいろ知ることができてとても良かったです。

まとめ

3日間という短いコースでしたが、思い出しながら本当は5日間だったのでは?と思うくらい充実していたインターンでした。
今回の記事が来年以降インターンを考えている方の参考になればと思います。
それでは、ここまで読んでいただきありがとうございました。

ICPC2019 国内予選 参加記

7月12日に開催されたICPC2019国内予選に参加しました。
悔しい結果になってしまったのですが、そういうことはツイッターとかに書くことにして
このブログを読んでくれた人が参考にできる情報をできるだけ書こうと思います。
チームメンバーのことはこちらに書いてあります。

dayama-kimitsu.hatenablog.com



事前の練習

幾何は私、構文解析はTanakaTaroh君がメインでやることになりました。
ただ青2水1のチームということで完全分業はできないかもしれないと思っていたので、
それぞれでどういう事をよくやるかみたいのは共有していました。
またFはもしかしたら解けるかもしれないがGHは解けないだろうということで、
初めからGHを捨てる戦略を取っていました(時間がもったいないので)。
模擬ではこの作戦が上手くいっていたと思います。
AOJ埋めですが幾何とか最近の本番・模擬の問題の他にも
CoprimEという学内のライバルチームのメンバーが解いた問題を中心に解いていました。
学内にそういうチームがいない場合は他大でもいいかもしれません。

当日(始まるまで)

午後の講義は全て切って研究室で寝たりしていました。
チームメイトの2人も早くきてくれたり、
研究室の皆さんの協力もあって15時くらいから準備も終わって暇~って感じになってました。
余裕をもって本番を迎えられて良かったです。
あとは始まる前の20分くらいで階乗とか2べき、3べきのオーダーを
ホワイトボードに書いてたんですが、これは結果的に役に立って良かったです。

本番中

とりあえずA~Cを並列することにしました。
Aで私がnとmを間違えたりしましたが問題なく解けて、
Bもたけのじ君がつつがなく解いてくれました。
Cを見ると右に置く、左に置く、置かないで3の10乗なんですが、
事前に3べきのオーダーを確認していたので答えが0の場合はいけるねとなりました。
分銅を買う場合もそれを元にできそうということでTanakaTaroh君が実装してくれました。
1WAしますが皆でデバッグしたらたけのじ君がバグを見つけてくれて無事3完になりました。
この段階で先の問題を全然見れてなかったんですが、
GHは元々捨てるつもりでFも天才にならないと解けなそうだったので、
DEを考えることにします。
途中順位表を確認すると結構重めのセットらしく、
この時点で4完を目標にして皆でDを解くことにしました。
私はずっと嘘解法の反例を考えてる間に2人のdp解が理解できなくなってしまい、
終盤は置物になっていました。
最終的な順位は81位で学内3位でした。

f:id:dayama_kimitsu:20190713125158p:plain
弊学の結果
あとこういうスクショは取っておいたほうがいいです(そのうち見れなくなるので)。

反省

Dに集中する前までは問題なかったと思っています。
実装のEから逃げてDを取りに行ったのはまずかったかもしれません。
本番中にEを通せなったチームのほとんどが思ってそうですが、
覚悟を決めてEに行けば良かったかもしれません。
あとは嘘解法に夢中になって足を引っ張ってしまったのも良くなかったですね。

最後に

私は1996年生まれなのでICPCは今年で引退です。
今年も弊学から3チーム突破は叶わず悲しいですね。
ここ数年で弊学もレベルが上がってきていると思いますが、
まだ伸びしろはあるはずなので期待しています。
来年以降はコーチとか打ち上げでお金を出す人として現役を支えていきたいです。
あとはもっと下の世代(付属校とか)に競プロを布教する方法を考えています。
最後にチームメイトの皆さん、コーチをしてくれた先輩方、監督をしてくださったwszk先生、
打ち上げでお金を出してくださったOBの皆様、研究室を使わせてくださったued先生と
ued研の皆様への感謝で終わろうと思います。
ありがとうございました。

ICPC2019 国内模擬 参加記

初投稿です。
ICPC2019の国内模擬に参加したので書いてみました。


チームについて

私、たけのじ君、TanakaTaroh君の3人です。
私とたけのじ君は同じ講義を取っていたりで話しているうちにチームを組むことに。
学内でチームメイトを探したところTanakaTaroh君を迎えることになりました。
チーム名Hokkyokuは私とTanakaTaroh君が中本が好きということでこれになりました。

本番

まずたけのじ君は海外の学会からの帰りで1時間の遅刻が確定していました(は?(空港から直で来てくれてありがとう))。
なので初めは、いる2人で交互に解いていって難しくなったらみんなで解くという感じに。

まずAを見ると全部見るだけだったので書く→サンプル合ってる→出す→AC。
BをTanakaTaroh君にまかせてCに行きます。
規則性がありそうだしサンプルを見るとだいたいx+yっぽいのでもう少し考えると、
0、偶数、奇数で場合分けすればよさそうな気がしてサンプルも合うので出します。
WAします。
Bも苦戦してるみたいだったのでしばらく自分で考えますが分からず。
Bを通してもらってから相談してたらコーナーケースを思いついて修正してAC。
この辺でたけのじ君が来た記憶があります。
みんなでD、Eを読んで考えているうちにTanakaTaroh君が基本方針を立ててくれます。
WAになりますがたけのじ君が反例を出してくれて修正してAC。
僕とたけのじ君はEを考えTanakaTaroh君がFを考えることに。
科目が2つだけだったら簡単だしグラフにすると最大クリークっぽいね、
でもNP-hardだよねみたいな話までは行きましたがそこからは進みませんでした。
Fもとりあえず構文解析は書いてもらいましたがそこから進展せず。
時間になり4完で終了。

結果

早くも遅くもない4完でした。
順位は現役28位、selected21位で良かったです。
3完時点では遅解きだったのでDを通してくれた2人に感謝。
個人的な反省としてはCのコーナーケースを考えるのは1人でできたし、
Eは知識が足りてなかったですね。
アルゴリズム理解してなくてもライブラリは用意していいのでは?とも思いました。

最後に

コーチをしてくれたryoissyさん、チームメイトの皆さんありがとうございました。
気を抜かず本番も頑張りましょう。