オンサイトで未確認

ukuku09の活動記録。

大悪魔でも就職したい!

なっはっはー!私はウクニキア!ご存知この世を統べる大悪魔よ!今日は就活で消耗している/しそうな、無能な下等生物のために、この私が如何にして内定を勝ち取ったか教えてあげる。感謝しなさい!

と言うことで、今年の4月に内定が出て早々に就活を切り上げました。この記事は「TLの就活生みんな優秀すぎない?!たまには優秀じゃない人の就活話を聞きたい!!」と思っている人向けなので、就活時の参考にはしないでください。

自己紹介

僕は地方にあるCS系大学のB4です。物語の大学生さながら、学業のみならず、サークルをはじめ、バイトやインターンにも精を出し、仲間たちと忙しくも輝かしい大学生活を送っている・・・なんてことはなくて、そんなに人付き合いが得意ではないので、実質引きこもりです。以前は競技プログラミングをしていましたが、最近は研究テーマを決められなくて憂鬱な日々を送っています。推しはアズリム、ココアちゃん、ゆんさん、天ちゃん、有咲です。


【アズマリム】人類みなセンパイ!【MV】

就職 vs. 院進 ※ 2019/7/5 追記

大学生の多くは「養ってくれるお姉さんのヒモになりたい!」「そろそろ異世界転生したい!」と思っているらしいですが、真面目な話、学部生の進路には大きく《就職》と《院進》があります。僕自身、B2の頃は(どうしても社会に出たくなくて)進学も視野に入れていました。ではなぜ就職を決意したかというと、一つは経済的な事情です。今、僕は結構な額の奨学金を借りています。おかげで実質ニートな生活をしていても特に困ることはありません。しかし、これ以上借りてしまうと流石に返済がかなり厳しくなると思います。(そして「バイトするくらいなら就職でよくない?」と思っています。)

実は、院進すると奨学金を免除できる可能性があります。ただ、これは優秀な学生であればの話です。残念ながら、僕にはこのまま学生を続けて成果を出せる未来が見えないので、この手は使えそうもありません。学術へのセンスのなさ、それが僕が就職する、というよりも院進しない最たる理由です。実際、未だに研究には全く着手できておらず、かれこれ数ヶ月怠惰な生活を送ってしまっています。流石にそのうち卒論は書くでしょう(というか書かなきゃ卒業できない)が、院へ行ってまで研究をしたいとは思いませんし、それならばさっさと就職してお金を稼いだ方が有益でしょう?

そういうわけで、消去法的に就職を選んだというのが正直なところです。でもまぁ、現状維持よりは賢明な判断だと思うし、生活環境が変わることに対して楽しみもあるので、そこまで消極的というわけでもありません。

就活以前

〜B3前期

当時は競技プログラミング部に所属していました。2017年のICPCつくば大会や2018年のICPC横浜大会に出場します。(とはいえ、僕以外のチームメイトが強かっただけで、僕自身は当時のAtCoderで青にも満たない実力でした。)

競プロer御用達のコンテストサイトAtCoderで、AtCoderJobsなる就活支援サービスがスタートします。他にアピールポイントのなかった僕は、この時「このまま競プロで就活するのもありだな」などと考えていました。

B3夏休み

夏休みはインターンに行くべき!・・・と思っていたのですが、正直働きたくなかったので、結局行きませんでした(は?)大人しく部活の合宿へ参加しました。机の下で寝ない!(素振り)

B3後期

心を病んで競プロを実質やめた後は、研究に向けて線形代数とか確率・統計の復習をしたり、機械学習の基礎の基礎を勉強したりしました。しかし、研究テーマは決まらず、開発経験もなく、打ち込んでいるものもないまま、就活を迎えます。

シュウカツ!

実はちゃんと選考へ進んだのは3社だけです(えぇっ?!)就活舐めプ勢なので、「まあ受かるでしょ!w」みたいな気持ちで、面接を受ける前に絞ってしまいました。これもあまり良くなさそう?とはいえ、その前に何度かイベントで面談をしているので、それを0次面接と数えれば、普通くらいだと思います。

