今日も陽気にアレグロ技研

allegorgikenの気が向いた時の日記です

京都大学プログラミングコンテスト 2020 出場記

atcoder.jp

A

座標同士のマンハッタン距離の累積和を求める問題。 距離の計算方法も問題文に書いてあるので、その通りに計算してACを得た。

B

最大で [100, 10000] サイズの整数行列の各行から1個ずつ数を拾っていって、拾い続けた数列が広義単調増加 ( a >= b, b>= c, ... ) になるような組み合わせ数を求める問題。

DPで解けそうな感じがしたけど、計算量が O(NK^^2) になってTLEの嵐だった・・ 行末から値を選択していくことにして「n行目に 値x を選択したときの組み合わせ数」を dp[n][x] としてた。しゃくとり法などを用いて計算量を削減できないかなーと思ったけど、この問題は数字を選択するための数列が毎回変わるので適用できるイメージがわかなかった。時間をかけまくったけ全くわからず。

C

部分点がもらえるという問題を初めて見た。ABCでも昔は登場していたようだ。

問題文を読んでもどのような文字列の重複が評価されるのかイメージがわかなかったので、それを判定するコードを書いてみた。グリッドの横・縦それぞれに2文字以上の部分文字列をすべて列挙する感じだった。 それで重複を回避するグリッドを生成するコードを書こうと思ったけど、時間がなかったので 6x6 のグリッドを手作成してAC(60点)を得た。

D以降

問題を見なかった

AtCoder Beginner Contest 158

AtCoderはじめてました

今の会社に入るにあたってコーディング試験があったのですが、その時に時間制限の中でコーディングをするのが圧倒的に苦手になっていたことが解りました。これの対策として、2019/03 くらいからAtCoderをやっており現在まで継続しています。

2019/10 までに緑コーダーになるのを目標としていましたが、断片的にしか勉強していないこともあって 2020/02 にようやく緑になりました。

AtCoder Beginner Contest 158

atcoder.jp

A - Station and Bus

入力が AAA or BBB の時はバスが不要でそれ以外は必要になるので、そのまま出力します。

B - Count Balls

青ボールをB, 赤ボールをR と表現すると、A=3, B=1 のとき最終的なボールの並びは BBBRBBBRBBBR...BBBR と4個ずつの繰り返しとなって表現できます。 N=10 のとき、先頭10個のボールは BBBR × 2 + BB という形になりますが、これは N ÷ (A+B) の商( BBBR の繰り返し回数)とあまり( BB の文字列長)として計算できます。

桁がデカそうなので多倍長整数を使いましたが、後から見返すと64ビット整数で十分に表現可能でした・・

C - Tax Increase

こういう問題で浮動小数点を使うとだいたい合わないので、愚直に小さい順に計算していきます。 入力条件の A, B は最大で100と大変小さいので、0から20,000くらいの税抜き価格を順番に計算して条件を満たし次第出力すればOKです。 20,000 までで条件を満たさなければ -1 です。

D - String Formation

クエリの度に文字列を反転したり、生成する処理をしてるとTLEで死にそうなやつです。 元の文字列S, 頭に付与していく文字列, 尻に付与していく文字列 をそれぞれストックしていきます。

反転クエリが奇数回登場していると反転状態なので、それは状態として持っておきます。

  • Fi = 1 かつ 非反転状態 or Fi = 2 かつ 反転状態 のときは頭につける
  • それ以外の時は尻につける

という感じで文字列をストックしていき、最終的な出力の際にも反転クエリの回数を鑑みていい感じに反転出力すればよいです。 D言語では string とか char[] を使うと動的長なのがネックになりやすいので、私は雑に固定長で処理しました。

E - Divisible Substring

愚直に多倍長整数でやったら5桁の時点でTLEとなることが解り、提出しませんでした。ジャッジに無駄な負担をかけないのは淑女の嗜みなのです。

F - Removing Robots

ロボットを左から順番に並べて「右側にいるロボットを何台巻き込んで消えるのか」を計算しておきグループ分けをしました。 グループごとに組み合わせ数を出して、それを累乗していくと答えがでてくれるのではないだろうか、と思いますが時間も思考も足りませんでした。

締め

きりみんちゃんの記事が競プロについての話を最高にまとめてくれているので、気になる人はこっちを見ましょう qiita.com

オンライン勉強会「Kubernetes超入門勉強会」で発表してきた

ちょっとしたご縁があって、主催のキット(@kitkat_twit)さん・みうら(@kazuhito_m)さんと私の3人で「Kubernetes超入門勉強会」の番組を配信しました。