装備

こんな装備で大丈夫か・・・?ダメです。

準備編

初めてESを投げるまでにやったことです。正直あまり意味はありませんでした。

(2018年9月)大学にて

キャリアデザインなる講義を履修登録せずに)聴きに行きました。自己分析の方法やらESの書き方やらの説明(「ネガティヴ」→「想像力が豊か」、「心配性」→「慎重」みたいなやつ)や、企業の方が来て講演していただくといった内容でした。

(2018年11月)企業説明会

ご存知サポーターズが主催する、BtoC企業が集まるイベントに行きました。20社くらいがブースを出していて、ターンごとに各々好きなブースへ行って説明を受ける、という形式です。

この頃は《企業のネームバリュー》を意識していて、有名企業含め10社以上は回ったと思います。ここで、ベンチャー企業の社風と、そこの新卒の初任給がだいたい25万〜30万であることを知りました。年収にすると、だいたい350万〜450万なので、新卒年収800万とか1000万が如何に壊れているかがわかります。

ここで、いくつかの企業のSONARマイページに登録します。(使わなかったけど。)

その後、某社からメールでWEB面談のお誘いをいただきます。1対1で企業の方とお話ししたのは、多分これが最初です。(ただ、僕には合わない気がしたので、そことはこれでお終い。)

(2018年12月)ICPC企業見学

マスコット担当として参加したICPCですが、就活生らしく企業見学に参加しました。僕は“PFN→LINE→Indeed”のルートで、正直「エリートたちの職場を見られてラッキー」くらいの気持ちで回っていましたが。PFNで食べる寿司は美味い!

ルートが同じだった某年長者に「就活どうでした?」と聞いたところ、「忘年会へ行くと内定がもらえる」的な返答をされ、全く参考になりませんでした。

本編

2019年1月某日・・・

携帯「PLLLLLLLLL」

僕「はい」

?「就活どうですか?」

僕「ダメです」

?「イベントに招待します」 

ここからは面接を受けた3社について書きます。特定が怖いのでぼかすのですが、②社と③社については、逆求人的なイベントで選考に進みました。ESを書いたり、志望動機を考えたりする必要がなかったのが良かったです。

選考フロー

僕が受けた3社のそれぞれの選考フローは

  • ①社:ES提出→適性検査(Web)→1次面接(Web)→2次面接(Web)→最終面接(本社)→お祈り
  • ②社:面談(イベント)→適性検査(Web)→最終面接(本社)→内定
  • ③社:面談(イベント)→適性検査(会場)→2次面接(本社)→最終面接(本社)→内定

という感じでした。②社と③社のイベントというのは逆求人みたいなイベントで、エントリーする際に情報系の基礎問題とプログラミング問題を解き、その成績を元に、企業側から指名を受けて面談する、というものです。

イベントで出会った他の企業からも選考のお誘いをいただいたのですが、面接を受けたくない一心ですべて辞退しました。

就職先

こういうのどこまで言っていいんでしょう?特定も内定取り消しも怖いですが><

都内某所にある③社へ入社します。③社はBtoB企業で、《みんなが嫌いなアレ》の事業を営んでいます。決め手は、以前から《みんなが嫌いなアレ》の事業に興味があったというのと、自分の今持っている能力を活かせつつ、それ以外の技術を習得するための機会と環境が整っていると感じたからです。

就活の軸

就活中は「どうして弊社?」とか「就活の軸はなんですか?」とか「どんな仕事したい?」と聞かれることが度々ありました。僕は真面目に企業研究をしていなかったので、実際のところ「名前を知っていたから」「ノリで」なのですが、後付けで建前を用意しました。

ここでどこまでぶっちゃけるかという問題があって、本音で「働かずに生きたい」なんて言ったら就職できないかもしれません(知らんけど)。だからと言って、真面目ないい子ちゃんを演じても、自分とマッチする企業と出会えるかわかりません。そのため僕は、

  • 今はフロントエンドをやりたい気持ちはない
  • 自社サービス開発が良い
  • 雰囲気の良い職場で働きたい