⬇ オンライン配信のアーカイブ www.youtube.com

「番組を配信しました」って書いてますが、本来は「勉強会を開催しました」って言うところだと思います😉 ただ、後で配信のアーカイブを見直したら「あっ、これ外から見たら番組じゃん」という気持ちになってしまいこの記載となりました(笑)

実は、発表者3人は互いのスライドを本番までタイトル以外知らないという状態だったのです。 通してみると、みうらさんの発表で「概念」を、私の発表で「入門の手順」を、キットさんの発表で「入門した所感」を説明するいい感じのフォーメーションになってて奇跡的でしたね!

ちょっとした裏側の話

今回の勉強会の開催にあたり、発表者は私を含め3名でした。 この人数だと、自然と運営メンバーとしてのロールが全員についてきます。なので裏側の話をちょっとだけ書きます。

運営の立場として、最も大きなトピックがあります。2月の中旬から「新型コロナウイルス」の影響で次々と大きいカンファレンスが中止になっていました。 中止にする?という話もちょっと出ましたが「時代はオンライン配信やろ」という時代の波に乗っていく方向にすぐに転換しました。 さらに、オンラインにするなら、発表者が一同に会する必要もないのですが「トラブルが起こりやすい」「ライブ感が出しにくい」などの印象があり「発表者は一同に集まり、そこからオンライン配信を行う」と良いとこどりを目指した形になりました。

ここらへんの判断のタイミングと決定の早さが絶妙で、スムーズに物事が決まっていくさまが非常に気持ちよかったです。 私は雑に「いいね!」するだけのフォロワーシップBotみたいな振る舞いをしてましたが、なんか丁度いい感じのチームだったと思います(笑)

小さいトラブルはいくつかありましたが、結果としては人数も増えてリアルタイムの反応をインターネット越しにもらえて最高だったと思ってます! 声をかけてくださったキットさん、オンライン配信のノウハウから機材まで殆ど提供してくださったみうらさん、めちゃくちゃいい学びの場を頂きましてありがとうございました! また、当初想定していた会場の調整して頂いた@takesectionさん、最後までお付き合い頂きまして誠にありがとうございました!

自分の発表について

スライドにもある通り、2020/01 の時点では Kubernetes 未経験と言っていいレベルでした。 現場ではバッチ処理を多く書いていて、コンテナベースのインフラに置き換える妄想で Kubernetes 使えそうだな―、ということは定期的に考えていました。

しかし Kubernetes は入門のハードルを高そう・・ と感じていたところでキットさんに声をかけて頂きまして。じゃあこれを機に「勉強会のタイトル通り『超入門』するか!」という気持ちで実際に超入門し、その過程をアウトプットにしたものが今回のスライドです。典型的な勉強会ドリブン勉強ですね!

⬇ スライドは改めて Speakerdeck にアップロードしました。 speakerdeck.com

⬇ また、今回のスライドで作ったサンプルコードはリポジトリとして公開しています。スライドも入ってる。コミットログは汚いけど堪忍してくださいまし。 github.com

WSLでfishを使うとき、fish_config の設定画面をブラウザから開けない場合

前提

Windowsの開発環境としてWSLをそこそこ前から推しています。シェルは前から fish を推しています。 fish といえば、 fish_config コマンドをたたくとブラウザで開ける画面でのカスタマイズです。これをWSL環境でやると素直にブラウザが立ち上がってくれません。 これを回避して Windows 側のブラウザから開く方法が Github Issue にあって助かりましたのメモです。