などを挙げていました。結構適当に考えましたが。

「厳しい環境が人を育てる」と言う人も言いますが、僕の場合、その前に心を壊しそうなので、自分では厳しそうなところの選考には進みませんでした。(決して就職先は緩いと思っているわけではないですけど。) 

就活を終えて

結局、3社受けてうち2社から内定をいただきました。いやぁ〜、多少妥協したとは言え、意外となんとかなるものですね!

面接はどこも結構カジュアルで、《スーツを着て、面接マナーを覚えて、正しい敬語で用意してきた解答を諳んじる》、なんてことをせずに済んだのは気が楽でした。とはいえ多少は話す内容を考えていかないと、普通に返答に詰まりますが。

草の根を分けてでも行きたい企業があった訳でもなかったので、面接や面談は“ミスマッチを避けるためのお喋り”くらいの気持ちで挑んでいたような気もします。「それならもっと多くの企業を受けるべきだったのでは?」と言われそうですが、クソザコメンタルにとっては1社受けるだけでも一苦労なので許してもらいたいところです。

ただ、働いてみないとわからないことも多いなと感じたので、バイトやインターンで働いておくというのは、単に開発経験がある以上のアドバンテージがあると思います。

 

でもまぁ、どんな企業にもそこで働いている人がいるわけだし、最悪就職失敗したと思ったら転職したらいいんじゃないかなぁくらいの気持ちで社会人をしていきたいです。

最後に

まあ色々書いたけど、結局、優秀な人材が欲しい企業はとりあえず名前を売るべきね!なんたって知らない企業にはエントリーできないんだから!私も優秀なシモベが欲しいから、“ウクニキア”の名をもっと世に知らしめていきたいわ!!ぬぁ〜はっはっは〜!!!

【Python環境構築】結局 pyenv と conda ってどうやって使うのが正しいわけ?

久々にPythonを触るに当たって、pyenvcondaをどう使えばいいのかよくわからなかったので調べた。
結論から言うと、やっぱりよくわからなかった。
「pyenvとcondaは(そのままだと)共存できない」みたいな話を聞いたことがあったけど、condaのアップデートで修正されてるっぽい?
pyenvは最初にanacondaに切り替える時だけ使って、あとはcondaを使っていればいいような気がする。

以下、自分用のメモ。

仮想環境を作る

そもそも仮想環境なんて使ったことないな。ウケる。

  • Pythonnのバージョンを指定して、新しい仮想環境を作る
$ conda create -n *env-name* python=*version*
  • 設定ファイルから仮想環境を作る
$ conda env create -f *yaml*

仮想環境のリストを表示

$ conda info -e

conda env listでも可。baseはデフォルトで用意されている環境。activeな環境には*が付いている。

仮想環境に入る・仮想環境から抜ける

$ conda activate *env-name*
$ conda deactivate

実はpyenvからもanacondaで作った環境をpyenv local等で指定できるらしいんだけど、よくわからないからやらない。

仮想環境にパッケージをインストール・アップデート

(*env-name*) $ conda install *pkg*
(*env-name*) $ conda update *pkg*

conda自体のupdateはconda update conda

仮想環境にインストール済みのパッケージを表示

(*env-name*) $ conda list

仮想環境の設定を書き出す

  • activeな仮想環境の設定ファイルを書き出す
$ conda env export > *yaml*

仮想環境を消す

  • 仮想環境を全て消去
$ conda env remove -n *env-name*

conda remove -n *env-name* --allでも可。今いる環境を消すには、一度抜ける必要がある。

  • 特定のパッケージをアンインストール
(*env-name*) $ conda remove *pkg*

(おまけ)Jupyter Notebookに仮想環境のカーネルを追加する

$ ipython kernel install --user --name=*env-name* --display-name=*env-name*

参考

ACM-ICPC 2018 Asia Yokohama Regional Problem E - Eulerian Flight Tour

問題概要

連結とは限らない $n$ 頂点 $m$ 辺のグラフ $G$ が与えられる。$G$ にいくつか辺を付け足して連結なオイラーグラフにしなさい。多重辺・自己ループは許されない。

制約

  • $3 \le n \le 100$
  • $0 \le m \le \frac{n(n-1)}{2}$

コンテスト中にした考察

以下、入力 $G$ の奇数次数頂点を黒、偶数次数頂点を白と書く。

 

まず「グラフがオイラーグラフ $\iff$ グラフに含まれるすべての頂点の次数が偶数」なので、問題文は「黒の次数を奇数・白の次数を偶数増やして、連結なグラフにしなさい」と言い換えられる。すると、$n$ が奇数のときは完全グラフ(すべての頂点の次数が$n-1$(=偶数))を作ればよいので、$n$ は偶数としてよい。

$G$ が連結な場合は簡単に解けると勘違いしていたので、非連結な場合を考えた。非連結な場合、

  • 連結成分がすべてオイラーグラフの場合
  • 連結成分がすべて非オイラーグラフの場合
  • どちらもある場合

が考えられる。

すべてオイラーグラフの場合が解けると嬉しそう。オイラーグラフが3つ以上ある場合は各オイラーグラフから頂点を1つずつ選んでサイクルを作ればよい。2つの場合、どちらも孤立点でなければそれぞれから適当な2頂点を選んで下図のように繋げばよい。

f:id:ukuku09:20181213130105p:plain
どちらかが孤立点 $x$ の場合、もう一方の連結成分 $C$ の頂点数は $n-1$(=奇数)なので、$C$ の頂点を使って完全グラフを作るとオイラーグラフになる。$C$ が完全グラフでなければ、完全グラフにする過程でどこかの辺に孤立点 $x$ を挿入すると、連結なオイラーグラフが作れる。$C$ が完全グラフの場合、ある $v \in C$ と $x$ とを繋ぐと必ず $v$ の次数が奇数になってしまうので、連結なオイラーグラフを作ることはできない("-1"が答え)。

オイラーグラフと非オイラーグラフがどちらもある場合、オイラーグラフ $C$ を1つ選んである $v \in C$ とすべての非オイラーグラフの黒との間に辺を張って $C^+$ を作ると、黒は必ず偶数個ある(握手補題)ことから、$C^+$ は連結なオイラーグラフになり、全てがオイラーグラフの場合に帰着できる。

オイラーグラフしかない場合、最も奇数次数頂点の少ない連結成分を1つ選んで下図のように繋げばよい(橙は選んだ連結成分の黒の集合、青はそれ以外の連結成分の黒の集合)。これも握手補題から各黒の次数は奇数増える。

f:id:ukuku09:20181213184228p:plain

非連結な場合が解けたので、連結な場合を考える。コンテストではこれが解けずに終了した。

連結な場合の解法

PFN企業見学の待ち時間に聞きました。待ち時間に問題解説が生えるのはPFNだけ!

 

$G$ の補グラフ $G^c$が 黒を奇数個含む連結成分を含む場合(例えばサンプル2)、答えは"-1"。

それ以外の場合、$G^c$ 上で全ての黒がちょうど1回ずつ端点になる(黒の数)÷2本のパスを適当に引き、奇数本のパスに含まれる辺を $G$ に追加すると、$G$ を連結なオイラーグラフにすることができる(!!!)。

$G^c$ が下図のような場合の例を示す。

f:id:ukuku09:20181213175106p:plain

黒は6個あるので、黒を両端点とする適当なパスを3つ選ぶ。

f:id:ukuku09:20181213175117p:plain

下図に奇数本のパスに含まれる辺を実線で示した。これらの辺を $G$ に追加すると、$G$ は連結なオイラーグラフとなる。

f:id:ukuku09:20181213175049p:plain

コード

上の考察通りにやったら結構長くなったので省略。実装が下手。

反省