やり方

  • WSL側で fish_config する
  • WSL側でもう一つのセッションを開き cat ~/.cache/fish/*する
  • HTMLが出力されてくる
  • http://localhost から始まるリンクが記載されている。Windows側のブラウザでそれを開く

実行イメージ

$ cat ~/.cache/fish/*

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="refresh" content="0;URL='http://localhost:8000/d0b3e31a163ddef6e1464ed241342788/'" />
 </head>
 <body>
  <p><a href="http://localhost:8000/d0b3e31a163ddef6e1464ed241342788/">Start the Fish Web config</a></p>
 </body>
</html>

参考

WSL2だけでしか試してないです。 github.com

2020年の目標

もう2月になってしまった。なんとなーく目標にしたかったことをまとめていきます。

お金を増やす

  • 給与を上げる
  • へんなデバイスを買わない
  • 使ってないデバイスを売る
  • ゲームに使うお金は 年間で5万くらいにする
    • ガチャは天井以外しない

去年はゲームや端末に結構課金していて、軽い引っ越しをしたりしてます。でも貯蓄を削るまでは至っていないので、さすがに無駄が多すぎるのかなーと思った次第です。

アウトプット増やす

  • これみたいなブログ書く
  • はてなブログ以外のメディアを持つ
  • Public な Scrapbox でゲームとかの情報を書く

最近唐突にブログを再開しているのはこれのためです。去年の July Tech Festa からの刺激もあって、なんでも軽くアウトプットしていこうという気持ち。

健康になる

  • しっかり寝る
  • はやく起きる
  • 脂質を控える
  • お酒を日常的に飲むのをやめる
  • 歯医者に通う

健康診断で肝機能NGが出たので、惰性でお酒を飲むのをやめましょうというお話。代わりにジンジャーエールゼロとか飲みます。 飲み会は好きなので、ここは変わらずを貫きたい・・

技術面でのセルフプロデュースをする

  • 自分はこういうタイプのエンジニアですよっていうのがすぐ言えるようになる
  • コンテナベースのCI/CDを学ぶ

ここ数年で継続して触ってるのは Docker なので。最近は言語的なこだわりの気持ちがだいぶ薄れていて、アプリケーションよりもインフラを多めに触れた方がモチベーションを保てるように思ってます。

意思決定に強くなる

  • 物事を後回しにしてることに気づく
  • 雑に済ませる
  • 雑パワーでごり押しする

権限をむりやり握って物事を進められるともう少し仕事を楽しめるかもなーとということを最近思っている。

新潟に遊びに行ったレポ

仕事繋がりの友達に誘われて、新潟に遊びに行ってきました。新潟には2018年の末にソロで1泊旅行していたので1年ぶり2回目。

まとめ

  • 寒くなかった
    • 雪がない
  • 飯は全部うまい
    • 胃袋が足りない
  • お安い日本酒がやたらうまい
    • しぼりたての生酒が流通してて最の高

村上市瀬波温泉

日本海見ながら温泉入ろうぜ」っていうノリで村上市瀬波温泉が選ばれたのですが、実によかった。 村上市は鮭の人工孵化に初めて成功した地方でもあるらしく、鮭を開いて干したものが駅に吊るしてあったりしてます。 もちろん名物的なメシにも鮭が登場しますが、村上牛という高級牛もあったりと侮れません。茶とか塩とかも作ってるらしい。

温泉ですが、あまり特徴のない弱アルカリ泉ではあるものの源泉温度は90度付近とかなり熱いやつ。 今回泊まった宿では加水による温度調節を行ってましたが、鮮度は十分だったのではないかなー。それより塩素がキツかった。 日本海を眺めつつの入浴は完全にあはれで、深夜になると波音と温泉の水音だけになるのが最高でした。

f:id:VVani07:20200113181612p:plain
露天風呂つきの部屋という贅沢をした。でもそんなに高くない

夏は海水浴の客で賑わうらしいですが、冬の静かな日本海を好きになったのでまた冬に行きたい。

食べた新潟っぽいもの

  • へぎそば
  • タレカツ丼
  • 村上牛ステーキ
  • のどぐろお造り
  • 鮭といくらの釜飯、からの茶漬け
  • 栃尾のジャンボ油揚げ
  • バスセンターのカレー

f:id:VVani07:20200113181241p:plain
栃尾のジャンボ油揚げ。油揚げのイメージを覆すうまさ。

飲んだ酒

  • 〆張鶴
  • 大洋盛
  • 新潟駅ぽんしゅ館のコインで飲むやつ
  • 利き酒6酒
    • 6種で1,000円なのに、1種ごとの量が多くてすごかった

f:id:VVani07:20200113181343p:plain
利き酒6種。一杯の重みがデカイ

2019年振り返り

アウトプット力が足りていない、あるいは暖機しているところなので年明けに振り返りの記事を書いています。 ふわっとしか書いてないし、日ごろからアウトプットしてないのでブログだけ見ても意味不明なのが確定しています。 興味がある人はTwitterを見てください。

仕事

2018年の末に退職・転職をしていました。2019年は年明けから新しい職場で働いており、ちょうど今で1年間経過したことになります。 2011年に初めて就職してから職場はずっと大阪でしたが、新しい職場は兵庫です。 私自身の生まれも兵庫なのですが、兵庫にもエンジニアが働ける職場がそこそこ増えてきている気がします。

住まい

職場の変化に合わせて、自身の住まいも大阪から兵庫に変えました。 確か5月頃に引っ越しを済ませたと思いますが、引っ越しは大変面倒くさかったです。 今回の引っ越しを機に、大型家具や家電は「片付けするときのこと」を考えてから導入しようと思いました・・

技術的なこと

Ruby

仕事で Ruby + Rails を触るようになりました。Ruby自体は初めてではないのですが、癖のある独学しかなかったので学びなおしです。 ケアレスミスの多い自分にとっては型に自分を縛ってもらう方が楽だなー・・・ということをずっと思っていますが、テストを書く時などは無限にモックに置き換えができてすごい(小並感)という感じです。言語の特性のうち、短所を補うのはなかなか難しいので長所だけ活かしていきたいなーととりあえずは考えています。が、今の開発チームだと「設計」を考える機会が少ない = なんとなく動くものが出来ていて、それを良しとしている、ような気がするという疑問の感を最近は抱いています。

Docker

前職以前よりも本格的に Docker を使うようになりました。今年は Amazon ECS (Fargate) で動く簡単なものをデプロイしたりしました。ガシガシインフラを触っていい立場ではないのですが、わりと実験に寛容な現場なのでとても楽しませていただいてます。感謝。

ゲーム

時間に余裕があったので、結構いろいろなものに手を出しました。

モンハン

手元にPS4があって、MHW:IB が発売していて、同僚もプレイしていたので便乗スタートしました。モンハンはダブルクロス以来プレイしてませんでしたが、いろいろな面でストレスが軽減していてすばらしい出来だと思いました。アイスボーンのクリアまでは到達し、少し寝かせています。

Splatoon2

Splatoon2は発売当初から遊んでいました。しばらく鮭しばきを専門としていたのですが、友人の根気強い誘いもあってガチマッチに参入しました。正直楽しめる気がしなかったのですが、なんだかんだ続いて今は最高で S+4 のウデマエに辿り着いています。 状況判断力と潜伏の使い方がまだまだ弱いと自覚しているので、意識して向上していきたい。

デレステ

デレステは2017年の2月あたりから遊んでいて、ずっと継続しているリズムゲームです。私の担当は橘ありす・市原仁奈の2名で、手の届く範囲でU149なメンバーをフォローしています。 2019年はなかなかハードにプレイして、担当アイドルも自分自身も飛躍的に進化したと自覚しています。

ガシャ

2019年は年始から自分のフォロー範囲と限定ガシャのマッチングが著しく、(大変な出費をしましたが)非常に良い出会いとなりました。

  • 2018年末シンデレラフェス限定の「【一夜の魔法】赤城みりあ」が登場
  • 2月末シンデレラフェスに限定の「【ありすの物語】橘ありす」が登場
  • 3月末限定の「【ぴかぴかのさくらぐみ】市原仁奈」が登場

自分の事務所ではいずれも不足している特技・センタースキルのものであって、この3人の参入より先端に追いつくことができました。感謝。

ゲームプレイ

8月にはイベントの「夏恋 - NATSU KOI -」にて橘ありすが上位報酬として登場しました。 2017年の2月からゲームを始めて初めての担当上位報酬イベントとなり、気合を入れて臨みました。 結果的には 1,000 位前後の入賞となり無事に希望の報酬を得ています。

このイベントは Live Groove 形式 でしたが、仕事の都合で前半戦の間に勝負を決めなければならず効率的なイベントptの獲得方法を模索しました。その結果、「Live Party の専用部屋による高速周回」という解に辿り着きました。

実は Live Groove 形式の前半戦は Master+ の Live Party をこなす方が 1曲あたりのイベントpt効率が高いです。 ただ、普通に Live Party をするとマッチング時間の分で損失が大きいのです。そこで、専用部屋を作って同じ狙いのプレイヤーを集めることで高速にLiveを周回します。

「5人集まらなければならない」という条件はつきますが、 集まれば「同じゴールを共有した者たちの部屋」という小さなコミュニティの中でプレイする気分になれます。イベント周回 = つらい、という中でモチベーションを保つ手段としてとても有効だと思いました。専用部屋でたくさんプレイした結果、思い出深い同僚もたくさんできて実りがありました。

8月のイベントでかなり周回した結果 SSSランク入りがかなり現実的だったのでそちらにも便乗入賞しました。 SSSランク入りは月間の獲得ファン数を競うのですが、こちらでも Live Party が活躍しました。 Live Party では「シンデレラチャーム」のセンター効果が重複するので、爆発的なファン数獲得を期待できるのです。これを狙った専用部屋は「チャーム部屋」と呼ばれているようです。

9月以降は燃え尽き症候群に突入し、ほとんど休養しました(笑)

2020年

年始は体調不良から始まりました。今年のことはこれから考えようと思います。