聞いた瞬間確かにすぎて蟹になったんですが、5時間かけて思いつかないの頭が悪すぎて辛いです。やっぱり普段からちゃんと競プロやってないとダメなんだろうなぁ。

 

UVALive 7724 - Regular Number

思いつけばそれほど難しくないと思う。

問題概要

長さ $N$ の数字列にマッチする正規表現と長さ $5*10^6$ 以下の数字列が与えられる。正規表現にマッチする数字列の部分列を左から順に答えよ。

考察

$N+1$ 個の状態を一列に並べたオートマトンを考える。$i$($0 \le i \le N$) 文字マッチしているのをオートマトンの状態 $i$ にいると考えると、$j$($1 \le j \le N$)文字目の正規表現は状態 $j-1$ から状態 $j$ に進めるかどうかを決めるラベルとなる。

各数字についてどこにラベルがあるかと今のオートマトンの状態をbitsetで管理してやると、ビットアンドとビットシフトを組み合わせて始点の異なる複数の部分列のマッチング状態を一度に扱うことができる。

gist4297e823efc52ece391983f11374e1ad

UVALive 6070 - Conquer a New Region

簡単な問題しか解けない。マスコットだからね。

問題概要

頂点数 $N$ の木が与えられる。木の各辺には容量が設定されており、頂点 $u$ から頂点 $v$ へのスコアは $u-v$ パス上の辺の容量の最小値で定義される。

頂点 $w$ を一つ選んで、他の頂点から $w$ へのスコアの和を求めたとき、その最大値を答えよ。

解法

全方位木DPかと思ったけど、それでは無理だとbeetくんに教えてもらう。

辺を容量の降順でソートしておくと、辺 $i$ が2つの連結成分 $x,y$ を繋ぐとき、各連結成分に属する頂点に入るスコアはそれぞれ $size(y)*c_i,size(x)*c_i$ だけ増える。

連結性の管理と連結成分に属するすべての頂点に一度にスコアを加算するには、Union Findを応用してやると良さそうだと気づけば後は簡単。

 

giste2a3757a4faf918f4ea941df4138c4da

ACPC2018参加記

ククク…、私は大悪魔ウクニキア!

9月19〜21日に実質私主催(大嘘)の競プロ合宿、ACPC2018に参加したわ!

参加してくれた人間ども、遠方からはるばるご苦労だったわね!

作問の話

今年はあんまり参加しなかった。

というか気づいたら問題の枠も埋まってたし、テスターの数も足りてたからわざわざやる気にならなかった。

優秀な人材が多くて、我が部は安泰ね!

Day 1

何も覚えてない。btkさんと少しアズリムの話をしたんだっけ?限定Tシャツ早く欲しいね(9/22に届きました)。

・・・

Bが異常に難しすぎるんだよな。普通に制約を見逃していたので、適当考察でサンプルを合わせにいったらACした。

Dが右手法で解けそうということで、やなさんに丸投げする†悪魔的行為†。

Eを他のチームがバンバン通し始めたので、焦燥感に駆られながらもなんとかDPで解けそうな形に持って行けたので、適当にごにょごにょしたらACできた。よかった。

やなさんD頑張ってくれたのに協力できなくてごめんね><

・・・

TIkeさんとかolpheさんとかgoodbatonさんと話した気がする。E貪欲マジ?

beetくんとうしとそすうさとらーめん食べに行ったら8/31で閉店しててウケた。結局幸楽苑で味噌ねぎらーめんを食べた。今週2回目。会話の内容を全く覚えていない。

Day 2

なんかT◯1192916とかおるふ◯がすれ違うたびに「おっ、うくさんじゃ〜〜〜〜ん」とか絡んでくるので構ってあげた。私は優しいからね。

・・・

ジャッジだったけど、実はAしか作っていないので一瞬で仕事が終わった。ちなみにその問題がこちら↓

https://onlinejudge.u-aizu.ac.jp/services/room.html#ACPC2018Day2/problems/A

Aということで解法一瞬問題を作ったつもりだったが、オンサイトでは1分を切るチームはいなかった。私の文章力に惹かれて熟読してしまったのかもしれない。

暇だったので作問作業で解かなかったFを解いた。微分?そんなものはWolframに投げればいいんだよ。

そのあとは先日初披露されたアズマリム のオリジナル楽曲「人類みなセンパイ!」を聴きながら時間を潰した。とりあえず人類みなセンパイ!は神曲だと思う。

・・・

冷静に考えて、あの日の懇親会はマジでヤバイ。

あまり飲酒しなさそうなメンツのテーブルだったから、わざわざはじさんを誘って一緒に飲もうとか言っていたのに、どうしてあんなことになってしまったのか…。

原因は明らかに私の後ろにセルフサービスの果実酒が置かれていたことと、Ti1192916があそこにやってきたことだと思う。私は悪くない()。

というか、人間どもがアズリムのことで私をいじりすぎなのが悪いんだよな。本気ではないとはいえ、まさかガチ恋口上をやる羽目になるとは私も思わなかった。確かbtkとかいう奴に煽られたんです。私は無罪なんです!(いや悪魔的には有罪の方が美味しい?)

「まっすぐ立てるんだよなぁ!」「まっすぐ歩けるからまだいける!」とか言ってたけど、あれダメだよね…。

とはいえ私は帰る頃にはTIkeさんとの烏龍茶を巡る旅が効いてだいぶマシになっていた。TIkeさんに圧倒的感謝。

c7くんがベロンベロンに酔っていて連れ帰るのが大変だった。最終的に彼の友人に引き渡したのだが、何度も「えっと、誰?」みたいな扱いを受けた。大悪魔の顔を忘れるとはなんて恐れ知らずなのかしら?

Day 3

またなんかTi1192◯16とかお◯ふぇとか半角カナの人に絡まれたので構ってあげた。大悪魔は実は面倒見が良いのである。

うしとそすうさとチームを組んだ。ちなみにチーム名はacpc_aizulimだが、アズリム要素を入れることを最初に提案したのは私ではない。

コンテスト前にそすうさが「アズリムちゃん見たい」というので、適当にオススメ動画を選んで鑑賞会をした。アズリムはいつどこで見ても可愛いなぁ〜〜〜。

・・・

なんかこの日はよく覚えてる。なんでだろう。

私は普段のコンテストでは実装をbeetくんに投げているので、この日はうしさんに全部押し付けた。

Cはまあはいなので、うしがAを解いたタイミングを見計らって引き渡した。

Bが難しい。全然わからん。なんでどこの大学もBに罠を置くのか。うしもわからんとか不可能じゃんという気持ちになっていたら、うしがD解けたらしいのでDを解かせた。

そすうさにEの概要を聞いたらこれもまあはいだったので、うしに丸投げする。WAったのでコードを見たらなんか激ヤバなミスしてて、なんでサンプル通る念という気持ち。

私がBで遊んでいたらうしがGを通したので、みんなでBを考える。結局クエリ平方分割で解けるという話になって、それでうしが通したけど流石に想定じゃないよなぁと思った。

残り時間が少なくなってきてFいけるかなぁという感じだったんだけど、そすうさがいろいろ考察を進めてくれていて、なんかごちゃごちゃやっていたら、場合分けシミュレーション解法に落ち着いてこれFまじ?と言いながら実装を見守った。

ラスト1分を切ってうしがFを通し、オンサイト逆転1位を勝ち取れた展開はめちゃめちゃ熱かった。

・・・

解散は意外とあっさりしていたのであっさり終わった。

まとめ

疲れたぁーーーー!!

JAG合宿と合わせて6日も合宿コンテストしたわけだから流石に疲れたわ。

1番の思い出は、けんちょんさんとTIkeさんの「うくさん、昔は競プロ美少女大悪魔だったのに、今じゃただのアズリム大好きおじさんになってしまった」という言葉。

なんでよ?!今でも十分美少女でしょー!?

本当にお疲れ様でした。

ちなみにこの翌日のコドフェス予選は寝てたから出忘れた。