T45K https://t45k.github.io/ Recent content on T45K Hugo ja Sun, 01 Feb 2026 22:57:41 +0900 防衛省サイバーコンテスト2026で全完した話 https://t45k.github.io/blog/mod_ctf_2026/ Sun, 01 Feb 2026 22:57:41 +0900 https://t45k.github.io/blog/mod_ctf_2026/ <p>防衛省サイバーコンテストに同僚と参加し、全完して16位でした。</p> <p><a href="https://c.contest2026.mod.go.jp/" class="external-link" target="_blank" rel="noopener">https://c.contest2026.mod.go.jp/</a> <a href="https://c.contest2026.mod.go.jp/teams/888" class="external-link" target="_blank" rel="noopener">https://c.contest2026.mod.go.jp/teams/888</a></p> <p>いわゆるJeopardy形式で、8時間の間に30問の問題をできるだけ早く解くという形式でした。</p> <p>ほとんどの問題はAI(Claude CodeかGemini)に食わして解きましたが、最後まで残っていた<a href="https://c.contest2026.mod.go.jp/challenges#%E7%AA%81%E7%A0%B4%E3%81%95%E3%82%8C%E3%81%9F%E8%AA%8D%E8%A8%BC-3" class="external-link" target="_blank" rel="noopener">突破された認証</a>という問題は、手でも動かしつつ、AIにヒントを与えて解きました。</p> <p>Writeupは同僚がブログに書いてくれると思うので、それを読んで改めて勉強したいと思います。</p> <p>SQLインジェクションといったメジャーな問題でも意外と手が動かないことを悔しく感じたり、Claude Codeの自走力(ちゃんとガードレールを設けておかないとあらぬ方向に突っ走ることも含めて)に改めて驚かされたりした1日でした。 また、初めてTor Browserってやつをインストールしました。</p> <p>問題を解いていく過程は爽快感があったので、また参加したいです。</p> 2025年の振り返り https://t45k.github.io/blog/retrospective_2025/ Wed, 31 Dec 2025 23:00:00 +0900 https://t45k.github.io/blog/retrospective_2025/ <p>2025年を振り返る。</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>仕事では管理職ってやつになった。 良くも悪くも他人の主体性ってやつを信じなくなった。</p> <p>プライベートでは、昨年末にできた彼女と楽しく過ごせた。</p> <h2 id="仕事"> 仕事 <a class="heading-link" href="#%e4%bb%95%e4%ba%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>AIが大きく台頭してきた1年間だったなという印象。</p> <p>2024年まではまだGitHub Copilotレベルのコード補完がメインだった印象だったが、CursorやClaude Codeなどのツールが大きく広まった。 個人的にはJetBrains Junieを愛用しているが、さまざまな部分でClaude Codeの方が使いやすい印象もやや感じている。</p> <p>その他、先輩が辞めたり、子会社化とかがあったりと、話題が尽きない1年だったかな。</p> <p>リーダーからEMへとステップアップしていってるが、将来的にはICとして働きたい</p> <h2 id="趣味"> 趣味 <a class="heading-link" href="#%e8%b6%a3%e5%91%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>PS5ではモンハンやったり、デススト2を100時間くらいやったり、サイレントヒルfをビビりながらやったりしている。 Switch2も購入し、カービィのエアライダーで遊んでいる。</p> <p>スニーカーに興味を持ち、asicsのGEL NIMBUSをプレゼントしてもらった。</p> <h2 id="人間関係"> 人間関係 <a class="heading-link" href="#%e4%ba%ba%e9%96%93%e9%96%a2%e4%bf%82"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>彼女と1年間楽しく過ごした。</p> <p>スノボ行ったり、和歌山旅行や広島旅行に行ったり。</p> <h2 id="バイク"> バイク <a class="heading-link" href="#%e3%83%90%e3%82%a4%e3%82%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>SEFRとSSTRに行ったぐらい? 今年はあまりツーリングに行かなかった。</p> <p>山道でこけてバイクの右半分がズタボロになってしまった。</p> 「スクラムの拡張による組織づくり」読了 https://t45k.github.io/blog/scrum_at_scale/ Thu, 18 Dec 2025 23:13:07 +0900 https://t45k.github.io/blog/scrum_at_scale/ <p>だいくしーさんの「スクラムの拡張による組織づくり」という本を読みました。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17564885%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=21009932&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F6611%2F9784297136611_1_3.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17564885%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">スクラムの拡張による組織づくり──複数のスクラムチームをScrum@Scaleで運用する [ 粕谷 大輔 ]</a><br><span >価格:2,860円(税込、送料無料)</span> <span style="color:#BBB">(2025/12/18時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17564885%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17564885%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>僕たちのチームもScrum@Scaleを導入しようとした経緯があり、興味があって読んでみました。</p> <p>ただ単にScrum@Scaleを紹介するだけにとどまらず、大規模スクラムを導入する難しさや、実践した経験などが含まれており、本自体が薄めだったこともあり、楽しく読めました。</p> <p>印象的だったのが、それぞれのスクラムチームが自律して動けることを目的として、あらゆる障害を取り除けるように、EATにCEOや人事部長なども含めるという話で、実践するのは難しそうだなと感じました。</p> <p>また、本書では頻繁にチームトポロジーについて触れられており、機会があれば読んでみたいと思いました。</p> 「なぜ依存を注入するのか DIの原理・原則とパターン」読了 https://t45k.github.io/blog/di/ Sun, 09 Nov 2025 21:59:43 +0900 https://t45k.github.io/blog/di/ <p>「なぜ依存を注入するのか DIの原理・原則とパターン」を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17845616%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=21242123&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F3062%2F9784839983062_1_5.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17845616%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">なぜ依存を注入するのか DIの原理・原則とパターン (Compass Booksシリーズ) [ Steven van Deursen ]</a><br><span >価格:4,796円(税込、送料無料)</span> <span style="color:#BBB">(2025/11/9時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17845616%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17845616%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>タイトルにDIとあるので、DIコンテナの話をずっとするのかと思いきや、疎結合な設計や依存性逆転の原則の話から始まり、コンストラクタのベストプラクティスやオブジェクトのライフサイクル管理など、依存性注入に関するさまざまなトピックを扱っていた。</p> <p>かなり分厚い本だったので、ところどころ飛ばし飛ばしに読んだが、特に参考になったのは次の点だった。 コンストラクタ引数が多いときにそれらをまとめたFacadeを作成すると、それが隠れたドメイン知識として抽出される可能性があること。 もう一つは、DRY原則が知識の重複を防ぐ原則であり、同じロジックが複数箇所に散らばっているとどれが正しいのか分からなくなるのがつらい(ドキュメントも同様)という点である。</p> <p>読むのに結構時間がかかったが、本の内容自体は多岐にわたるため、面白く読めた。 C#を使っているとさらに面白いかもしれない。</p> Kotlin Fest 2025に参加・登壇した話 https://t45k.github.io/blog/kotlin_fest_2025/ Sun, 02 Nov 2025 20:28:45 +0900 https://t45k.github.io/blog/kotlin_fest_2025/ <p>今年もKotlin Festに参加してきました。</p> <h2 id="kotlin-fest"> Kotlin Fest <a class="heading-link" href="#kotlin-fest"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://2025.kotlinfest.dev/" class="external-link" target="_blank" rel="noopener">https://2025.kotlinfest.dev/</a></p> <p>「Kotlinを愛でる」というキーワードで開催されているカンファレンスです。 国内のKotlinに関するイベントとしては最大級で、今年は24個のセッションで、400人ほどの参加者が集まりました。</p> <p>今年も去年に引き続き、運良くプロポーザルが採択されたので、登壇もしてきました(今年もスクリプトを完成させないまま発表に臨むはめになりました)。</p> <h2 id="登壇内容"> 登壇内容 <a class="heading-link" href="#%e7%99%bb%e5%a3%87%e5%86%85%e5%ae%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://2025.kotlinfest.dev/timetable/1719031800_a/" class="external-link" target="_blank" rel="noopener">「デッドコード消せてますか? - 構文解析とGradleプラグイン開発で始めるコードベース改善」</a> というタイトルで発表しました。</p> <iframe class="speakerdeck-iframe" frameborder="0" src="https://speakerdeck.com/player/2368e468ac424569b53f38045ac19e7f" title="デッドコード消せてますか?構文解析とGradleプラグイン開発で始めるコードベース改善" allowfullscreen="true" style="border: 0px; background: padding-box padding-box rgba(0, 0, 0, 0.1); margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 100%; height: auto; aspect-ratio: 560 / 315;" data-ratio="1.7777777777777777"></iframe> <p>フィーチャーフラグを用いた開発において、リリース後に不要になったフィーチャーフラグと、それによって発生するデッドコードを削除する作業が必要になります。</p> <p>今回は、そういったコードを自動で消すために、構文解析と自作のGradleプラグインを利用する方法を紹介しました。</p> <p>発表後は、共感しやすい内容だったからか、ask the speakerセッションに多くの方に来ていただけました。</p> <p>多くの方がフィーチャーフラグ管理に悩んでいるんだなと実感でき、<a href="https://github.com/T45K/feature-flag-remover" class="external-link" target="_blank" rel="noopener">公開しているOSS</a>を使ってもらえると嬉しいかも&hellip;と思ったりしました。</p> <p>ちなみに、もう一つ<a href="https://fortee.jp/kotlin-fest-2025/proposal/bb11a90a-1b93-4814-8e32-3f1e5f7779ce" class="external-link" target="_blank" rel="noopener">ネタっぽいプロポーザル</a>も投げていたのですが、それは不採択となってしまいました。</p> <h2 id="聴講したセッション"> 聴講したセッション <a class="heading-link" href="#%e8%81%b4%e8%ac%9b%e3%81%97%e3%81%9f%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="招待セッションkotlinを支える技術言語設計と縁の下の力持ち"> <a href="https://2025.kotlinfest.dev/timetable/1719021000_a/" class="external-link" target="_blank" rel="noopener">【招待セッション】Kotlinを支える技術:言語設計と縁の下の力持ち</a> <a class="heading-link" href="#%e6%8b%9b%e5%be%85%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3kotlin%e3%82%92%e6%94%af%e3%81%88%e3%82%8b%e6%8a%80%e8%a1%93%e8%a8%80%e8%aa%9e%e8%a8%ad%e8%a8%88%e3%81%a8%e7%b8%81%e3%81%ae%e4%b8%8b%e3%81%ae%e5%8a%9b%e6%8c%81%e3%81%a1"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>JetBrainsでAnalysis APIの開発をしているヤンさんのセッションでした。</p> スクラムフェス大阪2025に参加してきた https://t45k.github.io/blog/scrum_fest_osaka_2025/ Sat, 02 Aug 2025 22:36:24 +0900 https://t45k.github.io/blog/scrum_fest_osaka_2025/ <p><a href="https://www.scrumosaka.org/" class="external-link" target="_blank" rel="noopener">スクラムフェス大阪</a>に初参加してきました。</p> <p>2日開催(7/18金、7/19土)だったのですが、出張の都合で金曜は参加できず(オープニングノート面白かったらしい)、 疲れの影響で土曜のクロージンノートと懇親会にも参加できませんでした。</p> <p>聴講した感想はこちら。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">バックログから始めるカイゼン生活見ます<a href="https://twitter.com/hashtag/scrumosaka?src=hash&amp;ref_src=twsrc%5Etfw">#scrumosaka</a></p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1946381720019931354?ref_src=twsrc%5Etfw">July 19, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Bliklから学ぶアジャイルソフトウェア開発の考え方<br>見る<a href="https://twitter.com/hashtag/scrumosaka?src=hash&amp;ref_src=twsrc%5Etfw">#scrumosaka</a></p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1946389768360939825?ref_src=twsrc%5Etfw">July 19, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">マネジメントは怖くない?<br>見る<a href="https://twitter.com/hashtag/scrumosaka?src=hash&amp;ref_src=twsrc%5Etfw">#scrumosaka</a></p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1946427550588424240?ref_src=twsrc%5Etfw">July 19, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>「人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?」というセッションも聴講したのですが、眠気の限界でメモを取れていませんでした&hellip;</p> <p>どのセッションも非常に興味深く、また来年も参加したいなと思いました。</p> <p>会社のブログは<a href="https://moneyforward-dev.jp/entry/2025/07/23/113127" class="external-link" target="_blank" rel="noopener">こちら</a></p> 「関数型デザイン」読了 https://t45k.github.io/blog/functional_design/ Thu, 05 Jun 2025 23:30:27 +0900 https://t45k.github.io/blog/functional_design/ <p>ボブおじの新作「関数型デザイン」を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17854386%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=21249977&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F1151%2F9784048931151_1_4.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17854386%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">関数型デザイン 原則、パターン、実践 [ Robert C.Martin ]</a><br><span >価格:4,180円(税込、送料無料)</span> <span style="color:#BBB">(2025/6/5時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17854386%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17854386%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>ボブおじはClean Architectureなどから分かる通り、これまでオブジェクト指向言語をメインにしていたが、 今回はこれまでオブジェクト指向言語で紹介していた原則、テクニックをClojureに置き換えた場合にどうなるか、について説明している。 これを通して、関数型言語が実用に耐えうるものだと説いていた。</p> <p>いくつかのトピックに対して、OOPでFPでのコード例を並べて、FPでうまくいく例、いかない例を紹介しており参考になった。</p> <p>また、OOPの基本原則であるSOLIDが、FPだとどうなるかを説明していて、根底にあるソフトウェア設計の理解に繋がった。</p> <p>悲しいことにClojureの文法をあまり理解できなかったためコード例をほとんど読み飛ばすことになってしまった。 Clojureをどこかで入門したいなと思った。</p> SEFRとSSTRに参加した話2025 https://t45k.github.io/blog/sstr_2025/ Sun, 01 Jun 2025 00:00:00 +0900 https://t45k.github.io/blog/sstr_2025/ <p>2025年の<a href="https://sefr.jp/" class="external-link" target="_blank" rel="noopener">SEFR</a>と<a href="https://sstr.jp/" class="external-link" target="_blank" rel="noopener">SSTR</a>に参加しました。</p> <p>2024年は<a href="https://t45k.github.io/blog/sstr_2024/" >こちら</a></p> <h2 id="sefrとは"> SEFRとは <a class="heading-link" href="#sefr%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>SEFRは</p> <ul> <li>Setouchi 瀬戸内</li> <li>Environmental Conservation 環境保全</li> <li>Free-Sprint 自由気ままに</li> <li>Rally ラリー</li> </ul> <p>の略で、瀬戸内海周辺の決められたポイントのうち、</p> <ul> <li>本州から4箇所以上</li> <li>四国から4箇所以上</li> <li>九州から4箇所以上</li> </ul> <p>のうち最低2つを達成するツーリングイベントです。</p> <p>2日間かけられるので、ゆっくり回ることができます。</p> <p>本来であれば、5/17, 18を使って会社の同僚の方と回る予定だったのですが、 雨だったので自分は断念し、代わりに水曜午後と木曜午前で回りました。</p> <p>ルートは以下の通りです。</p> <ul> <li>アジュール舞子 兵庫</li> <li>高砂海浜公園 兵庫</li> <li>道の駅アリストぬまくま 広島</li> <li>阿伏兎観音 広島</li> <li>道の駅多々良しまなみ公園 愛媛</li> <li>道の駅伯方S・Cパーク 愛媛</li> <li>道の駅 今治湯の浦温泉 愛媛</li> <li>寒川豊岡海浜公園 愛媛</li> </ul> <p>しまなみ海道を通ったのですが、かなり突貫であまり時間をかけられなかったので、 次回はきちんと時間をかけてそれぞれの島を見てまわりたいなと思いました。</p> <p><img src="https://t45k.github.io/img/blog/sstr_2025/sefr.jpg" alt="sefr"></p> <h2 id="sstr"> SSTR <a class="heading-link" href="#sstr"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>5/31で実施しました。</p> <p>当日は寝坊してしまい、ゆっくり目のスタートでした。</p> <p>今回は滋賀で湖東道路を使ったため、いくつか道の駅に寄れました。</p> <p>当日北陸は雨だったのですが、大阪の天気しか確認しておらず、 薄着だったので非常に辛かったです。</p> <p>来年は能登の方をしっかり周りたいと思いました。</p> <p><img src="https://t45k.github.io/img/blog/sstr_2025/sstr.JPG" alt="sstr"></p> 「オブジェクト設計スタイルガイド」読了 https://t45k.github.io/blog/object_design_style_guide/ Wed, 02 Apr 2025 23:28:26 +0900 https://t45k.github.io/blog/object_design_style_guide/ <p>オグジェクト設計スタイルガイドを読みました。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17511069%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=20965144&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F0331%2F9784814400331_1_3.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17511069%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">オブジェクト設計スタイルガイド [ Matthias Noback ]</a><br><span >価格:3,520円(税込、送料無料)</span> <span style="color:#BBB">(2025/4/2時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17511069%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17511069%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>オブジェクト指向言語を用いたアプリケーション開発(主にサーバーサイド)の設計について本でした。</p> <p>オブジェクトの種類を大きくサービスとその他に分け、サービスをシングルトンでイミュータブルにする、 その他では不変状態を表明するなど実践的な設計方針が書かれていて良いなと感じました。</p> <p>また、この手の本には珍しく、イベントリスナーを用いたイベントディスパッチについての記述が豊富にあり、 勉強になりました。</p> <p>最後の方にはDDDとの用語についての説明があるので、そのままDDDに繋げることができそうだなと感じました。</p> <p>処理失敗時に例外を投げるなど、一部個人の嗜好にそぐわない部分もありましたが、 全体的に現代的なサーバーサイド設計の参考になり、良いなと思いました。</p> 2024年の振り返り https://t45k.github.io/blog/retrospective_2024/ Tue, 31 Dec 2024 18:09:05 +0900 https://t45k.github.io/blog/retrospective_2024/ <p>2024年を振り返る。</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>リーダーという役職に就いた。</p> <p>メンバーとの関わりやプロジェクトの進め方に悩んだ一年だったが、良い感じに終われて良かった。</p> <p>外部登壇や執筆活動にも積極的に関われた。</p> <h2 id="仕事"> 仕事 <a class="heading-link" href="#%e4%bb%95%e4%ba%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="1月--3月"> 1月 &ndash; 3月 <a class="heading-link" href="#1%e6%9c%88--3%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>1月、2月とちょっと大きめなインシデントが発生してしまい疲弊していた。</p> <p>次のEpicに向けてチームメンバーで集まって議論する会を設けてもらって、体験が良かった。</p> <p>インシデントから学んだことを<a href="https://moneyforward-dev.jp/entry/2024/03/28/185934" class="external-link" target="_blank" rel="noopener">ブログ</a>に書いたら、予想以上に盛り上がってしまい、 はてブのコメント欄を見れない状態が続いた。</p> <p>登壇周りは<a href="https://moneyforward.connpass.com/event/305769/" class="external-link" target="_blank" rel="noopener">ゆめみさんとのイベント</a>で対談した。</p> <h3 id="4月--6月"> 4月 &ndash; 6月 <a class="heading-link" href="#4%e6%9c%88--6%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>ベトナムにも開発チームがあるということで、ベトナムに出張に行っていた。 物価の安さやビールの美味しさにびっくりしつつ、人生初ベトナムを満喫した。</p> <p>Kotlin Festに投げたプロポーザルが採択されて、大きめのカンファレンスに登壇できた。 (登壇は当日まで資料が完成しなかった)</p> <p>技術書典で執筆したり。</p> <p>登壇周りはKyoto Tech Talkでブログのネタを喋った。</p> <p>トラペジウムからは大切なことを学んだ。</p> <h3 id="7月--9月"> 7月 &ndash; 9月 <a class="heading-link" href="#7%e6%9c%88--9%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>8月からリーダーに任命されて、しばらくこれと格闘していた。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">マネージメント始めたての人が「俺がやった方が早い」と感じてしまう現象って何か名前ついてますか</p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1828031675261223122?ref_src=twsrc%5Etfw">August 26, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>実装中のEpicの進捗が良かったので早めにリリースしたら周りがびっくりしてた思い出。</p> <p>デブサミ関西に同僚が登壇するので、みんなで応援に行った。</p> <h3 id="10月--12月"> 10月 &ndash; 12月 <a class="heading-link" href="#10%e6%9c%88--12%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>新しいEpicが始まったけど、これもぬるっと開発できている。</p> <p>年内2度目の技術書典寄稿。</p> <h2 id="趣味"> 趣味 <a class="heading-link" href="#%e8%b6%a3%e5%91%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>PS5を購入して、細々と遊んでいる。</p> 「エンジニアリングマネージャーのしごと」読了 https://t45k.github.io/blog/become_an_effective_software_engineering_manager/ Thu, 26 Dec 2024 23:14:11 +0900 https://t45k.github.io/blog/become_an_effective_software_engineering_manager/ <p>EM本を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17214109%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=20715820&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F9946%2F9784873119946_1_2.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17214109%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">エンジニアリングマネージャーのしごと チームが必要とするマネージャーになる方法 [ James Stanier ]</a><br><span >価格:3,740円(税込、送料無料)</span> <span style="color:#BBB">(2024/12/26時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17214109%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17214109%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>最近、ぼんやりとEMになることを意識する時間が増えてきている(EMを経由して最終的にはICに戻ってきたい)。 その折、自分のマネージャーが他のマネージャーとこの本の輪読をするという話を聞いたので、そこに混ぜさせてもらった。</p> <p>EMの仕事内容について網羅的に書かれており、何かしらを経験した後に読み返すと、 おそらく「分かるわぁ」という感情になるんだろうなぁという内容だった。</p> <p>やはり人との関わり方や委譲について書かれていたが、 他にも評価や採用などについても書かれおり、今後参考になりそうだな、と感じた。</p> <p>本の内容とは関係ないのだが、読んでいる途中での気づきをTwitterとかに流すと、後で見返しやすくて便利そう。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">EMの仕事本読んでる<br>コントロールできないものは外部ゴールとしておいて、そこに対する自分のアプローチを内部ゴールとして設定する。なるほど</p>&mdash; task@簿記2級アドカレ (@getupmax) <a href="https://twitter.com/getupmax/status/1857648205862941088?ref_src=twsrc%5Etfw">November 16, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> Ninja 250 SLからNinja ZX-11に乗り換えた話 https://t45k.github.io/blog/zx-11/ Sun, 15 Dec 2024 00:00:00 +0900 https://t45k.github.io/blog/zx-11/ <p>7年乗ったNinja 250SLからNinja ZX-11に乗り換えたので色々残しておきます。</p> <h2 id="ninja-250sl"> Ninja 250SL <a class="heading-link" href="#ninja-250sl"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>学生のときにバイクの免許を取ったので、4回生になる前の2018年1月にこのバイクを買いました。</p> <p>買った理由はシンプルに値段が安かったというのが大きかったのですが、 他にも軽量さ(SLはSuper Lightの略で、150kgを切っている)、カラーリング、極端な前傾姿勢、 初心者向けではないという折り込みが気に入りました。</p> <p>2024年11月までの7年弱で、本当にいろんなところに行った記憶があります。</p> <p>友達と行った潮岬ツーリング(3月にテント泊で、寒すぎて全然寝られなかった)、 コロナ禍での西日本ツーリング、前職退職前の有休消化中に行った東日本ツーリング、 佐賀ツーリング(帰りに雪に遭い、除雪剤で足回りがボロボロになった)、SSTRあたりが特に思い出深いです。</p> <p><img src="https://t45k.github.io/img/blog/zx-11/chirihama.JPG" alt="千里浜"></p> <p>他には、M2の卒業前が通学メインで使っていたことなども覚えています。</p> <p>僕はどちらかというと鈍臭い方なので、たくさん立ちごけして、最後の方法はカウルが割れたりとボロボロでした&hellip; (いたずらにあって色々壊されたのも大きい)</p> <h2 id="ninja-zx-11"> Ninja ZX-11 <a class="heading-link" href="#ninja-zx-11"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やはりバイクに乗っている以上、一度は大型、特にフラッグシップなバイクを所有したいという思いがあったため、 たまたま見つけたZX-11を購入するに至りました。</p> <p>ZX-11は国内ではZZR-1100という名前で、1990年代のバイク業界を席巻したスーパーバイクです。</p> <p><img src="https://t45k.github.io/img/blog/zx-11/toyosato.jpg" alt="けいおんの聖地"></p> <p>やはりリッターバイクということで、高速でも追い越しを簡単にできるほどの加速力があって、乗ってて楽しいです。 排気音も好きな部類です。</p> <p>一方で、欠点として、前々から言われていましたが。</p> <ul> <li>押すと重い。駐輪時に辛い</li> <li>低速での旋回も苦手。早速立ちごけしました</li> <li>クラッチ、シフターが重い</li> <li>制動距離が長い</li> <li>エンジンが古いので排ガスが臭い</li> <li>エンジンの熱がすごい</li> </ul> <p>という感じでした。</p> <p>総合的には満足しているので、いっぱい乗っていきたいと思います。</p> 出社したからには飲み会したいよねという話 https://t45k.github.io/blog/seventh_house/ Wed, 04 Dec 2024 00:00:00 +0900 https://t45k.github.io/blog/seventh_house/ <p>これは<a href="https://adventar.org/calendars/10018" class="external-link" target="_blank" rel="noopener">Money Forward 拠点混合美味しい店 Advent Calendar 2024</a>4日目の記事です。 前日は<a href="https://luccafort.hatenablog.com/entry/2024/12/03/000000" class="external-link" target="_blank" rel="noopener">luccafortさんの記事</a>でした。</p> <p>僕は普段マネーフォワード大阪開発拠点に勤務しているので、その周辺の話をします。</p> <p>2024年12月現在、マネーフォワード大阪開発拠点は<a href="https://maps.app.goo.gl/r2X61CqjxcNqhbUw9" class="external-link" target="_blank" rel="noopener">WeWork 淀屋橋フロンティア</a>にあります。</p> <p><img src="https://t45k.github.io/img/blog/seventh_house/location.png" alt=""></p> <p>梅田と北新地のちょうど中間地点あたりに位置しており、目の前に<a href="https://ja.wikipedia.org/wiki/%E5%A4%A7%E9%98%AA%E9%A7%85%E5%89%8D%E3%83%93%E3%83%AB" class="external-link" target="_blank" rel="noopener">大阪駅前ビル</a>があることから、安い居酒屋の選択肢が特に豊富です。</p> <p>さて、アドカレのレギュレーションを確認しますと</p> <blockquote> <p>各拠点のマネーフォワード社員が、出社したら食べたいお店を紹介する</p> </blockquote> <p>とあります。</p> <p>マネーフォワードは現在週2日の出社日を設けているのですが、やはり出社日の醍醐味といえばチームメンバーと直接会話すること、そして業務終了後に飲み会をすることですよね。</p> <p>ということで今回は、「出社したら行きたいお店」として、僕たちのチーム行きつけの「七つ家」について紹介します。</p> <p><a href="https://maps.app.goo.gl/VJXXYmh6TDvNREE47" class="external-link" target="_blank" rel="noopener">地図</a> <a href="https://tabelog.com/osaka/A2701/A270101/27096379/" class="external-link" target="_blank" rel="noopener">食べログ</a></p> <p>いわゆる鶏料理居酒屋なのですが、驚かされるポイントがいくつかあります。</p> <h2 id="お通しが鶏の肉寿司"> お通しが鶏の肉寿司 <a class="heading-link" href="#%e3%81%8a%e9%80%9a%e3%81%97%e3%81%8c%e9%b6%8f%e3%81%ae%e8%82%89%e5%af%bf%e5%8f%b8"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><img src="https://t45k.github.io/img/blog/seventh_house/nikuzushi.png" alt=""></p> <p>まず、入店一番で鶏の肉寿司が出てきます<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。 普通お通しというと枝豆や煮物が出てくるため、この時点で(良い意味で)びっくりさせられます。 もちろん味も美味しいです。</p> <h2 id="種類豊富な鶏料理"> 種類豊富な鶏料理 <a class="heading-link" href="#%e7%a8%ae%e9%a1%9e%e8%b1%8a%e5%af%8c%e3%81%aa%e9%b6%8f%e6%96%99%e7%90%86"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><img src="https://t45k.github.io/img/blog/seventh_house/momo.png" alt=""></p> <p><img src="https://t45k.github.io/img/blog/seventh_house/tsukune.png" alt=""></p> <p>もちろん、火を通した鶏料理も豊富に提供されます。 王道の鶏もも焼きやつくねはもちろん、各種内臓部位を炙り焼きにしたものもあるので、食べていて飽きることがありません。 そしてめちゃくちゃビールに合います。</p> <h2 id="大阪の地酒地ビール完備"> 大阪の地酒・地ビール完備 <a class="heading-link" href="#%e5%a4%a7%e9%98%aa%e3%81%ae%e5%9c%b0%e9%85%92%e5%9c%b0%e3%83%93%e3%83%bc%e3%83%ab%e5%ae%8c%e5%82%99"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>せっかく大阪に来たので大阪のものを食べたい、というような人にもおすすめです。 日本酒は池田の呉春、ビールは箕面ビールが置いてあり、大阪を堪能できます。</p> <h1 id="終わりに"> 終わりに <a class="heading-link" href="#%e7%b5%82%e3%82%8f%e3%82%8a%e3%81%ab"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h1> <p>今回は僕たちのチーム行きつけの居酒屋を紹介させていただきました。 今回紹介できなかったおすすめの店もたくさんあるので、興味がある方はぜひカジュアル面談でお話ししましょう! (もちろん会社やチームの話でも大歓迎です!)</p> <p><a href="https://hrmos.co/pages/moneyforward/jobs?category=1666323214451404802" class="external-link" target="_blank" rel="noopener">https://hrmos.co/pages/moneyforward/jobs?category=1666323214451404802</a></p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>鶏肉の生食には少なからずリスクがありますので、食べられる際は自己責任でお願いします。&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> 「ソフトウェア開発現場の「失敗」集めてみた」読了 https://t45k.github.io/blog/collect_failures_in_software_development/ Sat, 02 Nov 2024 16:51:20 +0900 https://t45k.github.io/blog/collect_failures_in_software_development/ <p>「ソフトウェア開発現場の「失敗」集めてみた」を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17852417%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=21248375&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F5187%2F9784798185187_1_138.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17852417%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">ソフトウェア開発現場の「失敗」集めてみた。 42の失敗事例で学ぶチーム開発のうまい進めかた [ 出石 聡史 ]</a><br><span >価格:2,420円(税込、送料無料)</span> <span style="color:#BBB">(2024/11/2時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17852417%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17852417%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>キャッチーなタイトルに惹かれて購入したが、 中身は上流からリリース後までのよくある失敗を紹介している、 割としっかりした内容だった。</p> <p>普段は「設計・実装」をやっているので、それ以前の企画や、品質保証、リリース後対応などは 「そんなことがあるのか&hellip;」と驚きに満ちていた。</p> <p>また、一貫して「リリース日に間に合わせるためスコープを削る・バグの優先度を下げる」について言及されており、 これまでは全部やる・全て直すというスタンスに立つことが多かったため、参考になった。</p> SSTRに参加した話 https://t45k.github.io/blog/sstr_2024/ Mon, 14 Oct 2024 21:25:31 +0900 https://t45k.github.io/blog/sstr_2024/ <p>2024年の<a href="https://sstr.jp/" class="external-link" target="_blank" rel="noopener">SSTR</a>に参加しました。</p> <h2 id="sstrとは"> SSTRとは <a class="heading-link" href="#sstr%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>SSTRはサンライズ・サンセット・ツーリング・ラリーの略称です。</p> <p>特定の日の日の出を太平洋側で見て、同じ日の日没を日本海側で見るというイベントです。</p> <p>レギュレーション上は、日の出を日本海側とは反対側の任意の海岸で見て、 運営が指定した場所(PA・SAや道の駅など)をいくつか経由しつつ、 日没までに石川県の千里浜海岸に到着すればOKです。</p> <p>今年は、年初の能登半島地震を受けて、能登の復興をテーマを掲げていました。</p> <h2 id="ルート"> ルート <a class="heading-link" href="#%e3%83%ab%e3%83%bc%e3%83%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>会社の同僚3人と参加しました。</p> <p>大阪湾の夢洲出発で、高速で石川まで向かい、 そこから下道で道の駅をいくつか回りながら千里浜を向かうルートを取りました。</p> <p>最終的に、以下の7箇所を経由しました</p> <ul> <li>多賀SA</li> <li>尼御前SA</li> <li>道の駅 めぐみ白山</li> <li>道の駅 内灘サンセットパーク</li> <li>道の駅 織姫の里 なかのと</li> <li>道の駅 能登食祭市場</li> <li>道の駅 のとじま</li> </ul> <h3 id="出発の様子"> 出発の様子 <a class="heading-link" href="#%e5%87%ba%e7%99%ba%e3%81%ae%e6%a7%98%e5%ad%90"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p><img src="https://t45k.github.io/img/blog/sstr/start.jpg" alt=""></p> <p>朝6時集合なのでとても眠かったです。</p> <h3 id="道中"> 道中 <a class="heading-link" href="#%e9%81%93%e4%b8%ad"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>天気がとても良かったです。</p> <p>昼までは高速を使っていたので、快適に移動できました。</p> <p>石川県では下道でしたが、特に混雑していることもなかったです。</p> <p>全ての道の駅を回った後は高速で千里浜に向かったのですが、とても眠かったです。</p> <h3 id="到着の様子"> 到着の様子 <a class="heading-link" href="#%e5%88%b0%e7%9d%80%e3%81%ae%e6%a7%98%e5%ad%90"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p><img src="https://t45k.github.io/img/blog/sstr/finish.jpg" alt=""></p> <p>その日の参加者は2,000台ほどだったのですが、千里浜に大集合していると流石に壮観でした。</p> <p>たくさんのライダーと同じ感動を分かち合えたと思うと、胸が熱くなりました。</p> <p>宿は小松にとっていたのですが、SSTR帰りと思われる大量のバイクが止まっていました。</p> <p>飲み会では、それぞれのツーリングの話が聞けて楽しかったです。</p> <h2 id="来年の目標"> 来年の目標 <a class="heading-link" href="#%e6%9d%a5%e5%b9%b4%e3%81%ae%e7%9b%ae%e6%a8%99"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>来年も参加しようと思います。</p> <p>来年の目標としては、</p> <ul> <li>日の出を見られる、太平洋側から出発する</li> <li>ルート作成を同僚に任せっきりだったので、自分でも調べる</li> </ul> <p>をやっていきたいです。</p> 「単体テストの考え方/使い方」読了 https://t45k.github.io/blog/unit_testing_principles_practices_and_patterns/ Tue, 06 Aug 2024 22:44:20 +0900 https://t45k.github.io/blog/unit_testing_principles_practices_and_patterns/ <p>単体テストの考え方/使い方を読んだのでその感想。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17341285%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=20818219&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F1723%2F9784839981723_1_5.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17341285%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">単体テストの考え方/使い方 プロジェクトの持続可能な成長を実現するための戦略 [ Vladimir Khorikov ]</a><br><span >価格:4,488円(税込、送料無料)</span> <span style="color:#BBB">(2024/8/6時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17341285%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17341285%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>単体テストを中心に扱った本を読んだのは初めてだったのですが、 単体テストを用いてプロダクションコードを価値あるものにすることについて終始述べられていて良かったです。</p> <p>単体テストは</p> <ul> <li>実行時間が十分に短く</li> <li>かつ、テストの実行は隔離されている(=容易に並列実行できる)</li> </ul> <p>ものとして定義されています。</p> <p>単体テストの実行方式はよくロンドン学派と古典学派に分類され、 後者は積極的にモックを使う、くらいの説明に留められていることが多いのですが、 これに関しても十分な説明がありました。</p> <p>曰く、古典学派は単体の範囲をテストを実行するプロダクションコードの範囲と定め、 それ以外の部分はモックする、 ロンドン学派は単体の範囲をそれぞれのテストと定め、 DBといったテスト間で共有されうる依存に関してのみモックを使う、という定義をされていました。</p> <p>ロンドン学派は単体テストでDBを扱うものだと思っていたので、この定義は初めて知りました。</p> <p>また、テストしやすいアーキテクチャとして、 最初にクエリを行い、最後にコマンドを行う順番を推奨しており、 具体的に関数型アーキテクチャやヘキサゴナルアーキテクチャが紹介されていたのが良かったです。</p> <p>スタブとモックの違いや、スタブ(クエリ)は検証しない、モック(コマンド)はするなどの説明は腹落ちしました。</p> <p>本書では一貫して、</p> <ul> <li>単体テストはリファクタリングに対する耐性を兼ね備えてなければならない</li> <li>そのために、単体テストは振る舞いをテストするべき</li> </ul> <p>を柱にしていたので良かったなと思いました。</p> 「継続的デリバリーのソフトウェア工学」読了 https://t45k.github.io/blog/modern_software_engineering/ Tue, 25 Jun 2024 21:16:17 +0900 https://t45k.github.io/blog/modern_software_engineering/ <p>継続的デリバリーのソフトウェア工学(英題: Modern Software Engineering)を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17370467%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=20843481&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F0367%2F9784296070367_1_3.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17370467%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">継続的デリバリーのソフトウェア工学 もっと早く、もっと良いソフトウェアを作るための秘訣 [ David Farley ]</a><br><span >価格:3,190円(税込、送料無料)</span> <span style="color:#BBB">(2024/6/25時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17370467%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17370467%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <h2 id="ソフトウェア開発"> ソフトウェア開発 <a class="heading-link" href="#%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e9%96%8b%e7%99%ba"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>本書ではソフトウェア開発の効果的かつ効率的な方法を探求していく。</p> <p>より良いソフトウェア開発を行うために、開発者は「学びのエキスパート」かつ 「複雑さ管理のエキスパート」になるべき、と述べている。</p> <p>学びのエキスパートになるためには、実験 → フィードバック → 実験 → &hellip; のループを 高速で回すことが重要になる。</p> <p>複雑さ管理のエキスパートになるためには</p> <ul> <li>モジュラー性</li> <li>抽象化</li> <li>疎結合</li> </ul> <p>の実現が不可欠になる。</p> <p>そして、上記の要素を達成するために</p> <ul> <li>テスト可能性</li> <li>デプロイ可能性</li> <li>スピード</li> <li>変数の管理</li> <li>継続的デリバリー</li> </ul> <p>が重要になる。</p> <h2 id="ソフトウェア工学"> ソフトウェア工学 <a class="heading-link" href="#%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e5%b7%a5%e5%ad%a6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>本書では、ソフトウェア開発は工学的に行われるべきだと述べられている。</p> <p>これは、いわゆる工芸品のような、職人の一品物ではないということである。<br> また、科学のように厳密性を追求するのではなく、 あくまで開発に役立つプラクティスを追い求めるべき、ということでもある。</p> <p>一方で、建築物のような製造工学に近い物ではなく、設計工学になるべきとも述べられている。</p> <p>ソフトウェア開発が製造工学と違う点は、ソフトウェア開発は繰り返し作り直すことが容易である点である。</p> <p>建築物は一度作ると作り直しが効かないため、事前の設計を念入りにやったうえで開発に入る。</p> Kotlin Fest 2024に参加・登壇した話 https://t45k.github.io/blog/kotlin_fest_2024/ Sun, 23 Jun 2024 22:54:46 +0900 https://t45k.github.io/blog/kotlin_fest_2024/ <p>2024年6月22日に開催されたKotlin Fest 2024に参加・登壇してきました。</p> <h2 id="kotlin-fest"> Kotlin Fest <a class="heading-link" href="#kotlin-fest"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://www.kotlinfest.dev/" class="external-link" target="_blank" rel="noopener">https://www.kotlinfest.dev/</a></p> <p>Kotlin Festは「Kotlinを愛でる」をビジョンに開催されるカンファレンスです。<br> 今回は4回目の開催であり、5年ぶりのオフライン開催になりました。<br> 100以上のプロポーザルがあったことから、国内での注目度が伺えます。</p> <h2 id="登壇内容"> 登壇内容 <a class="heading-link" href="#%e7%99%bb%e5%a3%87%e5%86%85%e5%ae%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>「withContextってスレッド切り替え以外にも使えるって知ってた?」というタイトルで登壇しました。</p> <p><a href="https://fortee.jp/kotlin-fest-2024/proposal/d3105065-ee4e-4a7b-be92-3aae10ab6c01" class="external-link" target="_blank" rel="noopener">https://fortee.jp/kotlin-fest-2024/proposal/d3105065-ee4e-4a7b-be92-3aae10ab6c01</a></p> <p>CoroutineContextとwithContextを活用することで、Kotlinでコンテキスト変数を扱う方法や、 実際の利用例について紹介しました。</p> <p>業務で思いつきでやったことが、こうやって登壇機会にまで結びついて良かったな、という感想です。</p> <p>「知らなかった」「勉強になった」などの感想をいただけ、励みになりました。</p> <p>一方で、自身の登壇の仕方には反省すべき点がいくつかあったなと思っています。</p> <p>一番はタイムマネージメントが全然できておらず、最終的に時間が足りなくなってしまったことです。</p> <p>次回このような機会があれば、資料作成を早めに終わらせ、発表練習に時間を割きたいです。</p> <p>スライドは<a href="https://speakerdeck.com/t45k/withcontexttutesuretudoqie-riti-eyi-wai-nimoshi-erututezhi-tuteta" class="external-link" target="_blank" rel="noopener">こちら</a>。</p> <h2 id="セッション内容"> セッション内容 <a class="heading-link" href="#%e3%82%bb%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e5%86%85%e5%ae%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>今回様々なセッションを聴講しましたので、それぞれについて軽く感想を書きたいと思います。</p> <h3 id="kotlinconf-2024-を後から256倍楽しむためのヒント"> KotlinConf 2024 を後から256倍楽しむためのヒント <a class="heading-link" href="#kotlinconf-2024-%e3%82%92%e5%be%8c%e3%81%8b%e3%82%89256%e5%80%8d%e6%a5%bd%e3%81%97%e3%82%80%e3%81%9f%e3%82%81%e3%81%ae%e3%83%92%e3%83%b3%e3%83%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>JetBrainsの堀岡さんの招待セッションです。</p> <p>少し前に開催されたKotlin Confのサマリや、そもそもどうやって海外カンファレンスを楽しむか、 要約するかについて紹介していただきました。</p> <p>Kotlin Confはビデオが提供されていて、全ては見れていないのですが、 タイトル一覧を紹介していただき、中には興味深いものがあったので、 あとで確認しようと思いました。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Server-Side Kotlin Meetupもよろしくお願いします! <a href="https://twitter.com/hashtag/kotlinfest?src=hash&amp;ref_src=twsrc%5Etfw">#kotlinfest</a></p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1804336555613659642?ref_src=twsrc%5Etfw">June 22, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h3 id="kotlinで愉しむクリエイティブコーディング"> Kotlinで愉しむクリエイティブコーディング <a class="heading-link" href="#kotlin%e3%81%a7%e6%84%89%e3%81%97%e3%82%80%e3%82%af%e3%83%aa%e3%82%a8%e3%82%a4%e3%83%86%e3%82%a3%e3%83%96%e3%82%b3%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>畠山さんのセッションです。</p> <p>クリエイティブコーディングについて何も知らなかったのですが、 コーディングで作曲や絵を描いたりする行為だそうです。</p> <p>今回は、Kotlinで書かれたOPENRNDRというライブラリを使ってのクリエイティブコーディングを 紹介いただけました。</p> <p>コードに書いた通りに、一定の規則を持って物体が移動することで面白い絵や動画が完成していき、 とても興味深かったです。</p> 「データモデリングでドメインを駆動する」読了 https://t45k.github.io/blog/drive_domain_by_data_modeling/ Thu, 23 May 2024 00:48:17 +0900 https://t45k.github.io/blog/drive_domain_by_data_modeling/ <p>杉本さん著の「データモデリングでドメインを駆動する」を読んだ。</p> <p>サブタイトルとして「基幹系システム」が含まれているが、 そもそも基幹系システムが何か分からない状態で読み始めたので、 そこからキャッチアップできて良かった。</p> <p>(基幹系システムは、本当にビジネスを回すための一点もの?のシステムなんだなぁという理解)</p> <p>他の技術書と違って、ビジネスそのものに突っ込んだ内容が多いのが面白かった。</p> <p>「残」の話や、そこを起点に非同期なシステム構築などは、CQRSに通じるところがあるかもと思いながら読んでた。 その他、SoAとSoMの話など。</p> <p>特定のドメインに着目して、ビジネス理解からそれを設計に繋げる方法までを書いた本は初めてだったので新鮮で良かった。</p> <p>(難しい部分は読み飛ばしたので浅い感想しか出て来ないのが残念)</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17739280%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=21152713&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F0106%2F9784297140106_1_3.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17739280%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">データモデリングでドメインを駆動する──分散/疎結合な基幹系システムに向けて [ 杉本 啓 ]</a><br><span >価格:3,740円(税込、送料無料)</span> <span style="color:#BBB">(2024/5/23時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17739280%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17739280%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> ベトナムに出張に行った話 https://t45k.github.io/blog/vietnam/ Sun, 28 Apr 2024 17:27:26 +0900 https://t45k.github.io/blog/vietnam/ <p>現在勤めている会社のグループ会社がベトナムにあり、 10日ほど出張で行かせてもらったので、感想を書き留めておく。</p> <h2 id="気候"> 気候 <a class="heading-link" href="#%e6%b0%97%e5%80%99"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>4月の時点で30℃越えで暑かった。 今回行ったのが、ベトナム北部のハノイなので気温はまだマシ(冬場は10℃台になる)らしいが、 南部のホーチミンは常に暑いらしい。</p> <p>一方で常に曇り(もしくは大気汚染の影響)で、直射日光に当たることはあまりなかった。</p> <h2 id="交通"> 交通 <a class="heading-link" href="#%e4%ba%a4%e9%80%9a"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>公共交通機関があまり発達していないので、移動は主にGrab(東南アジアのUber)を利用した。</p> <p>噂に聞いていた通り、交通量、特にバイクの数がすごく多く、 さらに交通ルールを守らない(信号無視、逆走、歩行者通行中の走行)車両が多かったため、 普通に歩くのも一苦労だった。</p> <p>到着した時は「命がいくつあっても足りないな」と思った。</p> <h2 id="食事"> 食事 <a class="heading-link" href="#%e9%a3%9f%e4%ba%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>全体的にあっさりした味付けのものが多かったと思う。</p> <p>米食中心の食文化であり、特に米粉から作られた麺料理を多く食べた。</p> <figure><img src="https://t45k.github.io/img/blog/vietnam/pho.jpg" alt="言わずと知れたフォー" width="50%" height="50%"><figcaption> <p>言わずと知れたフォー</p> </figcaption> </figure> <figure><img src="https://t45k.github.io/img/blog/vietnam/bun_cha.jpg" alt="つけ麺のブンチャー" width="50%" height="50%"><figcaption> <p>つけ麺のブンチャー</p> </figcaption> </figure> <figure><img src="https://t45k.github.io/img/blog/vietnam/bun_cha_like.jpg" alt="ブンチャーに似た何か" width="50%" height="50%"><figcaption> <p>ブンチャーに似た何か</p> </figcaption> </figure> <figure><img src="https://t45k.github.io/img/blog/vietnam/banh_mi.jpg" alt="サンドイッチのバインミー" width="50%" height="50%"><figcaption> <p>サンドイッチのバインミー</p> </figcaption> </figure> <figure><img src="https://t45k.github.io/img/blog/vietnam/kayu.jpg" alt="謎のホルモン入りお粥" width="50%" height="50%"><figcaption> <p>謎のホルモン入りお粥</p> </figcaption> </figure> <p>どれも美味しい上に安い(50K VND ≒ 300円ほど)。</p> <h3 id="酒"> 酒 <a class="heading-link" href="#%e9%85%92"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>ビールも種類が多い上に安かった(1缶12K VND ≒ 70円ほど)</p> <p>味としては薄いものが多く、暑い日にごくごく飲むのが良さそうという感想だった。</p> <p>氷を入れて飲むことも多いのも特徴的だった。</p> <figure><img src="https://t45k.github.io/img/blog/vietnam/bia_hoi_ha_noi.jpg" alt="ローカルなレストランで飲めるビール。60円くらい。世界で一番安いらしい" width="50%" height="50%"><figcaption> <p>ローカルなレストランで飲めるビール。60円くらい。世界で一番安いらしい</p> </figcaption> </figure> <p>その他、ハウスワインを作っている人も多い。</p> <p>ハウスワインはワインの名を関しているがワインではなく、米焼酎に果物を漬け込んで作る、 梅酒などに近い飲み物。</p> <h3 id="コーヒー"> コーヒー <a class="heading-link" href="#%e3%82%b3%e3%83%bc%e3%83%92%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>ベトナムでもコーヒー文化が根付いていて、食後に飲んでいる人が多かった印象。</p> <p>ベトナムのコーヒーは苦めなので、牛乳と砂糖が入った甘くて飲みやすいものが人気があった。</p> <p>また、エッグコーヒーというのもあり、こちらは新体験だった(本当に卵が入っている)。</p> <figure><img src="https://t45k.github.io/img/blog/vietnam/egg_coffee.jpg" alt="エッグコーヒー" width="50%" height="50%"><figcaption> <p>エッグコーヒー</p> </figcaption> </figure> <h2 id="人々"> 人々 <a class="heading-link" href="#%e4%ba%ba%e3%80%85"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>観測範囲で</p> 佐賀までツーリングした話 https://t45k.github.io/blog/saga_touring/ Sat, 23 Mar 2024 22:00:13 +0900 https://t45k.github.io/blog/saga_touring/ <p>西日本編は<a href="https://t45k.github.io/blog/tour_day1/" >こちら</a><br> 東日本編は<a href="https://t45k.github.io/blog/east_japan_touring/" >こちら</a></p> <p>3/20(水)が祝日だったので、月火で有給を取って佐賀までバイクで行って帰ってきた。</p> <h2 id="一日目"> 一日目 <a class="heading-link" href="#%e4%b8%80%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>3/17(日)</p> <p>ひとまず山口の湯田温泉に向かって出発</p> <p>岡山で途中下車し笠岡ラーメンを食べようとするも、お目当ての店は休みだったため、近所にあった「いではら」に行った。</p> <figure><img src="https://t45k.github.io/img/blog/saga_touring/kasaoka_ramen.jpg" width="50%" height="50%"> </figure> <p>当初そのまま下道で海沿いを通って山口に向かう予定だったが、途中で雨が降ってきたため、予定を変更して高速で移動。</p> <p>宿泊は湯田温泉のホテルで。</p> <p>晩飯はいつものごとく近所のスーパーで買った地の魚を中心に食べる。</p> <p>スーパーに限定の東洋美人があったので、初日なのにお土産に買う。</p> <h2 id="二日目"> 二日目 <a class="heading-link" href="#%e4%ba%8c%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>3/18(月)</p> <p>佐賀に向かう。</p> <p>途中、本州最北端の毘沙ノ鼻に寄る。</p> <figure><img src="https://t45k.github.io/img/blog/saga_touring/bisha_no_hana.jpg" width="50%" height="50%"> </figure> <p>これで本州は西南北の最端を制覇。</p> <p>そのまま高速で佐賀に移動。</p> <p>お昼ご飯は河太郎で呼子のイカを食べる。</p> <figure><img src="https://t45k.github.io/img/blog/saga_touring/yobuko_squid.jpg" width="50%" height="50%"> </figure> <p>このイカ、新鮮で臭みもネチャネチャした食感もなく、肉厚で弾力を甘味を楽しめた。 満足。</p> <p>そのまま嬉野温泉に移動。</p> <p>晩飯は温泉湯豆腐を食べに行く。</p> <figure><img src="https://t45k.github.io/img/blog/saga_touring/onsen_yudofu.jpg" width="50%" height="50%"> </figure> <p>この湯豆腐、美味しんぼで紹介されていて昔から気になっていた。</p> <p>汁にうっすらと味がついており美味しかった。</p> <h2 id="三日目"> 三日目 <a class="heading-link" href="#%e4%b8%89%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>3/19(火)</p> <p>久留米が近かったので、大砲ラーメンを食べに行く。</p> <p>有名店なので開店凸してもしばらく待つかな、と思ったが、開店が10:30と早いこともありすんなり入れる。</p> <figure><img src="https://t45k.github.io/img/blog/saga_touring/kurume_ramen.jpg" width="50%" height="50%"> </figure> <p>しっかり美味しいとんこつラーメンだった。</p> <p>そのまま、関門トンネルを通り山口の長門湯本温泉へ。</p> <p>当初は広島の宮浜温泉に行く予定だったのだが、祝日前ということもあり予約を取り損ねた。</p> <p>温泉地自体は川沿いで風情があり良かった。</p> <figure><img src="https://t45k.github.io/img/blog/saga_touring/nagato_yumoto_onsen.jpg" width="50%" height="50%"> </figure> <p>晩飯はいつものごとく。</p> <h2 id="四日目"> 四日目 <a class="heading-link" href="#%e5%9b%9b%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>3/20(水)</p> <p>この日はこのまま出雲大社に寄ってから帰阪する予定だったが、大幅に予定が狂うことになる。</p> <p>日本海側を通って下道で出雲大社に向かっていたのだが、どうも風が強い。</p> <p>当初台風が来たのかななんて考えていたが、道の駅で休憩している間に天気予報を確認したところ、暴風警報が出ていた。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">やけに風強いな思たらなんやこれ <a href="https://t.co/8XWVpAV4Qp">pic.twitter.com/8XWVpAV4Qp</a></p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1770236255902793929?ref_src=twsrc%5Etfw">March 19, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>そんなこんなで、こまめに休憩しながら出雲に向かった影響で、2時間近く予定から遅れてしまい、昼飯を食べ損ねた。</p> <p>参拝も終わり、お土産も買って大阪に向かって出発したのだが、今度は雪が降ってきて、高速道路がチェーン規制されてしまった。</p> 「仮面ライダー555 パラダイス・リゲインド」を観た話 https://t45k.github.io/blog/555_movie/ Sun, 25 Feb 2024 00:29:15 +0900 https://t45k.github.io/blog/555_movie/ <p>仮面ライダー555の20周年記念劇場版を観た。</p> <p><a href="https://www.toei-video.co.jp/55520th/" class="external-link" target="_blank" rel="noopener">https://www.toei-video.co.jp/55520th/</a></p> <p>以下ネタバレあり感想</p> <h2 id="良かったところ"> 良かったところ <a class="heading-link" href="#%e8%89%af%e3%81%8b%e3%81%a3%e3%81%9f%e3%81%a8%e3%81%93%e3%82%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li>20年ぶりの仮面ライダー555<br> 子供の頃の記憶が蘇った(去年YouTubeでやってた一挙放送は見たが)</li> <li>新ライダーの造形が格好良かった<br> ネクストファイズ、ネクストカイザ、ミューズ</li> <li>古い方のファイズも出てきた</li> <li>歳をとった巧の渋さ</li> <li>真里がオルフェノク化する意外性のある展開</li> <li>海堂がちゃんと海堂だった</li> <li>草加の顔芸</li> </ul> <h2 id="良くなかったところ"> 良くなかったところ <a class="heading-link" href="#%e8%89%af%e3%81%8f%e3%81%aa%e3%81%8b%e3%81%a3%e3%81%9f%e3%81%a8%e3%81%93%e3%82%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li>キャストが歳をとっている<br> 結残念だった。月日の流れは無常</li> <li>北崎、草加がアンドロイドだったという、悪い方に意外性のある展開</li> <li>アンドロイドなのに変身できるという謎</li> <li>謎の濡れ場シーン(?)<br> あれは必要だったのか</li> <li>北崎が出てる以上琢磨も出して欲しかった。あと三原</li> <li>巧が最初スマートブレイン側についていた理由がいまいち不明</li> <li>どうしようもないことだが、やっぱり木場がいないと始まらない感</li> <li>オルフェノクとして匿われているのに、スマートブレインに情報を売る味方</li> </ul> <p>総合的には別に見なくても&hellip;という感想。</p> 2023年の振り返り https://t45k.github.io/blog/retrospective_2023/ Tue, 02 Jan 2024 23:25:57 +0900 https://t45k.github.io/blog/retrospective_2023/ <p>2023年を振り返る。</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>楽天を辞めてマネーフォワードに転職した。</p> <p>マネフォは技術力が高い人が多い環境で、楽しく仕事ができた。</p> <p>チームメンバーとも仲良くできて良い1年間だった。</p> <h2 id="仕事"> 仕事 <a class="heading-link" href="#%e4%bb%95%e4%ba%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="1月--3月"> 1月 &ndash; 3月 <a class="heading-link" href="#1%e6%9c%88--3%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>1月に上の方から、エンジニアも楽天モバイルの契約をとることが必須になったとのお達しが来て、転職を決意する。 ひとまず大阪でバックエンドでKotlinが書ける職種を探していたところ、マネフォが引っかかる。 向こうからカジュ面のお誘いが来たのでやらせてもらい、そのまま面接に進んだ。 ぬるっと内定をもらい、ボーナスの都合で7月からのジョインで着地。</p> <p>一方前職では、内定者アルバイトの子がチームに加わったため、メンターとしても仕事していた。 とても良い子で、すごく仲良くしてもらったこともあり、楽しく過ごす。</p> <h3 id="4月--6月"> 4月 &ndash; 6月 <a class="heading-link" href="#4%e6%9c%88--6%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>上述の件もあり、仲良かった同期や後輩が次々と辞めていく。 内定者アルバイトの子も入社し、6月から配属とのことだったので、面倒を見れるように5月中に有給を使い切る。 お別れ会がめちゃくちゃ多かった期間。</p> <p>JJUGで登壇する。 初外部登壇。</p> <h3 id="7月--9月"> 7月 &ndash; 9月 <a class="heading-link" href="#7%e6%9c%88--9%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>マネフォにジョイン。 コードのレベルや社内の手続きの簡単さにびっくりする。</p> <p>色々新しい技術を触る。キャッチアップの難しさを知る。 ライブラリの都合で上げられていなかったKotlinのバージョンを上げたり、CIのコストを下げたりしていた。</p> <p>9月にメンターの先輩が休職され一人で仕事をすることになったが、ドメインを理解しきれていなかったのでとても苦労した。</p> <p>上司に唆され、サーバサイドKotlin勉強会で登壇する。</p> <h3 id="10月--12月"> 10月 &ndash; 12月 <a class="heading-link" href="#10%e6%9c%88--12%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>ドメインやコード全体が分かってきたので、一人で仕事を進められるようになる。</p> <p>人生初アドカレに参加する。</p> <h2 id="人間関係"> 人間関係 <a class="heading-link" href="#%e4%ba%ba%e9%96%93%e9%96%a2%e4%bf%82"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>転職してしまったが、前職のメンバーとは定期的に飲み会する機会があり、なんだかんだ交流が続いている。</p> <p>現職では、チームメンバーで出社する人が多いため、終業後飲みに行ったり、サウナに行ったりでチームに良い感じに溶け込めた気がする。</p> <h2 id="プログラミング"> プログラミング <a class="heading-link" href="#%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>現職ではSpring WebFluxを使っているので、Kotlin Coroutinや非同期周りの造形が深まった。</p> ノンアルコールビールを飲み比べた話 https://t45k.github.io/blog/non_alcohol_beer/ Mon, 11 Dec 2023 22:59:05 +0900 https://t45k.github.io/blog/non_alcohol_beer/ <p>健康の問題で酒が飲めない期間が続いたので、良さげなノンアルコールビールを5本買って飲み比べてみた。 備忘録。</p> <h2 id="飲み比べ対象"> 飲み比べ対象 <a class="heading-link" href="#%e9%a3%b2%e3%81%bf%e6%af%94%e3%81%b9%e5%af%be%e8%b1%a1"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <img src="https://t45k.github.io/img/blog/non_alcohol_beer.jpg" width="75%"> <p>左からバドワイザー、龍馬1865、ヒューガルデン、Bavaria、NINJA LAGER</p> <h3 id="バドワイザー"> バドワイザー <a class="heading-link" href="#%e3%83%90%e3%83%89%e3%83%af%e3%82%a4%e3%82%b6%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>言わずと知れた有名なビールのノンアルコール版。</p> <p>オリジナルのバドワイザー自体が薄めの軽いビールなのも相まって、かなり味が軽く飲みやすい。</p> <p>本家に近いっちゃ近かった。</p> <h3 id="龍馬1865"> 龍馬1865 <a class="heading-link" href="#%e9%be%8d%e9%a6%ac1865"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>麦芽とホップ(と炭酸)しか使っていないかなり本格派のノンアル。</p> <p>味もかなりビールに近く、飲んでいて満足感があった。</p> <p>プリン体ゼロを明記しているのも健康的に嬉しいところ。</p> <h3 id="ヒューガルデン"> ヒューガルデン <a class="heading-link" href="#%e3%83%92%e3%83%a5%e3%83%bc%e3%82%ac%e3%83%ab%e3%83%87%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>柑橘系の香りなど、オリジナルに近い雰囲気を感じた。</p> <p>原料に液糖が含まれているからかかなり甘く、ビールは苦手だけどジュースは好き、みたいな人も美味しく飲めるかもと思った。</p> <p>ビールとは違う飲み物だなぁという印象。</p> <h3 id="bavaria"> Bavaria <a class="heading-link" href="#bavaria"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>寡聞にして知らないメーカー。オランダ産らしい。</p> <p>龍馬1865と同じく麦芽とホップがメインのビールの原料に近いノンアル。</p> <p>味もビールに近かったが、ノンアルや発泡酒特有の謎の酸味があった。</p> <h3 id="ninja-lager"> NINJA LAGER <a class="heading-link" href="#ninja-lager"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>こちらも麦芽とホップしか使っていない本格派ノンアル。</p> <p>ハラールの認定を受けているのが売りらしい。</p> <p>Bavariaに近い味か。</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ビールに近い原料を使っているものは、ノンアルというか発泡酒というか特有の香りと謎の酸味があった。</p> <p>普段飲んでいるビールはアルコールがあるからこれらを感じないだけなのかも知れないと思った。</p> <p>やはりアルコールがない分飲みごたえは少ないが、満足感はあった。</p> <p>ビールに近いものが飲みたければ龍馬1865、飲みやすく美味しいものが良ければヒューガルデンをおすすめする。</p> 「なっとく!関数型プログラミング」読了 https://t45k.github.io/blog/grokking_functional_programming/ Mon, 09 Oct 2023 23:22:01 +0900 https://t45k.github.io/blog/grokking_functional_programming/ <p>「なっとく!関数型プログラミング」を読んだ。</p> <p>「純粋関数のシグネチャは嘘をつかない」が再三説明されていて良かった。 純粋関数を取り扱ううえで話題になりがちなIO処理なども丁寧に説明されていた。</p> <p>9章の「値としてのストリーム」、10章の「並行プログラム」辺りから内容の厚さが段違いになり、 今回は残念なが読み飛ばさせてもらった。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17537959%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=20987480&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F9803%2F9784798179803_1_35.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;display: block;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17537959%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;">なっとく!関数型プログラミング [ Michał Płachta ]</a><br><span >価格:3,740円(税込、送料無料)</span> <span style="color:#BBB">(2023/10/9時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17537959%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0" ></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17537959%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;"> 楽天で購入 </div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> マネーフォワードに入社した話 https://t45k.github.io/blog/welcome_monery_forward/ Sun, 01 Oct 2023 00:26:09 +0900 https://t45k.github.io/blog/welcome_monery_forward/ <p>2023年7月付で株式会社マネーフォワードに入社しました。</p> <p>試用期間も終わったので色々書きます。</p> <h2 id="マネフォ"> マネフォ <a class="heading-link" href="#%e3%83%9e%e3%83%8d%e3%83%95%e3%82%a9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>「お金を前へ。人生をもっと前へ。」をミッションにしている会社です。</p> <p>一般ユーザ向けの帳簿管理アプリである「マネーフォワードMe」や法人向けバックオフィスSaaSである「マネーフォワードクラウド」を提供しています。</p> <h2 id="なぜマネフォ"> なぜマネフォ <a class="heading-link" href="#%e3%81%aa%e3%81%9c%e3%83%9e%e3%83%8d%e3%83%95%e3%82%a9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>元々、大阪でKotlinを書ける仕事を探していました。</p> <p>その中にマネーフォワードがあったのですが、個人的にマネーフォワードは技術レベルが高く、 自分では通用しない、という考えがあったのでスルーしていました。</p> <p>そんな中で前職で色々あり本格的に転職を考えるのですが、 そのタイミングで真っ先にマネフォがカジュアル面談の声をかけてくださいました。</p> <p>話を聞いてみると、マネフォのMVVCにも共感でき、経験がマッチしそうということで応募し、無事採用に至りました。</p> <h2 id="何してるの"> 何してるの <a class="heading-link" href="#%e4%bd%95%e3%81%97%e3%81%a6%e3%82%8b%e3%81%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://biz.moneyforward.com/consolidated-accounting/" class="external-link" target="_blank" rel="noopener">クラウド連結会計</a>の開発、運用をしています。</p> <p>連結会計という複雑なドメインを理解してコードに書き下していくのが楽しいです。</p> <p>その他、この3ヶ月でCIのコストカット、R2DBCへの移行、および<a href="https://t45k.github.io/blog/server_side_kotlin_meetup_10/" >登壇</a>をしました。</p> <h2 id="マネフォの良いところ悪いところ"> マネフォの良いところ・悪いところ <a class="heading-link" href="#%e3%83%9e%e3%83%8d%e3%83%95%e3%82%a9%e3%81%ae%e8%89%af%e3%81%84%e3%81%a8%e3%81%93%e3%82%8d%e6%82%aa%e3%81%84%e3%81%a8%e3%81%93%e3%82%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>は、カジュアル面談とかで喋れたらな、と思います。</p> サーバーサイドKotlin LT大会 vol.10で登壇した話 https://t45k.github.io/blog/server_side_kotlin_meetup_10/ Sat, 30 Sep 2023 22:25:14 +0900 https://t45k.github.io/blog/server_side_kotlin_meetup_10/ <p>3ヶ月ぶりに登壇しました。 <a href="https://server-side-kotlin-meetup.connpass.com/event/291686/" class="external-link" target="_blank" rel="noopener">https://server-side-kotlin-meetup.connpass.com/event/291686/</a></p> <h2 id="server-side-kotlin-meetup"> Server-Side Kotlin Meetup <a class="heading-link" href="#server-side-kotlin-meetup"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Server-side Kotlin MeetupはサーバサイドKotlinユーザのコミュニティです。</p> <p>前職ではそこまでガッツリKotlinをやっていたわけではなかったので知りませんでした。</p> <p>現職では、上司が運営の一人をしており、LTの15分枠が埋まらなさそうなので応募して欲しい、と頼まれたことがきっかけでした。</p> <p>僕自身も積極的に登壇活動をしたいと思っていたので、良い機会だと思い快諾しました。</p> <h2 id="発表内容"> 発表内容 <a class="heading-link" href="#%e7%99%ba%e8%a1%a8%e5%86%85%e5%ae%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>「R2DBCを導入しようとした話」というタイトルでLTしました。</p> <p><a href="https://speakerdeck.com/t45k/r2dbcwodao-ru-suruhua" class="external-link" target="_blank" rel="noopener">https://speakerdeck.com/t45k/r2dbcwodao-ru-suruhua</a></p> <p>応募時はK2コンパイラをCIで試してみた話をしようとしていたのですが、 タイトル回収締め切りまでにR2DBCへの移行に着手し始め、そっちの方が盛り上がりそうだったのでネタを変えることにしました。</p> <p>様々な詰まりポイントがあるせいで締切までに完了の目処が立たず、タイトルを「しようとした(そしてうまくいかなかった)とした、という経緯がありました。</p> <h2 id="会場"> 会場 <a class="heading-link" href="#%e4%bc%9a%e5%a0%b4"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>UZABASEさんのオフィスにお世話になりました。</p> <p>UZABASEさんはNewsPicksなどの開発をしている会社です。</p> <p>東京駅の真ん前にオフィスがあり、1階はイベントスペースになっているおしゃれなオフィスでした。</p> <h2 id="当日"> 当日 <a class="heading-link" href="#%e5%bd%93%e6%97%a5"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>オフラインイベントで、だいたい30名くらいの方がいたと思います。</p> <p>開始時に乾杯があり、発表前にお酒を飲むという、本当に気楽なイベントでした。</p> <p>他の会社の方々や、同じ会社の違う拠点の方々と交流でき、とても良かったです。</p> <p>ぜひ次回も参加したいと思いました。</p> セミを食べた話 https://t45k.github.io/blog/cicada/ Sun, 06 Aug 2023 13:47:19 +0900 https://t45k.github.io/blog/cicada/ <div style="color:red">虫の画像注意</div> <p>セミを食べたのでレポ。</p> <h2 id="きっかけ"> きっかけ <a class="heading-link" href="#%e3%81%8d%e3%81%a3%e3%81%8b%e3%81%91"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>この辺の記事、動画を読んで興味を持ったから。</p> <ul> <li><a href="https://dailyportalz.jp/kiji/170801200301" class="external-link" target="_blank" rel="noopener">セミはソフトシェルのうちに食うべし - デイリーポータルZ</a></li> <li><a href="https://www.youtube.com/watch?v=yRlI5kPtJUc" class="external-link" target="_blank" rel="noopener">今が旬の超美味しいセミをとって食う - ホモサピ</a></li> </ul> <p>友達にもホモサピのファンがいたため、</p> <ol> <li>セミの幼虫をとって</li> <li>家で羽化させて</li> <li>揚げ物にして食べよう</li> </ol> <p>という話になった。</p> <h2 id="セミ捕り"> セミ捕り <a class="heading-link" href="#%e3%82%bb%e3%83%9f%e6%8d%95%e3%82%8a"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>今回は成虫ではなく幼虫のセミをターゲットにした。</p> <p>一般的にセミの幼虫は夕方から夜にかけて地面から出てきて、木に登り、羽化を行う。</p> <p>なので、夕方頃に集合して近所の森や公園などを歩き回った。</p> <p>結果として、セミの幼虫は全然見つからず、最終的に一人一匹捕まえるに留まった。</p> <p>セミの美味しさに気づいた人達が乱獲しているのかもしれない。</p> <h2 id="羽化"> 羽化 <a class="heading-link" href="#%e7%be%bd%e5%8c%96"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>セミの幼虫をカーテンに引っ掛けておくと勝手に羽化するのは有名な話である。</p> <p>今回は羽化した瞬間のセミを食べることが目的だったので、捕まえた幼虫は全てカーテンに引っ付けておいた。</p> <p>しかし、2時間経っても、片方は羽化途中で完全に停止し、もう片方は羽化すらしていないという状態だった。</p> <p>終電の都合があったので、今回はその状態で調理に入った。</p> <img src="https://t45k.github.io/img/blog/cicada/curtain.jpg" width="50%"> <h2 id="調理"> 調理 <a class="heading-link" href="#%e8%aa%bf%e7%90%86"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>市販の唐揚げ粉を使って唐揚げにした(セミだけでは足りないのが分かっていたので、ついでに鶏の唐揚げを作っていた)。</p> <img src="https://t45k.github.io/img/blog/cicada/flied.jpg" width="50%"> <p>ただ、残念なことに、エビなどと同じく、セミもかなり淡白な味なのか、濃い味付けの唐揚げ粉に負けてしまっている感じがした。</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>「セミを食べる」という貴重な経験をすることはできたが、決して満足がいく内容ではなかった。 次回以降に備えて、以下に注意したいと思う。</p> <ul> <li>事前にセミが取れそうな場所を調査しておく</li> <li>セミ捕りや羽化に時間がかかるため、余裕を持って行動する。終電は諦める</li> <li>セミの味を生かした調理を行う。素揚げが良さそう</li> </ul> 「データ指向プログラミング」読了 https://t45k.github.io/blog/data_oriented_programming/ Sat, 01 Jul 2023 19:17:51 +0900 https://t45k.github.io/blog/data_oriented_programming/ <p>データ指向プログラミングを読んだ。</p> <p>本書では、データ指向プログラミングと名付けられた、イミュータブルかつ汎用的なデータ構造で表現されたデータと 参照透過かつジェネリックな関数を使ったプログラミング方法を紹介している。</p> <p>イミュータブルなデータと参照透過なメソッドを使ったプログラミングは普段から実践しており、 それらを使って柔軟なシステムを構築する方法を紹介している本書にはとても興味があった。 が、内容としてはかなりがっかりした。</p> <p>本書では、データを表現するためにクラスではなくマップを使うことを前提において話が進んでいく。 つまり</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="font-weight:bold">data</span> <span style="font-weight:bold">class</span> <span style="font-weight:bold">Hoge</span>(fuga: Int, piyo: String) </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span><span style="font-weight:bold">val</span> hoge = Hoge(0, <span style="font-style:italic">&#34;&#34;</span>) </span></span></code></pre></div><p>を</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-kotlin" data-lang="kotlin"><span style="display:flex;"><span><span style="font-weight:bold">val</span> hoge = mapOf( </span></span><span style="display:flex;"><span> <span style="font-style:italic">&#34;fuga&#34;</span> to 0, </span></span><span style="display:flex;"><span> <span style="font-style:italic">&#34;piyo&#34;</span> to <span style="font-style:italic">&#34;&#34;</span>, </span></span><span style="display:flex;"><span>) </span></span></code></pre></div><p>で書こうという内容だった。 この方法は確かに柔軟になるかもしれないが、静的型付けによる安全性を完全に無視しており、かなりがっかりした。</p> <p>書籍内でもこのことについて触れられていて、以下のように紹介されていた。</p> <table> <thead> <tr> <th style="text-align: center"></th> <th style="text-align: center">OOP</th> <th style="text-align: center">DOP</th> </tr> </thead> <tbody> <tr> <td style="text-align: center">安全性</td> <td style="text-align: center">高い</td> <td style="text-align: center">低い</td> </tr> <tr> <td style="text-align: center">柔軟性</td> <td style="text-align: center">低い</td> <td style="text-align: center">高い</td> </tr> <tr> <td style="text-align: center">汎用性</td> <td style="text-align: center">低い</td> <td style="text-align: center">高い</td> </tr> </tbody> </table> <p>これは各要素を&quot;高い&quot;、&ldquo;低い&quot;のboolで表現しているDOPが良さそうに見えるだけで、 点数を付けるとDOPの安全性が-5000億くらいでトータだとOOPの方が良さそうだなと感じた (また、表では触れられていないが、フィールドアクセス時に保管が効かないので、コーディング中のストレスがとんでもないことになりそう)。</p> <p>その他の感想:</p> <p>+ JSON Schema便利そう<br> + データの(デ)シリアライズが簡単なので、REPLが使いやすいのは良い<br> + 汎用的な関数を作るという考え方は良さそう</p> <p>- 複雑なJSON Schemaを書こうとすると辛そう。OOPならSpecificationパターンとか使える<br> - 色んなところでJSON Schema Validationが挟まりそう<br> - ポリモーフィズムで、実装忘れを静的に検知できないのが辛い</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17434107%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=20896748&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F9797%2F9784798179797_1_33.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F17434107%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" >データ指向プログラミング [ Yehonathan Sharvit ]</a><br><span >価格:3,960円(税込、送料無料)</span> <span style="color:#BBB">(2023/7/1時点)</span></p> 2年勤めた楽天を退職した話 https://t45k.github.io/blog/farewell_rakuten/ Fri, 30 Jun 2023 00:00:00 +0900 https://t45k.github.io/blog/farewell_rakuten/ <p><img src="https://t45k.github.io/img/blog/rakuten_osaka_office.jpg" alt=""></p> <p>2023年6月末をもって楽天グループ株式会社(大阪支社)を退職する運びとなりました。 2021年4月に新卒として入社したので、2年3ヶ月在籍したことになります。</p> <h2 id="なぜ入社したか"> なぜ入社したか <a class="heading-link" href="#%e3%81%aa%e3%81%9c%e5%85%a5%e7%a4%be%e3%81%97%e3%81%9f%e3%81%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://t45k.github.io/blog/rakuten/" >学生の時に参加したインターン</a>が楽しかったというのが最大の理由です。</p> <p>また、日本最大級のサービスを提供している、英語で仕事できるという点に面白みを感じましたし、 カフェテリアが無料というのも魅力的でした。</p> <h2 id="どんな会社だったか"> どんな会社だったか <a class="heading-link" href="#%e3%81%a9%e3%82%93%e3%81%aa%e4%bc%9a%e7%a4%be%e3%81%a0%e3%81%a3%e3%81%9f%e3%81%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="技術"> 技術 <a class="heading-link" href="#%e6%8a%80%e8%a1%93"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>大小様々なサービスを展開しているので、大規模なサービスで専門的なスキルをつけることも、 比較的小規模なサービスでフロントからインフラまでフルスタックで面倒を見ることも選択できます。</p> <p>新しいサービスが立ち上がることも少なくないので、立ち上げから関わることもできます。</p> <p>また、楽天はプライベートクラウド<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>を持っているため、クラウドの運用側を覗けるのも大企業ならではの面白さではと思います。 パブリッククラウドと比較して格安で使えるので、実際に動かしながらk8sを学ぶこともできます。</p> <h3 id="人材"> 人材 <a class="heading-link" href="#%e4%ba%ba%e6%9d%90"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>多様な国籍の人達と働けます。 外国人と雑談し、お互いのバックグラウンドを理解し合うのは面白かったです。</p> <p>外国人特有の飲み会の騒がしさも好きでした。</p> <h3 id="福利厚生"> 福利厚生 <a class="heading-link" href="#%e7%a6%8f%e5%88%a9%e5%8e%9a%e7%94%9f"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>結構充実していると思います。</p> <p>何といっても、カフェテリアが朝昼晩無料で利用できるのは強いと感じました。</p> <p>また、二子玉川の本社だと、ジムや託児所も備え付けられているそうです。</p> <p>現在、週3回程度の出社が義務付けられていますが、僕は顔を合わせて仕事をするのが好きなので、これは歓迎でした (もちろん、家族や健康などの理由があると出社は免除されます)。</p> <h2 id="何をしたか"> 何をしたか <a class="heading-link" href="#%e4%bd%95%e3%82%92%e3%81%97%e3%81%9f%e3%81%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://car.rakuten.co.jp/" class="external-link" target="_blank" rel="noopener">楽天Car</a>というサービスを担当していました。</p> <p>新機能の実装だけでなく、CIの導入、オンプレからk8sへの移行など幅広くやっていました。</p> <p>その他、<a href="https://commerce-engineer.rakuten.careers/entry/workstyle/0025" class="external-link" target="_blank" rel="noopener">短期インターンのメンター</a>をしたり、 社内LTに参加したり、<a href="https://t45k.github.io/blog/jjug_ccc_2023_spring/" >登壇</a>したりもできました。</p> <p>また、この職場でSpock<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>を知ることができたのはとても良かったです。</p> <h2 id="むすび"> むすび <a class="heading-link" href="#%e3%82%80%e3%81%99%e3%81%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>楽天では良い上司、先輩、同期、後輩に恵まれました。この場を借りてお礼申し上げます。 僕は人間関係の大部分が会社に依存しているので、退職はシンプルに寂しいです。</p> <p>この2年間で幅広くチャレンジさせてもらえて、様々なことを学べました。 ファーストキャリアに楽天を選んで良かったなと思います。</p> <p>次のキャリアでは、エンジニアの実力を伸ばすことに注力できる環境でチャレンジしていきます。</p> <p>最後に、楽天モバイルの成功を心からお祈りしております。</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p><a href="https://xtech.nikkei.com/atcl/nxt/column/18/00001/07478/" class="external-link" target="_blank" rel="noopener">https://xtech.nikkei.com/atcl/nxt/column/18/00001/07478/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> <li id="fn:2"> <p><a href="https://spockframework.org/" class="external-link" target="_blank" rel="noopener">https://spockframework.org/</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> </li> </ol> </div> JJUG CCC 2023 Springで登壇した話 https://t45k.github.io/blog/jjug_ccc_2023_spring/ Mon, 05 Jun 2023 19:48:46 +0900 https://t45k.github.io/blog/jjug_ccc_2023_spring/ <p>2023年6月4日日曜日に開催された<a href="https://sessionize.com/api/v2/y7inyq6y/view/GridSmart" class="external-link" target="_blank" rel="noopener">JJUG CCC 2023 Spring</a>で人生初の登壇をしてきました! めっちゃ緊張した&hellip;</p> <p>写真はもらったノベルティの数々。</p> <img src="https://t45k.github.io/img/blog/jjug_ccc_2023_spring.jpg" height="50%" width="50%"> <h3 id="jjugとは"> JJUGとは <a class="heading-link" href="#jjug%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p><a href="https://t45k.github.io/blog/jjug_ccc_2022_fall/" class="external-link" target="_blank" rel="noopener">https://t45k.github.io/blog/jjug_ccc_2022_fall/</a></p> <h3 id="登壇"> 登壇 <a class="heading-link" href="#%e7%99%bb%e5%a3%87"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>業務改善のためにJenkinsとIntelliJのプラグインを作った話をしました。 JenkinsとIntelliJは共にJavaで作られているので、JJUG CCCの目的に沿ったものだと考えます。</p> <p>当日はミーティングルームABCという狭めの部屋で発表したのですが、その分聴講されている方との距離が近かったと感じました。 発表中に笑いが起きたり、活発に質疑が行えたりして、初めての発表の環境として良かったなぁと思います。</p> <p>登壇資料は、会社のSlideShareに上げてあります。</p> <p><a href="https://www.slideshare.net/rakutentech/jenkinsintellij-idea" class="external-link" target="_blank" rel="noopener">https://www.slideshare.net/rakutentech/jenkinsintellij-idea</a></p> <p>余談ですが、僕の登壇は会社の方には知られていなかったようです。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">俺の登壇、会社に認知されてへんくて草</p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1665175461436215297?ref_src=twsrc%5Etfw">June 4, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h3 id="弊社のブース"> 弊社のブース <a class="heading-link" href="#%e5%bc%8a%e7%a4%be%e3%81%ae%e3%83%96%e3%83%bc%e3%82%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>他の方のセッションを聴講していたので、合間合間に弊社のブースに居座っていました。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こんにちは、楽天採用情報部です。<br>JJUG CCC 2023 Springは本日開催です!<br>本日はブースを出しておりますので現地でお買いものパンダと共にお待ちしております。<br>現地にいらっしゃることができない方は、是非記事をご覧ください。<br> <a href="https://t.co/HXrvahCBs0">https://t.co/HXrvahCBs0</a><a href="https://twitter.com/hashtag/jjug_ccc?src=hash&amp;ref_src=twsrc%5Etfw">#jjug_ccc</a> <a href="https://twitter.com/hashtag/rakuten?src=hash&amp;ref_src=twsrc%5Etfw">#rakuten</a> <a href="https://twitter.com/hashtag/java?src=hash&amp;ref_src=twsrc%5Etfw">#java</a> <a href="https://twitter.com/hashtag/engineer?src=hash&amp;ref_src=twsrc%5Etfw">#engineer</a></p>&mdash; 楽天採用情報(C&amp;Mカンパニー開発部門) (@rhack_commerce) <a href="https://twitter.com/rhack_commerce/status/1665156452988882944?ref_src=twsrc%5Etfw">June 4, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>山本ユースケさんや岸田さんなど有名な方々にも立ち寄っていただけました。 ありがとうございます。</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">楽天お買い物パンダと握手できるのは <a href="https://twitter.com/hashtag/jjug_ccc?src=hash&amp;ref_src=twsrc%5Etfw">#jjug_ccc</a> だけ! <a href="https://t.co/kvqyF3kblB">pic.twitter.com/kvqyF3kblB</a></p>&mdash; 山本ユースケ (@yusuke) <a href="https://twitter.com/yusuke/status/1665236778679250944?ref_src=twsrc%5Etfw">June 4, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h3 id="その他"> その他 <a class="heading-link" href="#%e3%81%9d%e3%81%ae%e4%bb%96"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>今回、オフラインのJJUGには初参加なのですが、いろんな企業さんがブーススポンサーとして参加されていました。</p> <p>GMOさんはクイズを企画されていました。 普段業務では意識しないような細かめの知識を問うような問題を出されており、大変賑わっていました。 また、JAVAティーをいただきました。 ありがとうございました。</p> <p>サムライズムさんもいらっしゃいました。 個人的にサムライズムさんが開発されたCIcloneにとても感銘を受けており、その話をできました。 また、IntelliJ IDEAとKotlinのステッカーをいただきました。 ありがとうございました。</p> 東日本近似的一周旅行に行った話 https://t45k.github.io/blog/east_japan_touring/ Tue, 16 May 2023 16:19:38 +0900 https://t45k.github.io/blog/east_japan_touring/ <p>西日本編は<a href="https://t45k.github.io/blog/tour_day1/" >こちら</a></p> <p>まとまった休みを取ったので、一週間半くらいかけ本州最北端である大間崎までバイクで行って帰ってた。 最終的に五日間で2,600km走った。</p> <h2 id="一日目"> 一日目 <a class="heading-link" href="#%e4%b8%80%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>出発。とりあえず行きは日本海側から向かうことにした。</p> <p>昼は金沢の金沢まいもん寿司で高いセットを食べた。</p> <figure><img src="https://t45k.github.io/img/blog/kanazawa_sushi.JPG" width="50%" height="50%"> </figure> <p>石浦神社に安全を祈願しに行った。</p> <figure><img src="https://t45k.github.io/img/blog/ishiura_shrine.JPG" width="50%" height="50%"> </figure> <p>そのまま高速で北上して富山の宇奈月温泉へ。 晩ご飯はホテルのビュッフェ。</p> <h2 id="二日目"> 二日目 <a class="heading-link" href="#%e4%ba%8c%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>朝ご飯もホテルのビュッフェ。</p> <p>お昼は新潟で燕三条ラーメン。 背脂チャッチャ系で旨い。</p> <figure><img src="https://t45k.github.io/img/blog/tsubame_sanjo_ramen.JPG" width="50%" height="50%"> </figure> <p>その足で弥彦神社に行った。 ここは二礼四拍手一礼で参拝するという結構珍しい神社だった。 こういう大きめの神社は、鳥居から社までの道も神聖な感じがして良かった。</p> <figure><img src="https://t45k.github.io/img/blog/yahiko_shrine.JPG" width="50%" height="50%"> </figure> <p>そのまま下道で山形を通り越して秋田の田沢湖温泉へ。 途中まで日本海パークラインを、佐渡島を眺めながら走っていた。 距離があったのでだいぶ遅くなった + 北の方ということで、とても寒かった。 大阪にいた時の気温しか想定していなかったので大分薄着だったのが災いした。 本当に辛かった。</p> <h2 id="三日目"> 三日目 <a class="heading-link" href="#%e4%b8%89%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>秋田の山を越えて青森に入る。 秋田の山はまだ雪が残っていて辛かった。</p> <p>青森に入ってすぐにスウェットパーカーを買った。</p> <figure><img src="https://t45k.github.io/img/blog/akita_mountain.JPG" width="50%" height="50%"> </figure> <p>青森では煮干しラーメンを食す。</p> <figure><img src="https://t45k.github.io/img/blog/niboshi_ramen.JPG" width="50%" height="50%"> </figure> <p>廣田神社に参拝した。 ここは疫病の神様を祀ってあるとかなんとか。</p> <figure><img src="https://t45k.github.io/img/blog/hirota_shrine.JPG" width="50%" height="50%"> </figure> <p>そのまま浅虫温泉で一泊。</p> <h2 id="四日目"> 四日目 <a class="heading-link" href="#%e5%9b%9b%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>予定通り大間崎へ向かう。</p> <figure><img src="https://t45k.github.io/img/blog/omazaki.JPG" width="50%" height="50%"> </figure> <p>大間はマグロの漁獲量が日本一なので、昼飯にマグロ丼を食べる。</p> <figure><img src="https://t45k.github.io/img/blog/magurodon.JPG" width="50%" height="50%"> </figure> <p>そのまま下道を走って岩手へ。 岩手では盛岡冷麺を頂く。</p> <figure><img src="https://t45k.github.io/img/blog/morioka_remen.JPG" width="50%" height="50%"> </figure> <p>そのまま瀬美温泉へ。</p> <h2 id="五日目"> 五日目 <a class="heading-link" href="#%e4%ba%94%e6%97%a5%e7%9b%ae"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>翌日から二、三日雨が降るとのことだったので、この日中に大阪に帰ろうとする。 その距離1,000km。</p> 「ソフトウェア見積もり」読了 https://t45k.github.io/blog/software_estimation/ Mon, 27 Mar 2023 22:28:20 +0900 https://t45k.github.io/blog/software_estimation/ <p>Steve McConnellの「ソフトウェア見積もり」を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F4149660%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=11917813&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F8910%2F89100522.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F4149660%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" >ソフトウェア見積り 人月の暗黙知を解き明かす [ スティーヴ・マコネル ]</a><br><span >価格:3,740円(税込、送料無料)</span> <span style="color:#BBB">(2023/3/27時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F4149660%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0"></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F4149660%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;">楽天で購入</div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>普段の業務では特に締め切りが存在せず、スケジュールを意識してプロジェクトをやることがあまりないので、 自分で見積もりをやってみたいなぁと思ったのがきっかけ。</p> <p>内容は一プログラマから専門家のためのものまで多岐に渡るが、現場で使える知識の提供に一貫している。</p> <p>ところどころ読み飛ばしたが、特に参考になったトピックは以下の通り</p> <ul> <li>範囲で見積もる</li> <li>最初の方の見積もりほどブレる</li> <li>「判断」より「計測」と「計算」が重要</li> <li>過去のプロジェクトから見積もる</li> <li>規模で見積もる</li> </ul> <p>本自体は20年前近くのものなので、スクラムについては触れられていないが、反復的な開発に関する言及はある。</p> <p>とりあえずラフなところから試してみたいなと思った。</p> <p>あと、参考文献としてTSEとかISTとかの論文を引いてるのは凄い。</p> シン・仮面ライダーを見た話 https://t45k.github.io/blog/shin-kamen-rider/ Sun, 19 Mar 2023 15:45:40 +0900 https://t45k.github.io/blog/shin-kamen-rider/ <p>シン・仮面ライダーを見たので感想。</p> <p>本当に半年以上待った作品だったが、かなりの怪作だったので結構呆気に取られている。</p> <h2 id="良かった点"> 良かった点 <a class="heading-link" href="#%e8%89%af%e3%81%8b%e3%81%a3%e3%81%9f%e7%82%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li>過剰なまでの原作リスペクト。 <ul> <li>特にクモオーグ戦。ほとんどテレビ版の1話。</li> <li>変身シーンも。</li> <li>ちゃんとショッカーライダーも出てきた。</li> </ul> </li> <li>カッコ良い変身シーンと戦闘シーン。 <ul> <li>主にジャンプアクションとライダーキック。</li> <li>本当に震えた。</li> </ul> </li> <li>仮面ライダーが人間ならざる物になってしまったことに対する葛藤をしっかり描いていたところ。 <ul> <li>テレビ版だとナレーションで流されたりしてたので。</li> <li>庵野はこの辺をやりたかったんやろうなぁと。</li> </ul> </li> <li>令和らしい本郷猛。</li> <li>一文字隼人の良い意味での性格の軽さ。</li> <li>ちゃんとおやっさんと滝が出てきた。</li> <li>綺麗なラスト。</li> <li>浜辺美波。</li> </ul> <h2 id="微妙だった点"> 微妙だった点 <a class="heading-link" href="#%e5%be%ae%e5%a6%99%e3%81%a0%e3%81%a3%e3%81%9f%e7%82%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li>シナリオはちょい微妙か。 <ul> <li>未だに人類補完計画が擦られてる。</li> <li>一般ウケするのはシンゴジ &gt; シンマン &gt; シンライダーかな。</li> </ul> </li> <li>本郷猛の性格は原作好きだと受け入れられない人もいそう。</li> <li>CG。個人的にはちょっとがっかりした。</li> <li>若干スプラッタ。</li> <li>下級戦闘員との戦闘シーンが少ない。 <ul> <li>クモオーグ戦みたいなのをもうちょい見たかった。</li> </ul> </li> </ul> <h2 id="総合"> 総合 <a class="heading-link" href="#%e7%b7%8f%e5%90%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>少なくとも庵野秀明か初代仮面ライダーのどちらかが好きじゃないと楽しめないかも。</p> 「ちょうぜつソフトウェア開発入門」読了 https://t45k.github.io/blog/chozetsu_software_design_introduction/ Sun, 12 Feb 2023 16:42:09 +0900 https://t45k.github.io/blog/chozetsu_software_design_introduction/ <p>ひさてるさん著の「ちょうぜつソフトウェア開発入門」を読んだ。 ひさてるさんは Twitter で「#ちょうぜつエンジニアめもりーちゃん」のハッシュタグで不定期に漫画を投稿している人で、そのシニカルな内容が個人的には気に入っている。</p> <p>副題に「PHP で理解するオブジェクト指向の活用」とある通り、サンプルコードは PHP で書かれている。 内容は、Clean Architecture と TDD に対するひさてるさんの解釈という感じがした。 また、オブジェクト指向それ自体に意味はなく、それを活用した得られるもの(SOLID、CA、TDD)が大事なのだと述べている。</p> <p>こういう著者の考えがダイレクトに出る本は、読み物としても楽しめるので良いなと感じた。 また、最終章の「アジャイル開発」は必読。</p> 「読みやすいコードのガイドライン」読了 https://t45k.github.io/blog/readable_code_guideline/ Sun, 12 Feb 2023 16:23:45 +0900 https://t45k.github.io/blog/readable_code_guideline/ <p>LINE に勤めている石川さんが書いた「読みやすいコードのガイドライン」を読んだ。 副題の「持続可能なソフトウェア開発のために」に完全に同意。 継続的なソフトウェア開発には読みやすいコードが必須。</p> <p><a href="https://books.rakuten.co.jp/rb/17283015/?l-id=search-c-item-text-01" class="external-link" target="_blank" rel="noopener">https://books.rakuten.co.jp/rb/17283015/?l-id=search-c-item-text-01</a></p> <p>「リーダブルコード」などと比べて、少し突っ込んだ内容が多いような印象。 状態遷移や依存関係などの内容は、コードを書き始めたばかりの人には難しいかもしれないが、個人的にはとても勉強になった(特に 7 種類の結合度については初耳だった)。 コードレビューの仕方やコメントの書き方といった、取り上げられている書籍がとても少ない(と思う)事柄についても触れられていて、一読の価値があると感じた。 これらに関してはかなり現場に依存するので完全に同じことをするのは難しそうだが、こういう感じでやってて上手く回っているんだなぁと感じた。</p> <p>内容自体もコンパクトにまとまっており、読みやすかった。</p> 「Death Stranding」をプレイした話 https://t45k.github.io/blog/death_stranding/ Sat, 28 Jan 2023 17:16:09 +0900 https://t45k.github.io/blog/death_stranding/ <p>Epic でセールになってた Death Stranding(以降、デススト)をクリアしたので感想を書きます。</p> <h2 id="デスストとは"> デスストとは <a class="heading-link" href="#%e3%83%87%e3%82%b9%e3%82%b9%e3%83%88%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>デスストは 2019 年に PS4 向けに発売されたゲームです。 現在では完全版であるディレクターズカット版が PS5、PC 向けにも出ています。</p> <p>制作はメタルギアシリーズを作った小島監督率いるコジマプロダクションであり、 小島監督が KONAMI から独立した後、初めて作ったゲームでもあります。</p> <p>自分は MGS シリーズが好きで(1~5、PW、MPO 辺りはプレイした)、 その小島監督が作った新作ということで発売当初からデスストに注目していましたが、 PS4 を持っておらず遊ぶことができないままでした。 しかし今回 Epic Store で無料セールをやっていたため、プレイするに至りました。</p> <h2 id="感想"> 感想 <a class="heading-link" href="#%e6%84%9f%e6%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>最高でした。 久々にストーリーがしっかりしたアクションゲームをやったのですが(2015 年の MGS5 以来?)、 やはりストーリーがあるゲームは先に進みたいと思わせる強い中毒性があるなと再認識しました。 夜更かしからの寝坊が増えました。</p> <p>荷物を運ぶことがメインのゲームなので人によっては退屈に思うかもしれませんが、自分は最後まで楽しむことができました。 広大なオープンワールドでルートを考えたり、アイテムを使って有利に進めたり、他の人の建設物を使うことで繋がりを感じたり、多くのことができます。</p> <p>ストーリーを進めるにつれ、配達を楽にするアイテムが公開されていくので、できることの幅が広がっていくのを楽しめました。 特に、アクティブスケルトンを初めて装着した時は、その快適さに感動しました。</p> <p>荷物の配達がメインなのでそこまで多くの武器は出てこないだろうなと思っていましたが、想像以上にガンアクションが多かったです。 ただし、狙うキーとトリガーキーが他のキーと重複しているので、設定は事前にいじっておいた方が良さそうです。</p> <p>初見のうちはやることが多くて面食らいました。 特に、BT の座礁地帯に入った時はしゃがみと歩きと息止めを同時にやっていたので指がこんがらがりました。</p> <p>MGS5 と同じ Fox Engine が使われているため、ところどころ MGS5 で見たことがある表現が出てきました。 時雨で荷物が劣化していくときのエフェクト、BT の座標地帯に乗り込んだときの時間停止等。 また、ボス戦では MGS5 でのスカルズの白刃どりや、MGS4 の殴り合いみたいなアクションもあり、懐かしかったです。</p> <p>ノーマンリーダスがカッコよかった。</p> <iframe src="https://store.steampowered.com/widget/1850570/665843/" frameborder="0" width="646" height="190"></iframe> WF-1000XM4を修理に出した話 https://t45k.github.io/blog/wf-1000xm4_repair/ Sat, 14 Jan 2023 17:56:18 +0900 https://t45k.github.io/blog/wf-1000xm4_repair/ <h2 id="結論"> 結論 <a class="heading-link" href="#%e7%b5%90%e8%ab%96"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>WF-1000XM4 の「片方(右側?)だけ異様に充電が減る」問題は、保証期限切れでも無料で新品に交換してもらえる。</p> <h2 id="購入した時期"> 購入した時期 <a class="heading-link" href="#%e8%b3%bc%e5%85%a5%e3%81%97%e3%81%9f%e6%99%82%e6%9c%9f"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>MNG した写真の日付を見た限り 2021 年の 8 月末に購入。 ヨドバシで買ったが、保証期間の延長等はしていなかった。</p> <h2 id="症状"> 症状 <a class="heading-link" href="#%e7%97%87%e7%8a%b6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>イヤホンの右側だけ異様に充電が切れるのが早い。 具体的には、3、40 分程度で 100%から 0%になる。 ちなみに、左側は 80%程度残っている。</p> <p>くわえて、どれだけ充電しても 90%までしか充電されない問題も頻繁に起きた(左右問わず)。</p> <p>大体 2022 年の秋ごろからこの問題が見られるようになってきた。 症状が出始めた時点で保証期間は過ぎていたので、しばらく様子見をしていた。</p> <h2 id="対処法"> 対処法 <a class="heading-link" href="#%e5%af%be%e5%87%a6%e6%b3%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>同様の問題がないか検索してみたところ、わりかし多くのユーザも同じ症状を抱えていたため、修理を依頼することに決めた。 SONY では、修理希望者向けのチャットボットを用意しているので、そこ経由から修理を依頼した。</p> <p><a href="https://www.sony.jp/support/inquiry.html" class="external-link" target="_blank" rel="noopener">https://www.sony.jp/support/inquiry.html</a></p> <p>本来であれば修理費は 1 万円程度だが、SONY 側もこの問題を認識しているらしく、 一度 SONY が預かり、無料修理対象であれば無償で、そうでなければ修理費を依頼者に伝えた上で修理するかを決めるという流れらしい。</p> <p>イヤホン回収は SONY が回収サービスを手配してくれるため、回収業者が来たらイヤホンをケース込みで渡すだけで良かった。</p> <h2 id="結果"> 結果 <a class="heading-link" href="#%e7%b5%90%e6%9e%9c"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>無事無料修理対象だったらしく、イヤホンが SONY に届いてから 2 日ほどで修理が完了し、本日返ってきた。 回収に来てから 1 週間ほど。 ありがとうございました。</p> 2022年の振り返り https://t45k.github.io/blog/retrospective_2022/ Sat, 31 Dec 2022 09:39:23 +0900 https://t45k.github.io/blog/retrospective_2022/ <p>2022年を振り返る。</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>楽しく仕事ができた。 特に、チーム内でやっていることをチーム外に啓蒙するという活動をしてて、それが評価されたという感じ。</p> <p>先輩、後輩とのつながりも増えて申し分ない1年間だった。</p> <h2 id="仕事"> 仕事 <a class="heading-link" href="#%e4%bb%95%e4%ba%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="1月--3月"> 1月 &ndash; 3月 <a class="heading-link" href="#1%e6%9c%88--3%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li> <p>主にインターンのメンターとJenkinsおじさんをやってた</p> <ul> <li>インターンのメンターは、インターンの子が超絶優秀だったのであまりやることがなかった。 <ul> <li>逆に色々教えてもらえて良かった。</li> <li>リリースが間に合わなかったのはシンプルに申し訳なかった。</li> </ul> </li> <li>JenkinsはIaaS環境に載せてたJenkinsがあまりにも使い物にならなくなってきたので、k8s環境に載せ替えた。</li> </ul> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">- 一つのコンテナに全ての機能を突っ込む<br>- コンテナにcredentialを突っ込む<br><br>みたいなカスみたいなアンチパターンから、<br><br>- 機能ごとにコンテナを分割して、ポートで通信する<br>- credentialはコンテナに持たせず、都度Jenkins側から渡す<br><br>に改善できて良い</p>&mdash; task@血圧・尿酸 (@getupmax) <a href="https://twitter.com/getupmax/status/1496688678546321409?ref_src=twsrc%5Etfw">February 24, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <ul> <li>個人的には大満足なマイグレーション。</li> <li>ちなみにこの話をこの1年間擦り続けてる。</li> </ul> </li> </ul> <h3 id="4月--6月"> 4月 &ndash; 6月 <a class="heading-link" href="#4%e6%9c%88--6%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li>この辺りから、趣味で他のチームのコードレビューにも参加するようになる。 <ul> <li>啓蒙活動。</li> <li>特に汚いソースコードに関してコメントすることが多かった。この辺は個人の思想の押し付けになってたかも。</li> <li>最終的に綺麗なソースコードを書こうとしても設計が崩壊してると終わりなことに気づいた。</li> </ul> </li> </ul> <h3 id="7月--9月"> 7月 &ndash; 9月 <a class="heading-link" href="#7%e6%9c%88--9%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li> <p>Java8環境に耐えきれなくなり、Java17にアプデするプロジェクトを勝手に立ち上げる。</p> <ul> <li>PDMに話通して、スケジュール設定 → 実装 → テスト → リリースまでを自分でできたのは良い経験だったなと。</li> <li>終わった後にLT会でナレッジを共有したり、他のチームのJava17導入に噛んだりできて良かったなと。</li> <li>チームに自動E2Eテストを書く文化が根付いていたので、マイグレーションがかなりやりやすかった。ありがたい。</li> </ul> </li> <li> <p>夏のインターンのメンター</p> <ul> <li>1週間</li> <li>自分も夏のインターンからの採用だったので、その辺も踏まえて会社に貢献できたらという気持ち。</li> <li>どっちかというと1日の終わりのレビューがメインのお仕事でした。</li> <li>最終的に優勝してた。すごい。</li> <li>その辺の話はこちら<br> <a href="https://commerce-engineer.rakuten.careers/entry/workstyle/0025" class="external-link" target="_blank" rel="noopener">https://commerce-engineer.rakuten.careers/entry/workstyle/0025</a></li> <li>以降、インターン経験者かつメンターで優勝みたいな経歴もあって新卒向けイベントみたいなのに呼ばれる機会が増えた。</li> </ul> </li> </ul> <h3 id="10月--12月"> 10月 &ndash; 12月 <a class="heading-link" href="#10%e6%9c%88--12%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li> <p>複数チームにまたがって改善活動をやっていこうぜ的なチームが発足。 -「自チームの改善」 + 「コードレビューを通した他チームへの貢献」みたいなところに目をつけれられて、そのチームに放り込まれる。</p> JJUG CCC 2022 Fallに参加した話 https://t45k.github.io/blog/jjug_ccc_2022_fall/ Sat, 03 Dec 2022 17:36:13 +0900 https://t45k.github.io/blog/jjug_ccc_2022_fall/ <p>2022 年 11 月 27 日日曜日に開催された JJUG CCC 2022 Fall に参加しました。</p> <p><a href="https://jjug.doorkeeper.jp/events/143914" class="external-link" target="_blank" rel="noopener">リンク</a></p> <h2 id="jjug"> JJUG <a class="heading-link" href="#jjug"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>JJUG は&quot;Japan Java User Group&quot;を指します。 日本最大の Java のコミュニティです。 JJUG CCC は毎年 2 回、春と秋に開催されるイベントで、 様々な参加者が Java に関する技術や事例などの紹介を行います。</p> <p>参加者の中には、普段から Java コミュニティで活躍されていられる方も多くいらっしゃります。</p> <p>今回僕は聴講側として参加しました。 以下、参加したセッションとそれぞれの感想を書いていきます。</p> <h3 id="aws-環境における-spring-boot-アプリケーションの-cicd-を-circleci-で構築した話"> AWS 環境における Spring Boot アプリケーションの CI/CD を CircleCI で構築した話 <a class="heading-link" href="#aws-%e7%92%b0%e5%a2%83%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b-spring-boot-%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae-cicd-%e3%82%92-circleci-%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%97%e3%81%9f%e8%a9%b1"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>株式会社 Red Frasco の篠原さんのセッション。</p> <p><a href="https://speakerdeck.com/red_frasco/cdwocirclecidegou-zhu-sitahua" class="external-link" target="_blank" rel="noopener">https://speakerdeck.com/red_frasco/cdwocirclecidegou-zhu-sitahua</a></p> <p>現在開発中のサービスで、</p> <ul> <li>CI/CD に Circle CI を</li> <li>実行環境に AWS を</li> </ul> <p>利用した事例について紹介されていました。</p> <p>個人的には CI/CD に興味があったためこのセッションに参加しました。</p> <p>Java (Spring) に関連した内容は少なかったですが、Circle CI で AWS にアプリをデプロイする際に注意すべきこと、おすすめの方法等を紹介されており、今後これらのシステムを使う際には参考になりそうだなと感じました。</p> 「現場で役立つシステム設計の原則」読了 https://t45k.github.io/blog/system_design_principle/ Sun, 16 Oct 2022 19:33:26 +0900 https://t45k.github.io/blog/system_design_principle/ <p>現場で役立つシステム設計の原則を読んだ。</p> <table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15017530%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><img src="https://hbb.afl.rakuten.co.jp/hgb/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?me_id=1213310&item_id=18637464&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Fbook%2Fcabinet%2F0877%2F9784774190877.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]" title="[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]"></a></td><td style="vertical-align:top;width:248px;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15017530%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" >現場で役立つシステム設計の原則 変更を楽で安全にするオブジェクト指向の実践技法 [ 増田亨 ]</a><br><span >価格:3234円(税込、送料無料)</span> <span style="color:#BBB">(2022/10/16時点)</span></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15017530%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0"></a><a href="https://hb.afl.rakuten.co.jp/ichiba/2c4e7c40.9ea290f6.2c4e7c41.04aec2a1/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fbook%2F15017530%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjowLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;" ><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;">楽天で購入</div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table> <p>「ドメインモデルを設計して、それを中心にプログラミングしよう」という内容だった。</p> <p>よく見かける依存性逆転の原則を中心としたオニオンアーキテクチャではなく、 三層アーキテクチャ(コントローラ層、サービス層、データソース層)にドメインモデルを組み込む話を中心にしていたのが特徴的だった。 現在自分のチームも三層アーキテクチャ+トランザクションスクリプト的な設計が主流になっていて、個人的には変更しづらさを感じていたので、この本で紹介されている方法を取り入れられれば良いなぁと感じた。</p> 「達人が教えるWebパフォーマンスチューニング」読了 https://t45k.github.io/blog/web_perfomance_tuning/ Sun, 16 Oct 2022 19:27:18 +0900 https://t45k.github.io/blog/web_perfomance_tuning/ <p>2022 年の ISUCON に備えて「達人が教える Web パフォーマンスチューニング」を読んだ。</p> <p>内容としては、web サーバや DB の負荷計測からチューニングに関して、ISUCON で使えるテクから現場で活用できる技術まで紹介していた。 パフォチュー経験がない状態で挑む ISUCON だったので、こういった本があってありがたかった。 残念ながら十分な時間をとることができず、全ての内容を消化できなかったが、何となく何をしたら良いかわかるくらいには持っていけたのでよかった。 なお、本番。</p> <p>来年また読み直して、ISUCON に再挑戦したい。</p> 競プロでKotlinを使わない理由 https://t45k.github.io/blog/why_not_kotlin_in_kyopuro/ Mon, 04 Jul 2022 22:38:27 +0900 https://t45k.github.io/blog/why_not_kotlin_in_kyopuro/ <p>仕事や趣味でソースコードを書く時は Kotlin を使っているが、競プロでは Java を使っている。</p> <p>ちょくちょく Kotlin に移行することを考えるのだが、その度に色々な理由で断念するので、その理由を書き出してみる。</p> <h2 id="ビット演算子がない"> ビット演算子がない <a class="heading-link" href="#%e3%83%93%e3%83%83%e3%83%88%e6%bc%94%e7%ae%97%e5%ad%90%e3%81%8c%e3%81%aa%e3%81%84"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>多分これが一番大きい。</p> <p>競プロではビット演算をする場面がたびたびある(ビット全探索とか)。</p> <p>Java では<code>&lt;&lt;</code>や<code>|</code>などが使えるが、Kotlin では<code>lhs</code>や<code>or</code>などの中置関数を使う必要があり、可読性が大きく下がる。</p> <h2 id="配列宣言が面倒臭い"> 配列宣言が面倒臭い <a class="heading-link" href="#%e9%85%8d%e5%88%97%e5%ae%a3%e8%a8%80%e3%81%8c%e9%9d%a2%e5%80%92%e8%87%ad%e3%81%84"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>競プロの性質上、配列に対してプリミティブな操作を行う場面が多くあるため、配列宣言はなるべく簡潔に済ませたい。</p> <p>Java では<code>int[]</code>のように宣言できるが、Kotlin では<code>Array&lt;Int&gt;</code>のように宣言する必要がある。</p> <p>また、一次元配列では特に問題ないのだが、多次元配列(競プロでは三次元配列を書く場面が多々ある)になると Kotlin の記法は特に面倒になる。</p> <h2 id="null-チェックが厳しい"> null チェックが厳しい <a class="heading-link" href="#null-%e3%83%81%e3%82%a7%e3%83%83%e3%82%af%e3%81%8c%e5%8e%b3%e3%81%97%e3%81%84"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>仕事で使う分にはありがたいが、競プロのような使い捨てるコードに対しては意義が薄れる感じがする。</p> <p>とくに、Map のキーの存在が確定している場合でも何らかのエスケープが発生する。</p> <p><code>!!</code>演算子で無理やり非 null 型に変換することもできるが、個人の信条からあまり使いたくない(<code>!!</code>演算子の利用に慣れたくない)。</p> <h2 id="トラディショナル-for-が使えない"> トラディショナル for が使えない <a class="heading-link" href="#%e3%83%88%e3%83%a9%e3%83%87%e3%82%a3%e3%82%b7%e3%83%a7%e3%83%8a%e3%83%ab-for-%e3%81%8c%e4%bd%bf%e3%81%88%e3%81%aa%e3%81%84"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Kotlin の for 文はイミュータブルな変数を使った記法なので、トリッキーでアドホックな for 文を書きにくいという欠点がある。 例えば、添字の<code>i</code>を条件によって更新したりしなかったりする場合など。</p> <h2 id="暗黙の型変換がない"> 暗黙の型変換がない <a class="heading-link" href="#%e6%9a%97%e9%bb%99%e3%81%ae%e5%9e%8b%e5%a4%89%e6%8f%9b%e3%81%8c%e3%81%aa%e3%81%84"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>int</code>と<code>long</code>で足し算したり、<code>char</code>同士の引き算の結果を<code>int</code>にしたりするのが面倒臭い。</p> シン・ウルトラマンを見た話 https://t45k.github.io/blog/shin-ultraman/ Sun, 12 Jun 2022 15:48:22 +0900 https://t45k.github.io/blog/shin-ultraman/ <p>シン・ウルトラマンを 3 回も観てしまったので、感想を書き連ねておく。</p> <p>全体的な感想としては、作り手(主に監修)が本当に自分が好きなものを詰め込んでいて、それがオタクに刺さりまくる感じ。</p> <p>無印へのリスペクトがすごく、</p> <ul> <li>1 回目は無印マンを全然知らない状態で楽しむ</li> <li>家に帰ってから関連する無印マンの情報を漁る</li> <li>2 回目以降はその知識と比較しながら楽しむ</li> </ul> <p>みたいに 2 度美味しく頂ける。</p> <h2 id="ウルトラマン"> ウルトラマン <a class="heading-link" href="#%e3%82%a6%e3%83%ab%e3%83%88%e3%83%a9%e3%83%9e%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>今作のウルトマンは、無印マンと違って</p> <ul> <li>カラータイマーがない</li> <li>背びれがない</li> <li>目の黒点がない</li> </ul> <p>という特徴がある。</p> <p>そもそも、本来のウルトラマンの造形にそれらはなく、単に放送上の制約で無印には付けざるを得なかったという事情がある (カラータイマーは白黒放送でも弱っていることを見せるため、背びれはファスナーを隠すため、目の黒点は覗き穴)。</p> <p>今作では、庵野のこだわりから、本来のウルトラマンのデザインを表現できていると思った。 色合いもマットなシルバーからメタリックなそれになっていて、こだわりを感じた。</p> <p>また、弱ると色が薄くなるという表現も良かった。</p> <h2 id="ネロンガ戦"> ネロンガ戦 <a class="heading-link" href="#%e3%83%8d%e3%83%ad%e3%83%b3%e3%82%ac%e6%88%a6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>スペシウム光線の威力がよく分かる回。</p> <p>ちなみに、PV でここのスペシウム光線のシーンが取り上げられているが、この時点でウルトラマンのカラーリングは銀一色なため、 実は PV のシーンは存在しない。</p> <h2 id="ガボラ戦"> ガボラ戦 <a class="heading-link" href="#%e3%82%ac%e3%83%9c%e3%83%a9%e6%88%a6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>赤いウルトラマンが初めて出てくる。</p> <p>冒頭の、飛行ポーズのまま降りてきてキックを決めるシーンはなかなかシュールだった。</p> <p>着地からのいつものポーズ。</p> <p>最後の正拳突きがキレイで少し感動した。誰がアクターやってたんだろう。</p> <p>ちなみに無印では、襟(ドリルの部分)をむしり取るというなかなか暴力的なシーンがある。</p> <h2 id="ザラブ戦"> ザラブ戦 <a class="heading-link" href="#%e3%82%b6%e3%83%a9%e3%83%96%e6%88%a6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ウルトラマン拉致が印象的な回。</p> <p>ウルトラマン拉致や偽ウルトラマン、空中戦など無印リスペクトが盛りだくさん。 特に、ザラブを思いっきりチョップするも硬くて痛がるシーンまで再現されている。</p> <p>ザラブは、前半身の表面だけが見えており、そこ以外は透明な、なかなかフィギュア化が難しそうな見た目をしている。</p> <p>電磁波を操る能力を持っているが、それを使わずに偽ウルトラマンで暴れてからの人類の同士討ちを狙うという、 かなり回りくどい方法を取っているように思えた。</p> <p>偽ウルトラマンは無印と比べてかなり似ているが、よく見ると目が角ばっている。</p> <p>ちなみに、この回の変身シーンがめちゃくちゃ格好良い(ウルトラマンが神永を掴んで巨大化する)。</p> <p>神永とザラブが車内で会話するシーン(ザラブの人類同士戦わせる発言に対して、神永が人類はそこまで愚かじゃないと返す)からは、 現在のウクライナ情勢に対する強烈な皮肉を感じた。</p> <h2 id="メフィラス戦"> メフィラス戦 <a class="heading-link" href="#%e3%83%a1%e3%83%95%e3%82%a3%e3%83%a9%e3%82%b9%e6%88%a6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>メフィラスが無印に比べてめちゃくちゃシュッとしてて驚いた。</p> デュアルキーボードを試してみた話 https://t45k.github.io/blog/dual_keyboard/ Thu, 05 May 2022 21:47:26 +0900 https://t45k.github.io/blog/dual_keyboard/ <h2 id="概要"> 概要 <a class="heading-link" href="#%e6%a6%82%e8%a6%81"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>入社して 1 年、肩こりに悩まされるようになったのでデュアルキーボードを試してみた。</p> <h2 id="肩こり"> 肩こり <a class="heading-link" href="#%e8%82%a9%e3%81%93%e3%82%8a"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>肩こりには様々な原因があるが、長時間を肩をすぼめたままの姿勢でいることがその一つである。</p> <p>一般的なキーボードは肩幅より狭いため、タイピングのために肩をすぼめた姿勢を取らざるを得なくなる。</p> <p><img src="https://t45k.github.io/img/blog/single_keyboard.png" alt=""></p> <p>また、肩をすぼめると背中が前に曲がるため、腰に負担がかかる可能性が高まる。 そのうえ、頭がディスプレイに近くなるため、眼精疲労も溜まりやすくなる。</p> <p>以上の観点から、キーボードをそのまま利用するのは健康上のリスクが大きいと考えられる。</p> <h2 id="キーボードを変える"> キーボードを変える? <a class="heading-link" href="#%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>以上の背景から、エルゴノミクスキーボードや分離型キーボードが勧められることが多々ある。 これらのキーボードは多くのメリットがあるものの、以下のデメリットをはらんでいる。</p> <ol> <li>高価<br> これらのキーボードは需要が少ないため、一般的なキーボードと比較して高価になる傾向がある。 また、すでに好みのキーボードを買っている人にとっては、余計な出費になる。</li> <li>配列<br> 真ん中の境界できれいに分割されているため、特定のキーを左右両方の手で取るタイピングをする人には厳しい。</li> <li>スイッチの選択肢が少ない<br> 「青軸が好み」や「静電無接点じゃないとダメ」といったキーボードユーザがいるかも知れないが、そういう人には選択肢が少ない。</li> </ol> <h2 id="デュアルキーボード"> デュアルキーボード <a class="heading-link" href="#%e3%83%87%e3%83%a5%e3%82%a2%e3%83%ab%e3%82%ad%e3%83%bc%e3%83%9c%e3%83%bc%e3%83%89"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>もう一つの選択肢はデュアルキーボードである。</p> <p>読んで時の如く、2 枚のキーボードを左右に配置して、同時に操作する。</p> <p>両方のキーボードはフルサイズなので配列を気にしなくて良いのと、自分の好きなキーボードを継続して使えるというメリットがある。</p> <p>もう 1 枚のキーボードを買う必要があるため、コストの面では優れているかは分からないが、少なくとも分離型キーボードを新しく買うよりかは安上がりになる。</p> <p>コストを優先する場合、もう一つの選択肢がある。</p> <h2 id="結論構成"> 結論構成 <a class="heading-link" href="#%e7%b5%90%e8%ab%96%e6%a7%8b%e6%88%90"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>それは、片方はラップトップのキーボードを利用する構成である。</p> <p>最近ではラップトップのみを支給し、それをモニターと繋いで、業務に使うという会社も多いと思う。</p> <p>ラップトップのキーボードを利用することで、すでに外付けキーボードを持っている場合は新たなコストが一切発生しない (パンタグラフや薄型のキーボードだと違和感なく利用できる。自分は<a href="../keychron" >薄型のメカニカルキーボード</a>を使っていたので大丈夫だった)。</p> <p>この場合、自分の正面にメインモニタ、ラップトップを左側、サブモニタとキーボードを右側に置くのが個人的に最適だと考えている。</p> <p>よくラップトップの上側にモニタを配置する人を見かけるが、これはオススメしない。</p> <p>1 つ目の理由は、人間の目は上下移動よりも左右移動に適しているからである。 これは、目が横に細長いことからわかる。 左右方向に見える範囲が広いため、モニタは左右に配置するべきである。 また、首を動かす場合も、上下に動かすより左右に動かす方が物理的な仕事量が少なくなる。</p> <p>2 つ目の理由は、モニタの上端が目の位置より下になるように高さを調節すべきだからである。 モニタの上端が目線よりも高い場合、まぶたを大きく開く必要があるため、ドライアイや眼精疲労に繋がることが指摘されている。 ラップトップの画面の上にモニタを配置した場合、よほど座高が高い人間でない限り、モニタの上端が目線よりも高くなってしまう。</p> <p>以上の理由から、以下が現時点での個人的な結論構成に落ち着いた。</p> <p><img src="https://t45k.github.io/img/blog/dual_keyboard.png" alt=""></p> <p>肩が死ぬほど開いて気持ち良い。</p> 「Code Clone Analysis」読了 https://t45k.github.io/blog/code_clone_analysis/ Sat, 26 Feb 2022 12:00:56 +0900 https://t45k.github.io/blog/code_clone_analysis/ <p>Code Clone Analysis を読みました。</p> <p>コードクローンとはソースコード中の類似したコード片を指し、修正漏れの原因になることからこれまで多くの研究が行われてきました。 この本は、これまでの研究を総括した学術書です。 学術書なので英語で書かれており、なおかつ(多分)一般流通はされていません。 僕の場合は Springer から直接購入したのですが、送料込みで 2 万弱しました&hellip;</p> <p>読んだ感想ですが、学生時代に理解できなかった論文の内容を理解できたり、知らなかった論文を知れたりして面白かったです。 英語で書かれているので読むのは苦労しますが、ソフトウェア開発者は読む価値があると思います。</p> 「Java言語で学ぶデザインパターン入門」読了 https://t45k.github.io/blog/design_pattern/ Sat, 26 Feb 2022 11:53:22 +0900 https://t45k.github.io/blog/design_pattern/ <p>「Java 言語で学ぶデザインパターン入門」を読み終えました。 今回は内容を Kotlin で実装してみるということをやっていました。 <a href="https://github.com/t45k/designPatternlearning" class="external-link" target="_blank" rel="noopener">リポジトリ</a></p> <p>この本自体は割と前からある本なのですが、今回第 3 版が出て内容が新しくなったと聞き、思い切って購入しました。 4,290 円でした。 技術書は高い。</p> <p>学生時代は研究室に古い版の本があり、何度か読んだのですが、読むだけでは全然理解できないままでいました。</p> <p>やってみた感想ですが、自分が委譲の強力さを全然理解していなかったことを痛感しました。 普段は知らないまま使っていたパターン(Spring bean のプロキシなど)を理解する良い機会になりました。</p> <p>一方、やはり Java だと冗長になる部分が多く、Kotlin で再実装すると、コード例よりもすっきり書ける場面が多かったです。</p> ABC239の解説 https://t45k.github.io/kyopuro/abc239/ Sun, 20 Feb 2022 13:56:21 +0900 https://t45k.github.io/kyopuro/abc239/ <p>3 ヶ月ぶりのコンテスト参加。ただし Unrated。 6 完</p> <h2 id="a---horizon"> A - Horizon <a class="heading-link" href="#a---horizon"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ</p> <h2 id="b---integer-division"> B - Integer Division <a class="heading-link" href="#b---integer-division"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>X が負かつ 10 で割り切れないときだけ、X/10 に-1 を加える。</p> <h2 id="c---knight-fork"> C - Knight Fork <a class="heading-link" href="#c---knight-fork"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>「二つの点から距離 √5 である格子点が存在する」ということは、 「それぞれの点から距離 √5 である格子点を列挙した時、重なる物が 1 つ以上ある」ということになる。</p> <p>なので、それぞれの点の距離 √5 の格子点の集合に対して、共通集合が存在するかを確認すればよい。</p> <h2 id="d---prime-sum-game"> D - Prime Sum Game <a class="heading-link" href="#d---prime-sum-game"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>高橋君が選べる全ての数字に対して、足すことで素数になるような数字を青木君が選べればよい。</p> <p>具体的には、以下のような処理を行う</p> <ol> <li>A~B の数字を順番に選んでいく。この数字を i とする</li> <li>i に対して、C~D の数字を足していく。この和を j とする</li> <li>j が素数の場合は、1.で選んだ数字の次の数字で 2.以降を試す。逆に、素数となる j が存在しなければ、その時点で高橋君の勝ちが確定する</li> <li>全ての i に対して j が素数となるような数字を青木君が選べた場合、青木君の勝利</li> </ol> <h2 id="e---subtree-k-th-max"> E - Subtree K-th Max <a class="heading-link" href="#e---subtree-k-th-max"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Ki は高々 20 なので、愚直に計算していけば良い。 具体的には、各頂点に対して部分木に書かれた値の降順リスト(長さ最大 20)を用意し、以下の手順をボトムアップに繰り返す。</p> 「叙述トリック短編集」読了 https://t45k.github.io/blog/descriptive_trick/ Mon, 10 Jan 2022 11:35:22 +0900 https://t45k.github.io/blog/descriptive_trick/ <p>昨年の 12 月には読み終えていたけど感想書くのサボってた&hellip;</p> <p>似鳥鶏の「叙述トリック短編集」を読みました。</p> <p>叙述トリックとは、語り手(作者)が(意図的に)情報を隠すことで読者を騙すトリックを指します。 よくミステリで使われる他のトリック(密室トリックとか)とは違って、 状況を文字でしか説明できないという特徴を持つ小説特有のトリックなので、結構好きです。 (そのために、映像化不可能などと言われたりする)</p> <p>叙述トリックは読者に対してフェアではないという批判を受けがちですが、 この本では題名と冒頭で叙述トリックを利用していることを明示的に示すことで、その批判を回避しています。</p> <p>内容としては、叙述トリックであると身構えながら読んでも意外と真相は分からないもので、 作者が用意した偽の誘導に引っかかってしまうことも多々ありました。 最後のあとがきまで楽しめました。</p> <p>次は新版が出たデザパタ本をやっていこうと考えています。</p> 2021年の振り返り https://t45k.github.io/blog/retrospective_2021/ Fri, 31 Dec 2021 19:46:45 +0900 https://t45k.github.io/blog/retrospective_2021/ <p>2021 年を振り返っていく.</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>20 年間続いた学生生活をようやく終えて,社会人になった節目の年だった.</p> <p>研究は良い感じに終えられて,社会人生活もぼちぼち良い感じにやっていると思う.</p> <p>一方で,自分の時間をかなり適当に過ごしたのは反省点かなぁと.</p> <h2 id="研究"> 研究 <a class="heading-link" href="#%e7%a0%94%e7%a9%b6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>実験自体はほぼ全て 2020 年で終わっていたので,後は修論を書くだけだった.</p> <p>暇を持て余した結果,修論を英語で 100 ページ書くという謎のチャレンジをした.</p> <p>最終的な戦績は</p> <ul> <li>論文誌*2</li> <li>国際会議*3</li> <li>受賞*1</li> </ul> <p>でかなり満足いく結果になった.</p> <p>特に,暇を持て余して,M2 の 9 月くらいから趣味 100%で始めた研究テーマがかなりうまくいって,最終的にトップ会議に通ったのはとても嬉しかった.</p> <h2 id="仕事"> 仕事 <a class="heading-link" href="#%e4%bb%95%e4%ba%8b"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>配属がかなり恵まれて,楽しく仕事で来た.</p> <p>チームのメンバーはベテランが多く,チーム自体の練度が高いという印象を受けた.</p> <p>また,新卒の自分にも裁量権が十分にあり,提案が通ることも多かった.</p> <p>ソースコードは過去の負債が割と残っているように感じたが,それはそれで返済する面白さがあるからヨシ.</p> <p>働き方もかなり柔軟に選択でき,自分はずっと 8:00 出社の 16:30 退勤をさせてもらっていた.</p> <p>課題としては,今まで個人で適当にプログラミングをしていた影響か</p> <ul> <li>仕様通りに</li> <li>バグなく</li> </ul> <p>作ることの難しさを感じた.</p> <h2 id="趣味"> 趣味 <a class="heading-link" href="#%e8%b6%a3%e5%91%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>全体的に,仕事の疲れを言い訳にだらっと過ごすことが多かった.</p> <h3 id="競プロ"> 競プロ <a class="heading-link" href="#%e7%ab%b6%e3%83%97%e3%83%ad"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>初冬くらいからやらなくなった.</p> <p>理由としては</p> <ul> <li>土曜の 9 時からという時間が悪い. その時間は酒を飲みたい.</li> <li>これ以上実力(レート)が伸びるビジョンが見えない.</li> <li>競プロをやってる仲間がいない.</li> </ul> <p>くらい.</p> 「オブジェクト指向でなぜつくるのか」読了 https://t45k.github.io/blog/how_objects_work/ Sun, 28 Nov 2021 19:12:57 +0900 https://t45k.github.io/blog/how_objects_work/ <p>オブジェクト指向でなぜつくるのかを読みました.</p> <p>久々に技術書を買った気がします. 社会人になって自由に使えるお金が増えるのは良いなと思いました.</p> <p>この本は,コードの書き方や新技術習得の指南というよりは, 基本に立ち返った内容になっています.</p> <p>オブジェクト指向の成り立ちから始まり,オブジェクト指向のメリット,オブジェクト指向により何が可能になったか, などについて説明しています.</p> <p>あまり堅い内容ではないため,寝る前などに軽く読んだりといった,普通の読み物としても楽しめました.</p> <p>個人的には,「オブジェクト指向は必ずしも現実世界を投影してるわけではない」という主張がしっくりきました. 最終的には再利用,修正が容易でバグが発生しにくいプログラムを書くことが重要なのだなぁというごく当たり前のことを再認識する良い機会になりました.</p> 「カーニバル・デイ 新人類の記念日」読了 https://t45k.github.io/blog/carnival_day/ Sun, 24 Oct 2021 13:35:14 +0900 https://t45k.github.io/blog/carnival_day/ <p>2 ヶ月近くかけて,清涼院流水の「カーニバル・デイ」を読みました.</p> <p>本作は JDC シリーズのカーニバル三部作の三作目で,何とこの巻だけで 1000 ページ超あります. 一応 JDC シリーズの年表としては一番最後にあたる話で,とりあえず一区切り付いたかなぁという気持ちです.</p> <p>感想としては,ミステリとしてはトリックの回収の仕方があまりにも酷くて憤りを感じました. コズミックが壁本(壁に叩きつけられてもおかしくない出来の本)として取り上げられることはありますが,個人的にはこの本が壁本に該当するのかなぁと感じました.結局のところ,トリックのインターフェースだけ公開されてて,実装は一切明らかになりませんでした.</p> <p>一方,ファンタジーとして読むとそこそこ楽しめたかなという印象です. 最後のオチのつけ方も,言葉遊びを重視する流水大説としてはアリだと思います.</p> <p>本の内容よりも,やっと読み終えられたという安堵感の方が大きかったです(多分大学生くらいの時からずっと読みたいと思ってました). ちなみに,ラストの Y.T は本文途中に出てくる死亡,行方不明者リストを見るとすぐに分かりました. このために,リストを用意してくれてたとも思えました.</p> <p>今後ですが,彩文家事件はしばらく読まないと思います. 次に読むとしたら,積んでる「人間失格」か最近買った「オブジェクト指向でなぜつくるのか」か,横溝正史あたりに入門しようかなぁと考えています.</p> ABC223の解説 https://t45k.github.io/kyopuro/abc223/ Sat, 23 Oct 2021 20:31:42 +0900 https://t45k.github.io/kyopuro/abc223/ <p>ギリギリ 4 完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC223" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---exact-price"> A - Exact Price <a class="heading-link" href="#a---exact-price"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>100 で割った余りが 0 になればよい.</p> <p>入力例にあるように X=0 である場合に注意.</p> <h2 id="b---string-shifting"> B - String Shifting <a class="heading-link" href="#b---string-shifting"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>シフトした文字列を全通り用意しておき,ソートする.</p> <h2 id="c---doukasen"> C - Doukasen <a class="heading-link" href="#c---doukasen"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>両端からシミュレーションするのは難しそうなので他の方法を考える.</p> <p>少し考えると,左端と右端両端から同時に火をつけたそれらがぶつかった時, どちらも同じ時間燃えていたことになる. つまり,ぶつかる場所は,左端から火をつけて燃え切るのに必要な時間の半分になる.</p> <p>あとは,全て燃える時間を計算して,その半分でどこまで燃えるかを計算すればよい.</p> <h2 id="d---restricted-permutation"> D - Restricted Permutation <a class="heading-link" href="#d---restricted-permutation"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>トポロジカルソートを,優先度付きキューを用いた幅優先探索でやるだけ.</p> ABC222の解説 https://t45k.github.io/kyopuro/abc222/ Sat, 23 Oct 2021 18:07:27 +0900 https://t45k.github.io/kyopuro/abc222/ <p>四完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC222" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---four-digits"> A - Four Digits <a class="heading-link" href="#a---four-digits"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>10 未満には 3 個,100 未満には 2 個,1000 未満には 3 個 0 を付けた文字列を出力する.</p> <h2 id="b---failing-grade"> B - Failing Grade <a class="heading-link" href="#b---failing-grade"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.</p> <h2 id="c---swiss-system-tournament"> C - Swiss-System Tournament <a class="heading-link" href="#c---swiss-system-tournament"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>問題文が長すぎて,飛ばして先に D から解いた問題. やることは</p> <ul> <li>前から二人ペアでじゃんけんをする</li> <li>勝ったらその人の勝ち数を増やす</li> <li>勝ち数でソートする</li> </ul> <p>を繰り返すだけ.</p> <h2 id="d---between-two-arrays"> D - Between Two Arrays <a class="heading-link" href="#d---between-two-arrays"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>DP.</p> <p><code>dp[前から何番目を見てるか][c_iの値]=何通りか</code>という DP を組むと<code>dp[i][j]</code>は</p> <ul> <li><code>i=1</code>の時,<code>a_1 &lt;= j &lt;= b_1</code>の範囲で 1,それ以外は 0</li> <li><code>i&gt;1</code>の時,<code>dp[i-1][a_i]~dp[i-1][j]</code>までの総和</li> </ul> <p>になる.</p> <p>総和の計算には累積和を使う.</p> <h2 id="e---red-and-blue-tree"> E - Red and Blue Tree <a class="heading-link" href="#e---red-and-blue-tree"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>場合分けが漏れていて解き損ねた問題.</p> ドキドキ文芸部をプレイした話 https://t45k.github.io/blog/ddlc/ Mon, 18 Oct 2021 19:54:12 +0900 https://t45k.github.io/blog/ddlc/ <p>ドキドキ文芸部をプレイしました.</p> <p><strong>以降,ネタバレ含みます.</strong></p> <p>プレイ中の感想としては,</p> <ul> <li>もうやめてくれよ</li> <li>これ以上いけない</li> <li>あかん</li> <li>救いはないのですか?</li> </ul> <p>をひたすら繰り返した感じでした.</p> <p>特に驚いたのが名前を呼ばれた場面で,PC のユーザ名を本名にしていたのでどこから入手したのか最初は不審に思いました.</p> <p>全体的には有名なだけあるなって感じで,久々に(短い間ですが)のめり込んでゲームできました.</p> <p>その他思ったこと</p> <ul> <li>ゲーム内に PC のターミナルがあって,そこからファイルをいじれたりゲームを再起動できるのは面白い仕掛けだと感じた</li> <li>ナツキとユリが言い争った挙句モニカがアップになるシーンに毎回びっくりする</li> <li>ナツキ √ がほしい</li> <li>今回買ったのはプラスだが,無印版だとさらに色々できるらしい</li> <li>トロコンまでやるかは不明</li> </ul> ABC220の解説 https://t45k.github.io/kyopuro/abc220/ Wed, 06 Oct 2021 22:54:53 +0900 https://t45k.github.io/kyopuro/abc220/ <p>5 完.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC220/" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---find-multiple"> A - Find Multiple <a class="heading-link" href="#a---find-multiple"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ゴリゴリに計算して答えを出しても良いが,この手の問題は全探索しても間に合う.</p> <h2 id="b---base-k"> B - Base K <a class="heading-link" href="#b---base-k"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>10 進法に直してから計算する</p> <h2 id="c---long-sequence"> C - Long Sequence <a class="heading-link" href="#c---long-sequence"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>A1 ~ AN までの 1 ループでの和を事前に計算しておき,X とその和の商と余りから k を求める.</p> <h2 id="d---fg-operation"> D - FG operation <a class="heading-link" href="#d---fg-operation"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>DP</p> <h2 id="e---distance-on-large-perfect-binary-tree"> E - Distance on Large Perfect Binary Tree <a class="heading-link" href="#e---distance-on-large-perfect-binary-tree"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ある頂点について,ペアの作るための頂点の選び方は以下の 3 通りになる</p> <ol> <li>自分の子孫から対となる頂点を選ぶ</li> <li>自分の先祖から対となる頂点を選ぶ</li> <li>自分の先祖を経由して,その先祖の自分側以外の子孫から対となる頂点を選ぶ</li> </ol> <p>また,それぞれに関して,自分の深さを X とすると,以下の条件が設けられる</p> <ol> <li>自分の深さから N までが D 以上,つまり <code>N-X &gt;= D</code></li> <li>1 から自分の深さまでが D 以上,つまり <code>X-1 &gt;= D</code></li> <li>ある先祖の深さが Y の時,Y を経由しても D に収まる,つまり <code>(X-Y)+(N-Y) &gt;= D</code></li> </ol> <p>あとはそれぞれに関して計算すればよい.</p> ABC219の解説 https://t45k.github.io/kyopuro/abc219/ Wed, 06 Oct 2021 22:26:04 +0900 https://t45k.github.io/kyopuro/abc219/ <p>5 完 600 位で青パフォ. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC219/" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---atcoder-quiz-2"> A - AtCoder Quiz 2 <a class="heading-link" href="#a---atcoder-quiz-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.誤読して WA を出した</p> <h2 id="b---maritozzo"> B - Maritozzo <a class="heading-link" href="#b---maritozzo"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>これもやるだけ. S1~S3 を配列に入れて,T の各数字を int 型に変換してからそれぞれの S に map して一つの文字列に結合すると気持ち良く書ける.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="font-weight:bold">final</span> String s1 = scanner.next(); </span></span><span style="display:flex;"><span><span style="font-weight:bold">final</span> String s2 = scanner.next(); </span></span><span style="display:flex;"><span><span style="font-weight:bold">final</span> String s3 = scanner.next(); </span></span><span style="display:flex;"><span><span style="font-weight:bold">final</span> String[] s = {s1, s2, s3}; </span></span><span style="display:flex;"><span><span style="font-weight:bold">final</span> String t = scanner.next(); </span></span><span style="display:flex;"><span><span style="font-weight:bold">final</span> String answer = IntStream.range(0, t.length()) </span></span><span style="display:flex;"><span> .map(i -&gt; t.charAt(i) - <span style="font-style:italic">&#39;1&#39;</span>) </span></span><span style="display:flex;"><span> .mapToObj(i -&gt; s[i]) </span></span><span style="display:flex;"><span> .collect(Collectors.joining()); </span></span><span style="display:flex;"><span>System.out.println(answer); </span></span></code></pre></div><h2 id="c---neo-lexicographic-ordering"> C - Neo-lexicographic Ordering <a class="heading-link" href="#c---neo-lexicographic-ordering"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>初めにバブルソートをやろうとして TLE を食らった問題</p> ABC218の解説 https://t45k.github.io/kyopuro/abc218/ Mon, 13 Sep 2021 16:37:09 +0900 https://t45k.github.io/kyopuro/abc218/ <p>初の 6 完で久々に盛れた. <a href="https://github.com/T45K/Kyopuro/tree/master/AtCoder/ABC/ABC218" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---weather-forecast"> A - Weather Forecast <a class="heading-link" href="#a---weather-forecast"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>String#charAt</code>使う.</p> <h2 id="b---qwerty"> B - qwerty <a class="heading-link" href="#b---qwerty"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>問題文内では辞書順という言葉を使っているが,単純に<code>(char)('a' + P_i - 1)</code>を出力するだけ.</p> <h2 id="c---shapes"> c - Shapes <a class="heading-link" href="#c---shapes"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>アルゴリズムは簡単だが実装が割としんどい問題.</p> <p><code>#</code>が存在する座標のリストを取得し,それらを左上詰めしたうえで比較する. 例えば,入力例 1 の S</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>..... </span></span><span style="display:flex;"><span>..#.. </span></span><span style="display:flex;"><span>.###. </span></span><span style="display:flex;"><span>..... </span></span><span style="display:flex;"><span>..... </span></span></code></pre></div><p>は 0-indexed で<code>(1,2), (2,1), (2,2), (2,3)</code>と表せられる. このとき,行の最小値は 1,列の最小値は 1 なので, 左上詰めするとそれぞれの座標の行,列から 1 ずつ引いて <code>(0,1), (1,0), (1,1), (1,2)</code>と表せられる.</p> <p>これを S に対して 90° ずつ回転させたリストと T を比較する.</p> <h2 id="d---rectangles"> D - Rectangles <a class="heading-link" href="#d---rectangles"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>条件から,求めたいのは, <code>あるx_iをx座標に持つ点の集合と,あるx_jをx座標に持つ点の集合の間で,y座標が一致する点の集合から2つ選ぶ時の組み合わせの数</code>になる. これを実現するため,与えられた点を x 座標をキー,y 座標のリストを値に持つ Map に格納する. この時,リストは事前にソートしておく. あとは x 座標の各組合せに対して,一致する y 座標の数を数えておく. ソートしているので尺取法的に数え上げると,この操作はリストの長さに線形で可能なので十分に間に合う.</p> ABC217の解説 https://t45k.github.io/kyopuro/abc217/ Wed, 08 Sep 2021 18:47:29 +0900 https://t45k.github.io/kyopuro/abc217/ <p>ぎりぎり5完. 難しく考えてセグ木で殴りにいくことが多かった. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC217/" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---lexicographic-order"> A - Lexicographic Order <a class="heading-link" href="#a---lexicographic-order"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Javaは<code>S.compareTo(T)</code>するだけ.</p> <h2 id="b---atcoder-quiz"> B - AtCoder Quiz <a class="heading-link" href="#b---atcoder-quiz"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>初めに4つのコンテストをSet等で持っておいて,出てきたものを消す.</p> <h2 id="inverse-of-permutation"> Inverse of Permutation <a class="heading-link" href="#inverse-of-permutation"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>問題文の解読にちょっと時間がかかった. 転置する.</p> <h2 id="d---cutting-woods"> D - Cutting Woods <a class="heading-link" href="#d---cutting-woods"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>セグ木で殴った問題その1. Javaだと<code>TreeSet</code>でOK(<code>lower</code>と<code>ceiling</code>が使えることを知らなかった). 別解を紹介する.</p> <p>まずminを返すセグ木とmaxを返すセグ木を用意する. 木材を切る度に,2つのセグ木のxiの位置をxiで更新する. こうすると,線xiを含む木材の長さは,<code>(出てきた数値のうち,xi以上の最小値)-(xi以下の最大値)</code>と表すことができ, セグ木を使うことで<code>O(log N)</code>で処理できる. 木材の長さは<code>10^9</code>を取りうるので,木材を切る位置で座標圧縮する. つまり,ci=1のクエリを先に全て集めて起き,それらのxiの値でリストを作り, それをもとにセグ木を構築する.</p> <h2 id="e---sorting-queries"> E - Sorting Queries <a class="heading-link" href="#e---sorting-queries"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>セグ木で殴った問題その2.</p> <p>これも初めに出てくるxを全て集めておきリストに入れる. このリストをセグ木に入れる. 次にクエリを順番にみていき,以下の操作を行う.</p> <ul> <li>操作1の時,Aの長さを表す変数<code>length</code>を更新する.</li> <li>操作3の時,Aのどの部分までがソート済みかを表す変数<code>sortedPoint</code>に<code>length</code>を代入する.</li> <li>操作2の時,次に出力する数字が何個目か(<code>count</code>)によって,操作を変える <ul> <li><code>sortedPoint</code>以下なら,ソート済みの部分を出力するため,<code>count</code>から<code>sortedPoint</code>の範囲で最小値を出力する (出力した数字は,次以降の操作で引っかからないように最大値で更新しておく)</li> <li><code>sortedPoint</code>を超過していれば,リストの<code>count</code>番目の数字をそのまま出力する.</li> </ul> </li> </ul> ABC216の解説 https://t45k.github.io/kyopuro/abc216/ Sat, 04 Sep 2021 20:29:59 +0900 https://t45k.github.io/kyopuro/abc216/ <p>カス4完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC216/" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---signed-difficulty"> A - Signed Difficulty <a class="heading-link" href="#a---signed-difficulty"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.</p> <p>doubleやfloatでなく文字列型で入力を受け取ってピリオドで分割したほうが良い.</p> <h2 id="b---same-name"> B - Same Name <a class="heading-link" href="#b---same-name"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>姓と名を結合した文字列(間に空白を挟む)をSet等で管理し,最終的にSetの要素数とNを比較すれば良い (要素数がNと同じなら同姓同名は存在しない).</p> <h2 id="c---many-balls"> C - Many Balls <a class="heading-link" href="#c---many-balls"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>元のNに対して</p> <ul> <li>Nが奇数なら1引いてから2で割る</li> <li>Nが偶数なら2で割る</li> </ul> <p>という操作を行っていき,最後に行った操作を逆順に出力する</p> <h2 id="d---pair-of-balls"> D - Pair of Balls <a class="heading-link" href="#d---pair-of-balls"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>考え方としては,筒の先頭を順番に見ていき,重複するボールがあればそれを取り除き,改めてその筒を見る,という操作の繰り返しである.</p> <p>「操作を行う対象の筒リスト」を用意し,1~Nを初めに挿入する. 次に,リストの先頭から取り出した番号の筒に対して,以下の操作を行っていく</p> <ul> <li>筒の先頭の数字が「すでに出現した数字」の集合に含まれている場合,筒の先頭と集合中のその数字を取り除き,「操作を行う対象の筒リスト」に今見ている筒の番号を入れる.</li> <li>筒の先頭の数字が「すでに出現した数字」の集合に含まれていない場合,その数字を集合に入れる.</li> </ul> <h2 id="e---amusement-park"> E - Amusement Park <a class="heading-link" href="#e---amusement-park"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ある楽しさXに対して,<code>Σ(max(Ai-X,0)) = K</code>となるようなXが存在するときに,各アトラクションを楽しさがXになるまで乗るのが最適. なので,そのXを二分探索を用いて探す.</p> <h2 id="f--max-sum-counting"> F- Max Sum Counting <a class="heading-link" href="#f--max-sum-counting"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Aを昇順に並べたとき,Aiを含む(1,&hellip;,i)の空でない部分集合は必ず最大値がAiになる. このことから,ソートした後の各iに対して,(1,&hellip;,i)の空でない部分集合に対してBiの和を求めて,Ai以下のものの個数を足し合わせていけば良い. 部分集合の和はナップザック問題に帰着し,Aiの最大値は5,000なので,それ以下の範囲で計算すれば良い.</p> 「カーニバル 人類最後の事件」読了 https://t45k.github.io/blog/carnival/ Wed, 01 Sep 2021 22:47:07 +0900 https://t45k.github.io/blog/carnival/ <p>重い腰を上げて,清涼院流水の「カーニバル」を読みました.</p> <p>本作では,JDC爆破事件を皮切りに,1週ずつ繰り広げられる大規模犯罪のお話が展開されます. また,各事件は作者が定めた順番に並べられており,「ページ通り読む(読者式)」と「時系列順に読む(作者式)」の2通りの方法で楽しむことができます. 今回は読者式で読んだのですが,事前に死んでしまう登場人物が分かっている状態で,その前日にその人物がどういう振る舞いをしているか,という楽しみ方ができるのは珍しいと思いました.</p> <p>今作ではこれまでJDCシリーズに出てきた多くの探偵が事件に巻き込まれ死にます. また,トリックすら分からない完全不可能犯罪が多く出てきます. この大風呂敷が次作の「カーニバル・デイ」でどう回収されるのかが楽しみです.</p> ABC215の解説 https://t45k.github.io/kyopuro/abc215/ Mon, 23 Aug 2021 20:59:23 +0900 https://t45k.github.io/kyopuro/abc215/ <p>Dで沼って緑パフォ4完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC215" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---your-first-judge"> A - Your First Judge <a class="heading-link" href="#a---your-first-judge"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>文字列判定</p> <h2 id="b---log2n"> B - log2(N) <a class="heading-link" href="#b---log2n"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>logを使うと誤差で通らなかったりする. <code>N&lt;=10^18</code>からkは高々60程度なので愚直に計算してよい</p> <h2 id="c---one-more-aab-aba-baa"> C - One More aab aba baa <a class="heading-link" href="#c---one-more-aab-aba-baa"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>|S|&lt;=8</code>から全てのパターンを列挙しても4*19^5程度なので,全て列挙してからソートすればよい. C++だとpermutationを使えば良いが,Javaだと自分で実装する必要がある. 再帰を使うと楽.</p> <h2 id="d---coprime-2"> D - Coprime 2 <a class="heading-link" href="#d---coprime-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>全然解法が思いつかなかった. 想定解とは別解を紹介する.</p> <p>問題の条件から,求めたい数は,各Aiが約数として持たない素数と,それらの合成数であることが分かる. そこであらかじめ2以上M以下の約数を全て列挙した上で,それらの倍数とAiが一致しないかを確認していく. 素数の倍数を列挙するのはエラトステネスの篩と同じ計算量で行え,それらがAiと一致するかはAをSetで持つことで<code>O(1)</code>でできる.</p> <p>また,合成数を作る処理だが,合成数の数は高々M個なので計算量は<code>O(M)</code>以下となる.</p> <h2 id="e---chain-contestant"> E - Chain Contestant <a class="heading-link" href="#e---chain-contestant"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解法は思いついたが時間内に実装できなかった問題.</p> <p>SがAからJまでの10種類しかないことに着目すると,2^10をやっても何となくいけそうな気になってくる. 以下のようなdpを組む.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>dp[文字列のどこを見ているか][今までどの文字を通ってきたか][今どこの文字にいるか] </span></span></code></pre></div><p>ここで,<code>今までどの文字を通ってきたか</code>はbitで表現できる. このようなdp[i][j][k]を組むと,更新式は以下の和となる.</p> <ul> <li> <p>dp[i-1][j][k]</p> </li> <li> <p>jがi番目の文字を含んでおり,かつk==i. これは,i-1番目までのいずれかのコンテストに参加した時に,現在i番目の文字と同じコンテストに最後に参加したことを表している. このとき,そのままi番目の文字のコンテストを受けることができる.</p> </li> <li> <p>jがi番目の文字を含んでおらず,かつk!=i. これはi-1番目までのいずれかのコンテストに参加した時に,現在i番目の文字と同じコンテストに参加したことがなく, 初めてi番目の文字のコンテストに参加することを表している.</p> </li> <li> <p>+1.これは,i-1番目までのコンテストのいずれにも参加しておらず,i番目のコンテストに初めて参加することを表す.</p> ABC214の解説 https://t45k.github.io/kyopuro/abc214/ Sun, 15 Aug 2021 13:45:18 +0900 https://t45k.github.io/kyopuro/abc214/ <p>ABCDの四完.久々にD問題解けた.<br> <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC214" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---new-generation-abc"> A - New Generation ABC <a class="heading-link" href="#a---new-generation-abc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>if文で分岐する</p> <h2 id="b---how-many"> B - How many? <a class="heading-link" href="#b---how-many"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>for文で全探索</p> <h2 id="c---distribution"> C - Distribution <a class="heading-link" href="#c---distribution"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>意外と難しかったと感じた割には灰diffらしい.</p> <p>まずは簡単のために,時計回りに並んでいない場合を考える. i番目のすぬけ君が初めて宝石をもらう時間を<code>time[i]</code>とすると, i(&gt;=2)番目のすぬけ君が初めて宝石をもらうのは <code>min(T_i, time[i-1]+S[i-1])</code>となるので, 前から順番に計算していけば良い.</p> <p>実際には時計回りに並んでいるため, 1番目のすぬけ君がN番目のすぬけ君から宝石をもらうのが最速である場合がある. これは<code>min(T_0, time[N]+S[N])</code>となるので,先ほどの式と併せて <code>min(T_i%N, time[(i-1)%N + S[(i-1)%N]])</code>と一般化できる. あとはこの式を2周ループすれば良い.</p> <h2 id="d---sum-of-maximum-weights"> D - Sum of Maximum Weights <a class="heading-link" href="#d---sum-of-maximum-weights"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>D問題にしては難しかった問題.</p> <p>まず,以下のことが言える.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>連結でない頂点u,vに対して辺(u,v)を考える時, </span></span><span style="display:flex;"><span>その辺を最短パスに含む頂点の組の個数は </span></span><span style="display:flex;"><span>(uの連結成分の個数)*(vの連結成分の個数) </span></span></code></pre></div><p>以上から,u,v連結でなく,辺(u,v)が「uの連結成分中の辺」「vの連結成分中の辺」の重みよりも大きい(つまり,辺(u,v)が重みの最大値)場合, 辺(u,v)を繋ぐことで重みの最大値の合計値は <code>(辺(u,v)の重み)*(uの連結成分の個数)*(vの連結成分の個数)</code>だけ増える.</p> <p>よって,重みの小さい辺から順番に連結していくことで,答えを求めることができる. 連結成分の個数はUnion Findなどで管理できる.</p> <h2 id="e---packing-under-range-regulations"> E - Packing Under Range Regulations <a class="heading-link" href="#e---packing-under-range-regulations"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解説AC.</p> 「世界は密室でできている」読了 https://t45k.github.io/blog/the_world_is_made_out_of_closed_rooms/ Thu, 05 Aug 2021 17:05:34 +0900 https://t45k.github.io/blog/the_world_is_made_out_of_closed_rooms/ <p>近所の図書館の図書カードをようやく作ったので, 舞城王太郎の「世界は密室でできている」を借りて読みました.</p> <p>思ったこと</p> <ul> <li>一冊のページ数が少ない上に,それぞれの話も短いので,作者の文体もあいまってサクサク読める</li> <li>「ルンババ12」や谷口氏の名前が出てきて,舞城作品だなってのを実感する</li> <li>珍しく分かりやすい気がする</li> <li>ちゃんとしたミステリ</li> </ul> ABC211の解説 https://t45k.github.io/kyopuro/abc211/ Mon, 26 Jul 2021 22:41:46 +0900 https://t45k.github.io/kyopuro/abc211/ <p>4完速解き失敗でレートが微減.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC211" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---blood-pressure"> A - Blood Pressure <a class="heading-link" href="#a---blood-pressure"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>けつあつそくてい.<code>double</code>で計算する.</p> <h2 id="b---cycle-hit"> B - Cycle Hit <a class="heading-link" href="#b---cycle-hit"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>セットを使うなり事前にソートするなりする.</p> <h2 id="c---chokudai"> C - chokudai <a class="heading-link" href="#c---chokudai"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>一部で炎上していた問題.簡単なDP</p> <h2 id="d---number-of-shortest-paths"> D - Number of Shortest paths <a class="heading-link" href="#d---number-of-shortest-paths"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>基本的にはダイクストラ.<br> 距離とは別に経路数の情報を持っておき,ある節点に到達したとき,</p> <ul> <li>その節点での距離の最小値を更新した場合,経路数をその経路の値に置き換える</li> <li>その節点での距離の最小値と同じ距離だった場合,経路数を足し合わせる</li> </ul> <p>という操作を行う</p> <h2 id="e---red-polyomino"> E - Red Polyomino <a class="heading-link" href="#e---red-polyomino"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解説AC.解きたかった. 赤に塗った盤面を全て記録しておいても十分メモリに余裕がある.</p> ABC210の解説 https://t45k.github.io/kyopuro/abc210/ Sun, 18 Jul 2021 14:18:29 +0900 https://t45k.github.io/kyopuro/abc210/ <p>四完青パフォ。 今回は D 速解きがそこそこ上手くいった一方で、E に歯が立たなかったので精進したい。 <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC210" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---cabbages"> A - Cabbages <a class="heading-link" href="#a---cabbages"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>A &gt; N</code>になりうるのがポイント<br></p> <ul> <li>A が N よりも小さい場合、A 個を X 円で買って、(N-A)個を Y 円で買う</li> <li>A が N 以上の場合、N 個を X 円で買う</li> </ul> <p>と場合分けする。</p> <h2 id="b---bouzu-mekuri"> B - Bouzu Mekuri <a class="heading-link" href="#b---bouzu-mekuri"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>愚直にシミュレーションする。 文字列を先頭から見ていき、初めに坊主を引いた方が負け。<br> <code>Stream#findFirst</code>を使うとすっきり書ける。</p> <h2 id="c---colorful-candies"> C - Colorful Candies <a class="heading-link" href="#c---colorful-candies"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>範囲内の飴ちゃんの種類を最大にする問題<br> 範囲をスライドさせていく。 具体的には、</p> <ol> <li>まずは先頭 K 個の飴の色と出現回数を辞書等を使って数えておく。この時の種類数を<code>X</code>とする。</li> <li>K+1 個目の飴の出現回数を 1 増やし、1 個目の飴を出現回数を 1 減らす。 この時、K+1 個目の飴が初登場なら<code>X</code>を 1 増やし、1 個目の飴の出現回数が 0 になったら<code>X</code>を 1 減らす。</li> <li>上の操作を、範囲をずらしながら繰り返す</li> <li><code>X</code>の最大値が答え</li> </ol> <h2 id="d---national-railway"> D - National Railway <a class="heading-link" href="#d---national-railway"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>意外と難しかったらしい。<br> まずは簡単のために 1 行しかない場合を考える。</p> ABC209の解説 https://t45k.github.io/kyopuro/abc209/ Sat, 10 Jul 2021 23:14:52 +0900 https://t45k.github.io/kyopuro/abc209/ <p>四完速解きで青パフォ. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC209" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---counting"> A - Counting <a class="heading-link" href="#a---counting"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>基本的には<code>B-A-1</code>だが,<code>A&gt;B</code>の時に限り0となる. <code>max(B-A-1, 0)</code>とすれば多少は楽.</p> <h2 id="b---can-you-buy-them-all"> B - Can you buy them all? <a class="heading-link" href="#b---can-you-buy-them-all"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>偶数番目の商品だけ-1して総和を計算するだけ.</p> <h2 id="c---not-equal"> C - Not Equal <a class="heading-link" href="#c---not-equal"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>まず,整数列を昇順にソートしても求めたい値は変わらない.<br> 1番目の値は全ての値から選ぶことができる. 2番目の値は1番目に選んだ値以外の値を選ぶので,<code>C2 - 1</code>通りから選べる. このとき,昇順にソートしているので選ぶ値の上限を考える必要がない. このように考えると,i番目の値は<code>Ci - (i-1)</code>から選ぶことができる. このとき,<code>(i-1) &gt;= Ci</code>となると値を選べなくなるので答えは0になる.<br> そうでない場合,答えは全ての選べる値を掛け合わせた値になる.</p> <h2 id="d---collision"> D - Collision <a class="heading-link" href="#d---collision"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>問題文から,与えられたグラフが木構造であることが分かる.<br> 木構造の場合,ある節点(a,b)の距離の偶奇は,頂点を一つ定めたときの<code>(頂点からaまでの距離)-(頂点からbまでの距離)</code>となる.<br> これは,例えば(a,b)の最小共通祖先をc,頂点(適当な節点)をd,二つの節点の距離を<code>dis(x,y)</code>と表す時,<code>(頂点からaまでの距離)-(頂点からbまでの距離)</code>の偶奇は</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>(dis(d,a) - dis(d,b)) % 2 </span></span><span style="display:flex;"><span>= (dis(d,c) + dis(c,a) + dis(d,c) + dis(c,b)) % 2 </span></span><span style="display:flex;"><span>= (dis(d,c) * 2 + dis(c,a) + dis(c,b)) % 2 </span></span><span style="display:flex;"><span>= (dis(c,a) + dis(c,b)) % 2 </span></span></code></pre></div><p>でa,b間の距離の偶奇と一致するからである.</p> ABC208の解説 https://t45k.github.io/kyopuro/abc208/ Sun, 04 Jul 2021 23:45:41 +0900 https://t45k.github.io/kyopuro/abc208/ <p>5完.初の黄パフォ.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC208" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---rolling-dice"> A - Rolling Dice <a class="heading-link" href="#a---rolling-dice"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Bの平均値について考えればよい. 平均が1以上6以下なら達成可能.</p> <h2 id="b---factorial-yen-coin"> B - Factorial Yen Coin <a class="heading-link" href="#b---factorial-yen-coin"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>大きい硬貨から貪欲に計算していく</p> <h2 id="c---fair-candy-distribution"> C - Fair Candy Distribution <a class="heading-link" href="#c---fair-candy-distribution"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>初めに国民番号で国民をソートしておく. 国民番号の上位<code>K%N</code>人は余計に1個多くもらえる.</p> <h2 id="d---shortest-path-queries-2"> D - Shortest Path Queries 2 <a class="heading-link" href="#d---shortest-path-queries-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ワーシャルフロイドを応用する.ワーシャルフロイドについては<a href="../warshallfloyd/" >こちら</a>を参照. ワーシャルフロイドの中継点を<code>k</code>とすると,<code>Math.min(graph[i][j], graph[i][k] + graph[k][j])</code>はiスタートjゴールでk以下の箇所を経由した際の最短距離となるので,問題に適当.</p> <h2 id="e---digit-products"> E - Digit Products <a class="heading-link" href="#e---digit-products"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>たまたま解けた問題.桁DP.<br> 桁DPとは,ある値<code>N</code>が与えられたときに各桁に対する遷移を以下のように行うDPを指す.</p> <ol> <li>一つ前で見ている桁の時点で,数字が<code>N</code>以下であることが確定している場合,<code>0~9</code>に遷移する</li> <li>数字が<code>N</code>以下であることが確定していない場合,<code>0~(今見ている桁の数-1)</code>への遷移(つまり,状態1に遷移する)と今見てる桁への遷移(状態2)への遷移を行う</li> </ol> <p>今回は,各桁の積が<code>K</code>以下になれば良いのだが,このとき積は十分に疎になるので連想配列などで持てば良い.</p> Keychron K3を購入した話 https://t45k.github.io/blog/keychron/ Fri, 11 Jun 2021 22:35:53 +0900 https://t45k.github.io/blog/keychron/ <p><a href="https://www.keychron.com/products/keychron-k3-wireless-mechanical-keyboard" class="external-link" target="_blank" rel="noopener">Keychron K3</a>を購入しました.</p> <p><img src="https://t45k.github.io/img/blog/keychron_box.JPG" alt="keychron_box"> <img src="https://t45k.github.io/img/blog/keychron.JPG" alt="keychron_box"></p> <h2 id="経緯"> 経緯 <a class="heading-link" href="#%e7%b5%8c%e7%b7%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>研究室ではRealforceを使っていたのですが,会社からはキーボードが支給されないと聞いたので,仕事用のキーボードを購入する必要が発生しました. 家では青軸のメカニカルキーボードを使っているので,その経験を踏まえて以下の要件を満たすキーボードを探しました.</p> <ul> <li>会社はフリーアドレスなので持ち運びに困らない.具体的には以下の通り. <ul> <li>軽い</li> <li>薄い</li> </ul> </li> <li>十分にコンパクト.個人的にはmagic keyboardと同じ配列がベスト</li> <li>もちろんUS配列</li> <li>Fn必須</li> <li>赤か茶軸のメカニカル,あるいは静電容量無接点</li> <li>できればmac対応</li> <li>新卒のお給料でも買える.1万円前後</li> </ul> <p>Fnが必要なことからHHKB,携帯性からRealforceは簡単に除外できました. Nizも割と魅力的だったのですが,右下の配置が独特なことと高いことから除外しました. メカニカルキーボードで上記の要件を満たすキーボードはいくつか見つかったのですが, 最終的に多機能かつ安価で評判も良い<code>Keychron K3</code>にしました.</p> <h2 id="注文から到着まで"> 注文から到着まで <a class="heading-link" href="#%e6%b3%a8%e6%96%87%e3%81%8b%e3%82%89%e5%88%b0%e7%9d%80%e3%81%be%e3%81%a7"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>注文は公式サイトからできます. 英語での住所&amp;電話番号入力が必要なので事前に調べておくと良いと思います.</p> <p>値段は本体74\$ + 配送料20\$の計94\$でした. paypalで支払いしたところ2021年6月現在で10,802円でした.</p> <p>6月5日(土)の23時過ぎに注文して到着したのが10日(木)の夜でした. 日曜を挟んでいたのを考えると割と早く届きました.</p> <h2 id="使用感"> 使用感 <a class="heading-link" href="#%e4%bd%bf%e7%94%a8%e6%84%9f"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ファーストインプレッション</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">感想<br>- サイズ感: 最高<br>- 打鍵感: 茶軸やけどロープロのせいで反発が弱め。同時押しになったり2回押しがうまくいかんかったりする<br>- キートップ: 柔らかめ、爪が食い込む感覚<br>- 傾斜: 低め、違和感ある<br>- レスポンス: 若干もっさりしてる<br><br>総評: サイズ感は最高やけどそれ以外は慣れが必要かなぁ</p>&mdash; task@FSE (@getupmax) <a href="https://twitter.com/getupmax/status/1402946711660621826?ref_src=twsrc%5Etfw">June 10, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>一日使ってみましたが,本当に慣れだと思います. 仕事が終わった後に家のキーボードを触ると,逆に重くてびっくりしました. 使っていくうちに好きになっていくと思います. 個人的にはdeleteを推すときのペチペチ音が好きです.</p> <h2 id="総評"> 総評 <a class="heading-link" href="#%e7%b7%8f%e8%a9%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>良い買い物をしたと思います. 現在は在宅なのですが,会社で使うのを楽しみにしています.</p> ABC200の解説 https://t45k.github.io/kyopuro/abc200/ Sun, 16 May 2021 11:57:55 +0900 https://t45k.github.io/kyopuro/abc200/ <p>祝200回. 4完.</p> <h2 id="a---century"> A - Century <a class="heading-link" href="#a---century"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ. X00年はX世紀であることに注意.</p> <h2 id="b---200th-abc-200"> B - 200th ABC-200 <a class="heading-link" href="#b---200th-abc-200"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.十分間に合う.</p> <h2 id="c---ringos-favorite-numbers-2"> C - Ringo&rsquo;s Favorite Numbers 2 <a class="heading-link" href="#c---ringos-favorite-numbers-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Ai-Aj=200ということはAi≡Aj(mod 200)であることなので, 各Aを,200で割ったあまりでグルーピングして組み合わせを計算すればよい.</p> <h2 id="d---happy-birthday-2"> D - Happy Birthday! 2 <a class="heading-link" href="#d---happy-birthday-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解説が賢い.</p> <p>先頭8個のAを見ると,2^8-1&gt;200から鳩の巣原理から必ずmod200が被る和の組み合わせが存在する. bit全探索するだけ.</p> <h2 id="e---patisserie-abc-2"> E - Patisserie ABC 2 <a class="heading-link" href="#e---patisserie-abc-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>きれいさ,おいしさ,人気度をそれぞれa,b,cとする.</p> <p>a+b+cの小さい順に何通りあるかを確認していく(<code>3 &lt;= sum &lt;= 3*N</code>). b,cが1以上N以下でないといけないことから,aの範囲は <code>max(1,sum-2n) &lt;= a &lt;= min(n,sum-2)</code>. このとき,bの範囲は <code>max(1,sum-a-n) &lt;= b &lt;= min(n,sum-a-1)</code>. a,bが決まればcは一意に定まる. このことから,a+b+cの和がsumの時, <code>Σ(a=max(1,sum-2n)~min(n,sum-2))(min(n,sum-a-1)-max(1,sum-a-n)+1)</code> 通りの選び方がある. これをO(1)で求める.</p> ZONeエナジー プログラミングコンテスト “HELLO SPACE” の解説 https://t45k.github.io/kyopuro/zone2021/ Sat, 15 May 2021 20:51:42 +0900 https://t45k.github.io/kyopuro/zone2021/ <p>奇跡的に5完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/other/zone2021" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---ufo襲来"> A - UFO襲来 <a class="heading-link" href="#a---ufo%e8%a5%b2%e6%9d%a5"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ</p> <h2 id="b---友好の印"> B - 友好の印 <a class="heading-link" href="#b---%e5%8f%8b%e5%a5%bd%e3%81%ae%e5%8d%b0"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>UFOとタワーの頂上を通る直線のy切片を求める.</p> <h2 id="c---mad-team"> C - MAD TEAM <a class="heading-link" href="#c---mad-team"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>通したけど嘘解法っぽい. 想定解法は二分探索.</p> <p>3人選ばないといけないのに対してN=3,000から二重ループまでしか回せない. 各要素が大きい人を選ぶほど良い結果を期待できる. つまり,各要素でソートして,上三つだけ残しておく. そして,ある二人を選んだ後に各要素のトップを加えてみて総合力を計算すれば良い.</p> <h2 id="d---宇宙人からのメッセージ"> D - 宇宙人からのメッセージ <a class="heading-link" href="#d---%e5%ae%87%e5%ae%99%e4%ba%ba%e3%81%8b%e3%82%89%e3%81%ae%e3%83%a1%e3%83%83%e3%82%bb%e3%83%bc%e3%82%b8"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>両端キューなどに対して文字を突っ込んでいく. このときに重複を排除する.</p> <h2 id="e---潜入"> E - 潜入 <a class="heading-link" href="#e---%e6%bd%9c%e5%85%a5"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ダイクストラをする.</p> 第二回日本最強プログラマー学生選手権の解説 https://t45k.github.io/kyopuro/jsc2021/ Sun, 02 May 2021 17:02:14 +0900 https://t45k.github.io/kyopuro/jsc2021/ <p>5完393位でパフォーマンス爆盛りした回。 <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/other/jsc2021" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---competition"> A - Competition <a class="heading-link" href="#a---competition"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>X,Y,Z&lt;=10^3</code>から、整数iに対して<code>Y/X &gt; i/Z</code>を満たす最大の値を探す。 <code>X=1,Y=1000,Z=1000</code>の時<code>i=999999</code>で最大になるので、そこから降順に探す。</p> <h2 id="b---xor-of-sequences"> B - Xor of Sequences <a class="heading-link" href="#b---xor-of-sequences"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ。 Set等で管理する。</p> <h2 id="c---max-gcd-2"> C - Max GCD 2 <a class="heading-link" href="#c---max-gcd-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>2からBの間で、AからBの間に2つの倍数を持つ最大の整数を求めれば良い。 ある整数をiとすると、A以上の最小のiの倍数は<code>(A + i - 1) / i * i</code>、 B以下の最大のiの倍数は<code>B/i*i</code>で求まるので、この二つの値が異なる最大のiを求める。</p> <h2 id="d---nowhere-p"> D - Nowhere P <a class="heading-link" href="#d---nowhere-p"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>まず<code>A_1</code>は1からP-1の<code>P-1</code>通り選べる。 次に<code>A_2</code>については1からP-1で、<code>P-A_1</code>でない<code>P-2</code>通りが選べる。 <code>A_3</code>以降についても、<code>P-sum%P</code>以外の<code>P-2</code>通りが選べるので、答えは<code>(P-1)*(P-2)^(N-1)</code></p> <h2 id="e---level-k-palindrome"> E - Level K Palindrome <a class="heading-link" href="#e---level-k-palindrome"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>基本的には、回文で対応する文字に対して、一番出現する文字に書き換えていく。</p> <p>まずはレベルを満たす最小の文字列に分解していく。 基本的には文字列を半分にするのを繰り返していく。 この時、各折り返し点が異なっている場合は書き換える。</p> <p>次に、それぞれの文字列を同一にしていく。 これは、各文字列の同じ位置に存在する文字のうち、マジョリティに書き換える。</p> <p>最後に各文字列が回文だった場合、そうならない様に書き換える。 これは、一つ前のマジョリティに書き換える処理を行う際に2番目に多い文字を記録しておき、 (中間点以外の)どこか一箇所をそれに書き換えれば良い。</p> JavaでN個の入力を良い感じにリストにする方法 https://t45k.github.io/kyopuro/stream/ Sun, 18 Apr 2021 18:05:46 +0900 https://t45k.github.io/kyopuro/stream/ <p>これが多分ベスト</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Stream.generate(scanner::nextInt) </span></span><span style="display:flex;"><span> .limit(N) </span></span><span style="display:flex;"><span> .collect(Collectors.toList()); </span></span></code></pre></div><p>配列にしたいときは</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>Stream.generate(scanner::nextInt) </span></span><span style="display:flex;"><span> .limit(N) </span></span><span style="display:flex;"><span> .mapToInt(Integer::intValue) </span></span><span style="display:flex;"><span> .toArray(); </span></span></code></pre></div> ABC198の解説 https://t45k.github.io/kyopuro/abc198/ Sun, 18 Apr 2021 17:47:27 +0900 https://t45k.github.io/kyopuro/abc198/ <p>ABCEの4完。 その後Dを通した。 惜しかった。 <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC198" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---div"> A - Div <a class="heading-link" href="#a---div"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>A君1個B君N-1個~A君N-1個B君1個までのN-1通り</p> <h2 id="b---palindrome-with-leading-zeros"> B - Palindrome with leading zeros <a class="heading-link" href="#b---palindrome-with-leading-zeros"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>意外と面倒臭い<br> 後ろの0を全て削ってから回文確認をする</p> <h2 id="c---compass-walking"> C - Compass Walking <a class="heading-link" href="#c---compass-walking"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>点(X,Y)までの距離がRの倍数だったらそのまま割る。 そうでなければ、直前まで直線に向かい、そこから2歩使って到着するのが最善。<br> 点(X,Y)がR未満の時答えが2になることに注意。</p> <h2 id="d---send-more-money"> D - Send More Money <a class="heading-link" href="#d---send-more-money"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>覆面算の条件から、使えるアルファベットは10種類以内になる(逆に、アルファベットが11種類以上の時、鳩の巣原理から数字が被ってしまう)。 あとは0~9までの順列をアルファベットに対応させて検証すれば良い。</p> <h2 id="e---unique-color"> E - Unique Color <a class="heading-link" href="#e---unique-color"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>木を深さ優先探索する。 今までに出現した色を記録する配列を<code>boolean[10^5+1]</code>とすると、以下のようなdfsで答えが求まる。</p> <ol> <li>頂点<code>x</code>に到達した時、<code>x</code>の色に対応する配列の値が<code>false</code>だった場合、 <code>x</code>と頂点1からのパスに<code>x</code>の色が存在しないので、<code>x</code>はよい頂点になる。</li> <li>逆に配列が<code>true</code>だった場合、よい頂点ではない。</li> <li><code>x</code>の色に対応する配列の値を<code>true</code>にする。</li> <li><code>x</code>の子に対して再帰的に上の手順を当てる。</li> <li><code>x</code>から登っていく(再帰関数を抜ける)時、<code>x</code>がよい頂点だったら、配列の値を<code>false</code>にしておく。</li> </ol> 作ったもの https://t45k.github.io/product/ Thu, 25 Mar 2021 11:07:17 +0900 https://t45k.github.io/product/ <h2 id="githubcontributionbot"> <a href="https://github.com/T45K/GHCBotForLambda" class="external-link" target="_blank" rel="noopener">GitHubContributionBot</a> <a class="heading-link" href="#githubcontributionbot"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>GitHub のコントリビューション(草の生え具合)について Twitter で報告してくれるボット. 0 時になると</p> <ul> <li>その日のコントリビューション数</li> <li>その日までの連続コントリビューション日数(Streak)</li> </ul> <p>を呟いてくれる.</p> <p>技術的には定時に GitHub のトップページをスクレイピングしてるだけ.</p> <p>何か<a href="https://contributter.potato4d.me/" class="external-link" target="_blank" rel="noopener">似たようなサービス</a>が出てきて草が生えた. サービスとして公開しておくべきだった 🤔</p> <h2 id="clione"> <a href="https://github.com/T45K/CLIONE" class="external-link" target="_blank" rel="noopener">CLIONE</a> <a class="heading-link" href="#clione"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <img src="https://t45k.github.io/img/logo.png" width="20%"> <p>類似コードの修正漏れを教えてくれるボット. GitHub Apps を用いて設計されていて,PR の作成ごとに勝手に通知を飛ばしてくれる.</p> <p>論文は<a href="https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?D=675" class="external-link" target="_blank" rel="noopener">こちら</a></p> <h2 id="nil"> <a href="https://github.com/kusumotolab/NIL" class="external-link" target="_blank" rel="noopener">NIL</a> <a class="heading-link" href="#nil"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>類似コード検出ツール.</p> <p>既存のツールでは検出が難しかった「コピペされた後に大量の変更が行われた類似コード」を検出できるように設計されている. また,N-gram と転置索引を組み合わせることで高速な検出が可能となっている.</p> <p>論文は<a href="https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?D=669" class="external-link" target="_blank" rel="noopener">こちら</a></p> <h2 id="bitbucket-server-code-insights-plugin"> <a href="https://github.com/T45K/Bitbucket-Server-Code-Insights-plugin" class="external-link" target="_blank" rel="noopener">Bitbucket-Server-Code-Insights-plugin</a> <a class="heading-link" href="#bitbucket-server-code-insights-plugin"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>BitBucket Server で、PR の diff 上にコメントのようなものを表示できる機能、Code Insights を利用するための Jenkins プラグイン。 Checkstyle や SpotBugs といった静的解析ツールや、SonarQube と行ったシステムの実行結果を PR の diff 上に表示できる。</p> <h2 id="back-merge-plugin"> <a href="https://github.com/T45K/Back-Merge-plugin" class="external-link" target="_blank" rel="noopener">Back-Merge-plugin</a> <a class="heading-link" href="#back-merge-plugin"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>main ブランチが更新された時に、main ブランチから各派生ブランチ向けへの PR を作成する Jenkins プラグイン。</p> 大阪大学大学院情報科学研究科修士課程を修了した話 https://t45k.github.io/blog/graduation/ Wed, 24 Mar 2021 21:17:20 +0900 https://t45k.github.io/blog/graduation/ <p>2021年3月24日をもって修士課程を修了しました.</p> <blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">3年間の戦績は<br><br>論文誌採録*1<br>論文誌条件付き採録*1<br>国際会議採録*2<br>国際会議査読中*1<br>研究会原稿*3<br>で現状不採録0です<br><br>対ありでした</p>&mdash; task@減塩 (@getupmax) <a href="https://twitter.com/getupmax/status/1374691521174282242?ref_src=twsrc%5Etfw">March 24, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>研究室に所属して3年間色んなことがあった気がするので書き留めておきます.</p> <h2 id="所属前"> 所属前 <a class="heading-link" href="#%e6%89%80%e5%b1%9e%e5%89%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>大学に入学してからプログラミングを始めたが結構楽しめていたので,「ソースコードを書くこと」について研究できれば良いなぁと漠然と考えていた. 阪大基礎工学部情報科学科では3回生の時に各研究室の先生に着いてゼミが行われるので,前期後期ともにソフトウェア工学の研究室のゼミに参加した. 前半は「リファクタリング」について,後半は「ソースコードメトリクス」についてのゼミで,前半にゼミを担当していた先生が何となく面白そうだったので,その研究室の配属を目標にした.</p> <h2 id="b4"> B4 <a class="heading-link" href="#b4"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="4月"> 4月 <a class="heading-link" href="#4%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>無事目標の研究室に配属. 配属後リファクタリング的なネタをやりたいと伝える. 論文を渡されてネタを探すように言われる. 当然研究室に入ったばかりで自分ですんなりネタを決めれるわけもなく, 指導教員の先生とミーティングをするも会話が噛み合わないことが多く, 険悪な雰囲気になることが多かった気がする (主観的だが,口調が若干きつかったと感じることが多かった). この頃から何となく「この先生とは一生分かり合えないんだろうなぁ」って思うようになり,苦手になる.</p> <h3 id="6月"> 6月 <a class="heading-link" href="#6%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>ネタが決まる(先生が決めてくれた)のでとりあえずやっていく. 相変わらずミーティングでは嚙み合わないことが多かった. まあB4のはじめの頃はみんなこんなもんだろうと思い込んで過ごす. 「研究室 辛い」などで検索するようになる. 自分の打たれ弱さを実感する.</p> <h3 id="7月"> 7月 <a class="heading-link" href="#7%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>院試休み. 研究室行かずに済んでラッキーくらいの気持ちでいた. 院試で研究室変えるのも手だったが負けた気分になるのでそのまま出した. 院試後はそのまま夏休みだったのでしばらく研究のことを忘れる.</p> <h3 id="10月"> 10月 <a class="heading-link" href="#10%e6%9c%88"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>研究が再開する. 少しずつ進めていくが,コミュニケーションも含めて上手くいかないことが圧倒的に多くなり,常に辛い状態になる. この頃から常に死にたいと思うようになる. バイク運転中に信号無視した車が突っ込んできたらなぁみたいなことをずっと考えていた. しばらくそんな感じ.</p> <p>同時期に,たまたまTwitter上でPaizaの広告を見かける. プログラミング能力を客観的に評価してもらえることがそれまでほとんどなかったことと, 研究が辛くなった時のために就職も考えないとということでとりあえずやってみる. Paizaは解答解説がないので,プログラミング力を付けるのには不向きだと思い, AtCoderをやり始める.</p> ABC196の解説 https://t45k.github.io/kyopuro/abc196/ Sat, 20 Mar 2021 23:48:43 +0900 https://t45k.github.io/kyopuro/abc196/ <p>惜しくも4完. E問題で一ヵ所凡ミスがあって1WAだった. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC196" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---difference-max"> A - Difference Max <a class="heading-link" href="#a---difference-max"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>x-y</code>が最大になるのは<code>x</code>が最大かつ<code>y</code>が最小の時. <code>x</code>の最大値は<code>b</code>であり,<code>y</code>の最小値は<code>c</code>なので,答えは<code>b-c</code>.</p> <h2 id="b---round-down"> B - Round Down <a class="heading-link" href="#b---round-down"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>100桁の小数が与えられるので,Xを数値として読み込むのは厳しい. 一旦文字列として読み込み,それの整数部を計算する. 文字列中に<code>.</code>が存在しないならその文字列をそのまま, 存在するなら<code>.</code>で分割し,前半の文字列を出力すれ良い.</p> <h2 id="c---doubled"> C - Doubled <a class="heading-link" href="#c---doubled"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>一見難しそうに見えるが,全探索すれば良い. 12桁の整数全ては調べられないが,条件は<code>前半と後半が等しい</code>なので, 下6桁まで(<code>1~999,999</code>)だけを確認すれば良い. <code>1~999,999</code>までの数値を2回繰り返した整数がNよりも小さいかを判定する.</p> <h2 id="d---hanjo"> D - Hanjo <a class="heading-link" href="#d---hanjo"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>HW &lt;= 16</code>という条件から,全探索をしてみる. 1畳の畳の置き方の問題なので,半畳の方は考えなくて良い(余った箇所に詰めれる). 部屋を1メートル毎に分割し<code>(i,j)</code>と表現するとすると, 各<code>(i,j)</code>に対して,</p> <ol> <li>(置けるけど)畳を置かない</li> <li>畳を縦に置く</li> <li>畳を横に置く</li> </ol> <p>の3通りの選び方があるので,再帰関数等を使って, 深さ優先探索で全てを試せば良い.</p> <h2 id="e---filters"> E - Filters <a class="heading-link" href="#e---filters"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>N&lt;=2*10^5</code>,<code>Q&lt;=2*10^5</code>から全ての<code>xi</code>に対して各関数を当てると間に合わないので, 1つの関数を全<code>X</code>に<code>log(Q)</code>に当てることを考える. そうすると,先に<code>X</code>をソートしておいて, 関数を当てる箇所を二分探索で探せば良いことが何となく分かる.</p> <ul> <li><code>ti=1</code>のとき,<code>ai</code>の値は最後に加算しても問題ない. <code>sum</code>などの変数に加算しておき,最後に計算する.</li> <li><code>ti=2(max)</code>のとき,&ldquo;ソート済み<code>X</code>の<code>ai</code>以下の値が全て<code>ai</code>になる&quot;と考える. 二分探索で<code>ai</code>以下の値の場所を求めて,その場所から左側の値は全て<code>ai</code>になることを記録しておく.</li> <li><code>ti=3(min)</code>のときも同様.</li> </ul> ARC113の解説 https://t45k.github.io/kyopuro/arc113/ Mon, 22 Feb 2021 15:03:58 +0900 https://t45k.github.io/kyopuro/arc113/ <p>ABCの3完で緑パフォ.<a href="https://github.com/T45k/kyopuro/tree/master/AtCoder/ARC/ARC113" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---abc"> A - A<em>B</em>C <a class="heading-link" href="#a---abc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>実は一番時間がかかった問題. Aを固定した時に,BとCの組み合わせは<code>O(K)</code>で求まる (BがNの時,Cは<code>1~K/N</code>の値を取りうるので,組み合わせの個数は<code>K/N</code>になる). よって,Aを1からKまで動かしつつ,<code>B*C&lt;=K/A</code>を満たすB*Cの組み合わせを求めることになる. Aを動かしてもK/Aが変わらないときは,B,Cの組み合わせの個数も変わらない. なので,B,Cの組み合わせの個数をメモしておく.</p> <p>個人的には計算量の見積もりが厳しい. 入力を考えるのは簡単なので,とりあえず実装してみて一番時間がかかりそうな入力(2*10^5)を突っ込んで時間計ってみるのが良さそう.</p> <h2 id="b---abc"> B - A^B^C <a class="heading-link" href="#b---abc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>A^B^Cの1の位は10で割った余りなので,(A%10)^B^Cと答えは同じ. 次にA%10の累乗の1の位がループする回数を求める. 例えば,2の場合,2の累乗の1の位は<code>2 -&gt; 4 -&gt; 8 -&gt; 6 -&gt; 2</code>と4回毎にループすることが分かる. これから,ループする回数をNとすると,B^CをNで割った余りを求めれば良い. 繰り返し二乗法を使えば<code>O(log(C))</code>で<code>B^C % N</code>を求められるので十分間に合う.</p> <h2 id="c---string-invasion"> C - String Invasion <a class="heading-link" href="#c---string-invasion"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>あるアルファベット<code>α</code>が二回連続で並んでいるときに,その後ろにあるアルファベットを全て<code>α</code>に置換できると考えると楽. このとき,αの後ろにある全てのアルファベットの内,αではないアルファベットの個数回操作を行える. この操作はなるべく後ろからしていくのが最適なので,以下の手順で解けばよい.</p> <ol> <li>後ろからアルファベットを見ていく.この時,アルファベットの種類毎の個数を記録する.</li> <li>二回連続しているアルファベット<code>α</code>があれば,これまで記録してきた<code>α</code>ではないアルファベットの個数回操作を行える.</li> <li>操作を行うと,今見ている以降の全てのアルファベットが<code>α</code>になるので,そのように個数を記録し直す.</li> </ol> 鶏白湯ラーメンの作り方 https://t45k.github.io/blog/toripaitan/ Mon, 22 Feb 2021 14:28:05 +0900 https://t45k.github.io/blog/toripaitan/ <p>ラーメンが好きなので,鶏ガラを使って鶏白湯ラーメンを作りました.</p> <p><img src="https://t45k.github.io/img/blog/ramen.JPG" alt=""></p> <h2 id="材料1人前"> 材料(1人前) <a class="heading-link" href="#%e6%9d%90%e6%96%991%e4%ba%ba%e5%89%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="スープ"> スープ <a class="heading-link" href="#%e3%82%b9%e3%83%bc%e3%83%97"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li>鶏ガラ2羽分</li> <li>玉ねぎ半個</li> <li>ニンニクひとかけ</li> <li>ショウガ適量</li> <li>(お好みで手羽元とかネギの青い部分とか)</li> </ul> <h3 id="タレ"> タレ <a class="heading-link" href="#%e3%82%bf%e3%83%ac"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li>醤油100cc</li> <li>みりん100cc</li> <li>(半分ずつでも良さそう)</li> </ul> <h3 id="具材"> 具材 <a class="heading-link" href="#%e5%85%b7%e6%9d%90"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li>鶏モモ1枚(鶏チャーシュー用)</li> <li>玉ねぎ半個(薬味用)</li> <li>卵一個(味玉)</li> <li>(お好みでメンマ等)</li> </ul> <p>麺は既製品を使いました</p> <h2 id="作り方"> 作り方 <a class="heading-link" href="#%e4%bd%9c%e3%82%8a%e6%96%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ol> <li>タレの材料を混ぜ合わせて煮切る. できたものを室温程度に冷ます.</li> <li>鶏ガラは解凍しておく. 鍋に水を張り鶏ガラを茹でる. アクが出てきたら水を替える. 鍋にスープの材料と新しい水を入れ,8時間くらい炊く (水が減ってきたら適宜足していく).</li> <li>具材の鶏モモはスープと一緒に30分程度茹でる. 茹であがったものを冷ましておいたタレに漬けておく. 卵は半熟に茹で,これもタレに漬けておく. 玉ねぎはみじん切りにし,分量外の酢に漬けておく.</li> <li>スープを8時間程度炊いたら,中の具材を取り除いたうえで, 一人分のスープの量になるくらいまで煮詰める.</li> <li>器にスープ,タレ(全部使うと濃いので適量で),麺,具を入れて完成.</li> </ol> <h2 id="感想"> 感想 <a class="heading-link" href="#%e6%84%9f%e6%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">スープ: 100点.メチャウマ.その辺のラーメン屋より旨い気がする<br>麺: 縮れてないほうが好き.まぁ既製品なので<br>チャーシュー: パサい.鶏肉をしっとり仕上げるのはむずそう<br>煮卵: 硬い.茹ですぎた<br>玉ねぎ酢漬け: 適量やと口がさっぱりしてええ感じ.若干主張が強い</p>&mdash; 教授のおごりで寿司@SIGSE (@getupmax) <a href="https://twitter.com/getupmax/status/1363069728407777282?ref_src=twsrc%5Etfw">February 20, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> ABC192の解説 https://t45k.github.io/kyopuro/abc192/ Sun, 21 Feb 2021 17:56:33 +0900 https://t45k.github.io/kyopuro/abc192/ <p>研究も一段落付いたので競プロに復帰します.</p> <p>今回はABCDの4完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC192" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---star"> A - Star <a class="heading-link" href="#a---star"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Xは高々10^5なのでごり押しでもできますが, 100からXを100で割った余りを引くと<code>O(1)</code>で求まります.</p> <h2 id="b---unreadable-string"> B - uNrEaDaBlE sTrInG <a class="heading-link" href="#b---unreadable-string"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>for文で回すだけ. 大文字,小文字判定はJavaだと<code>Character#isUpper(Lower)Case</code>を使うと一発.</p> <h2 id="c---kaprekar-number"> C - Kaprekar Number <a class="heading-link" href="#c---kaprekar-number"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>一見難しそうに見えますが,<code>N&lt;=10^9</code>からNをソート対象の要素は高々9個なので, K=10^5から毎回<code>f(x)</code>を計算しても十分間に合います. ということで</p> <ol> <li>xをchar型配列に変換する</li> <li>g1がxを降順にソートして得られる値,g2が昇順ソートで得られる値になる</li> <li>x = f(x) をK回繰り返せばOK</li> </ol> <h2 id="d---base-n"> D - Base n <a class="heading-link" href="#d---base-n"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>E問題より解いた人が少なかったD問題.</p> <p>まずXが一文字の時,何進数であってもXのn進数表記の値は変わらないため, <code>X &lt;= M</code>なら1,そうでなければ0を出力する.</p> <p>次にXが二文字以上の時は,伝家の宝刀二分探索をする. dから10^18+1の範囲から初め, XをN進数表記にしたときにMを超過しない最大のNを求める. ちなみにXのN進数表記を計算するときは<code>BigInteger</code>を使うことをオススメします (オーバーフローを考慮したうえでlongを使うと1WAになった).</p> <h2 id="e---train"> E - Train <a class="heading-link" href="#e---train"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>出発できる時刻を考慮したうえでDijkstraをするだけ.</p> 情報処理学会論文誌に論文が採録された話 https://t45k.github.io/blog/ipsj_journal/ Sun, 17 Jan 2021 17:38:48 +0900 https://t45k.github.io/blog/ipsj_journal/ <p>情報処理学会論文誌に卒論でやっていた研究が採録されました.情報は<a href="https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?D=677" class="external-link" target="_blank" rel="noopener">こちら</a>.</p> <h2 id="論文誌とは"> 論文誌とは <a class="heading-link" href="#%e8%ab%96%e6%96%87%e8%aa%8c%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>研究をしている以上,その成果を論文としてまとめる必要があります. 論文は大きく分けて以下の4種類に大別されます(僕が知る限り).</p> <ul> <li>論文誌論文 <ul> <li>別名: ジャーナル(journal)</li> <li>研究の最終成果を投稿する場</li> <li>採録されると雑誌として掲載される</li> <li>学術的貢献が求められる</li> <li>査読が行われる(査読とは,投稿された論文が学術的な有用性,信頼性に足るものかを他の研究者が判断するプロセスを指す)</li> <li>一般的に採録率は低いらしい.<a href="https://search.ieice.org/statistics.html" class="external-link" target="_blank" rel="noopener">電子情報通信学会</a>だと5割弱.</li> <li>投稿時に惜しくも採録に至らないと判定されても,条件付き採録として論文の修正を求められることが多い.</li> <li>国内だと情報処理学会や電子情報通信学会の論文誌に投稿することが多い</li> </ul> </li> <li>会議論文 <ul> <li>別名: 予稿集(inproceedings)</li> <li>レベルがピンキリ.採録率もピンキリ</li> <li>投稿目的もピンキリ.研究の最終成果発表から,アイデアの議論まで</li> <li>基本的に査読がある</li> <li>トップの会議だと条件付き採録もあったりするらしい.普通は一発採録</li> <li>採録されると開催場所での発表が求められる.海外旅行に行ける</li> <li>学術的貢献だけじゃなくてアイデアの面白さ,発表映えするかとかも重要</li> <li>発表がある都合上,投稿締め切りが設けられる</li> </ul> </li> <li>研究会論文 <ul> <li>別名: 技術報告(report)</li> <li>基本的に研究途中での成果の報告,アイデアの議論が目的</li> <li>査読がない</li> <li>発表がメイン.国内旅行に行ける</li> </ul> </li> <li>学位論文 <ul> <li>別名: thesis</li> <li>学位を取得するための論文</li> <li>卒論,修論は査読がない</li> <li>ので,書けば大丈夫</li> </ul> </li> </ul> <p>今回は論文誌論文として採録されました.</p> <h2 id="道のり"> 道のり <a class="heading-link" href="#%e9%81%93%e3%81%ae%e3%82%8a"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>2019年に書いた卒論の内容が2021年に採録されたことから察せられるように, 採録までの道のりが非常に長かったです. そもそも卒論を書いてから国際学会投稿,論文誌投稿とステップを踏むことが多いのですが, 僕の場合は作ったツールのクオリティが低すぎたため,ツールを作り直して実験をし直すとこから始まりました. この時プログラミングを指導してくれた一つ上の先輩には本当にお世話になりました. このプログラミング指導のおかげで修士では特にツール作りに苦労することがなく研究を進められました.</p> <p>一方,既存のツールが動かないという問題のせいで実験は全然進みませんでした. 本当にM1のほとんどはツールを動かすのに苦心していたと思います. 結局技術的に強い友人に相談したところ,3日で動いたのでもったいない時間の使い方をしたなぁって気分になりました.</p> <p>結局論文を投稿できたのが2020年の2月初めで,条件付き採録通知が来たのが11月, 修正と再投稿を行い,採録されたのが2021年の1月となりました.</p> <p>感想としては,嬉しいのが半分,ようやく終わったと安心したのが半分です. 自分としてはこの研究テーマに自身がなかったので,早く終わらしたかったという気持ちもありました. 本当に時間がかかったので,採録されたのは達成感があります.</p> <p>最後に,論文投稿のきっかけをくれた教授, 何度も論文を添削してくれた指導教員, そしてプログラミングを教えてくれた先輩に心から感謝します.</p> APSEC2020に参加した話 https://t45k.github.io/blog/apsec_2020/ Sat, 05 Dec 2020 00:12:03 +0900 https://t45k.github.io/blog/apsec_2020/ <p>12/2~4にオンラインで開催されたAPSECに参加してきました.</p> <h2 id="apsecとは"> APSECとは <a class="heading-link" href="#apsec%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="../apsec_2019" >APSEC2019に参加した話</a>参照.</p> <p>M2の4月終わりから研究し始めた,重複コードの修正支援ボットの論文をERA(Early Research Achievement)に投げました(<a href="https://sdl.ist.osaka-u.ac.jp/pman/pman3.cgi?DOWNLOAD=536" class="external-link" target="_blank" rel="noopener">論文</a>).<br> Acceptance rateはTechnical Researchが36.9%(45/122),ERAが46.2%(12/26)らしかったです.<br> ERAのacc. rateが高いのでレベルは推して知るべしという感じです.</p> <h2 id="感想"> 感想 <a class="heading-link" href="#%e6%84%9f%e6%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>コロナの影響で,APSECに限らず国際会議は軒並みオンラインになってしまいました.<br> 国際会議は,成果発表の他に観光という側面もあるので,そういった意味ではモチベーションはあまり高くなかったです.<br> 一方,オンラインのおかげ喋る内容を覚えずに済むという利点もありました.<br> 発表ですが,チェアの方すら質問しないという謎の現象が発生したおかげで,良くも悪くも英語での質疑応答がなかったです.</p> <p>オンライン会議の悪い側面として,聴衆が参加しにくいというのが挙げられるかなと感じました.<br> 現地開催の場合,現地にいるのであまり興味がないトラックに参加したり,その結果質疑が盛り上がったりすることがあると思います.<br> 一方,オンラインの場合は自分と関係ない発表を聞く必要がないので,あまり盛り上がらないと感じました(僕も自分のトラック以外一切参加しませんでした).</p> <p>コロナが一刻も早く収束して,元のように会議ができればと思います.</p> 「九十九十九」読了 https://t45k.github.io/blog/999/ Thu, 26 Nov 2020 16:19:02 +0900 https://t45k.github.io/blog/999/ <p><strong>苦しさを感じるなら、僕なんて愛さなくていいんだ</strong></p> <p>舞城王太郎の「九十九十九」を読みました. この本はJDCトリビュートの一冊となっており, 清涼院流水のJDCシリーズに登場する登場人物九十九十九と同じ名前を持つ人物が主役となっています.</p> <p>内容としては, やっぱり舞城王太郎特有のスピード感と超メタ表現のせいで難解になっていました. とりあえず二周しましたが,全然分からなかったです. 作中作と再帰的な構成が本当によく分からなくなります.</p> <p>ただ,これがディスコ探偵水曜日の前に書かれた本だと言われると納得します(書き方や登場人物を含めていろんな共通点がある). ディスコ探偵水曜日が楽しめる人なら楽しく読めるのではないでしょうか. 繰り返し読むと理解が深まりそうではあるので, 購入を検討してむ良いかなと思いました.</p> <p>次は清涼院流水の「カーニバル・イブ」を読む予定です.</p> 西日本近似的一周旅行五日目 https://t45k.github.io/blog/tour_day5/ Sat, 05 Sep 2020 18:49:05 +0900 https://t45k.github.io/blog/tour_day5/ <p>五日目は帰宅の日でした. 走行距離は500kmほどです.</p> <p>まずはUFOラインを通って高知まで行きました. UFOラインは愛媛と高知を結ぶ山道です. <figure><img src="https://t45k.github.io/img/blog/ufo_line.JPG" width="50%" height="50%"> </figure> UFOラインは天空の道とも呼ばれるほど,道の標高が高いです(1,700mくらい). なので,周りの山々を一望でき,とても景色を楽しめました. 道自体は非常に狭いので,車で行く際には注意してください.</p> <p>高知では,ひろめ市場でカツオのたたきをいただきました. <figure><img src="https://t45k.github.io/img/blog/katsuo.JPG" width="50%" height="50%"> </figure> カツオのハランボ(お腹の部分.マグロで言うトロ)が脂が乗っておりとても美味しかったです.</p> <p>お昼ご飯を食べ終わってから,大阪に帰りました. 途中大雨に振られたので,PAで休み休みしながら帰りました.</p> <p><a href="../tour_day1/" >一日目</a> <a href="../tour_day2/" >二日目</a> <a href="../tour_day3/" >三日目</a> <a href="../tour_day4/" >四日目</a> 五日目</p> 西日本近似的一周旅行四日目 https://t45k.github.io/blog/tour_day4/ Fri, 04 Sep 2020 18:48:58 +0900 https://t45k.github.io/blog/tour_day4/ <p>四日目は指宿からフェリーを使って道後まで行きました. 走行距離は500kmくらいでした.</p> <p>まずはじめに宮崎県にある青島神社に行きました. <figure><img src="https://t45k.github.io/img/blog/aoshima_shrine1.JPG" width="50%" height="50%"> </figure> <figure><img src="https://t45k.github.io/img/blog/aoshima_shrine2.JPG" width="50%" height="50%"> </figure> 青島神社は島全体が神社になっています. また,島の周りの独特な形状をした岩は,自然にできたものだそうです. フェリーの時間を考えてお昼ご飯は食べませんでした(が,実はこの後高速で道を間違えたので,結局ギリギリになりました).</p> <p>大分の佐賀関からフェリーに乗り,愛媛へ向かいました. バイクでフェリーに乗るのは初めてだったので,ワクワクしました.</p> <p>愛媛に着いてからは道後温泉を目指しました. 途中で海に近い駅として有名な下灘駅があったので立ち寄ってきました. <figure><img src="https://t45k.github.io/img/blog/shimonada_station.JPG" width="50%" height="50%"> </figure> 綺麗な夕焼けをバックにエモい写真を取りたかったのですが,曇っていたためうまく映えませんでした. また,この駅は海のすぐ隣にあると思っていたのですが,実は道路を一本挟んでいます.</p> <p>夜は道後温泉の近くに止まりました. お風呂は道後温泉本館に行きました. <figure><img src="https://t45k.github.io/img/blog/dougo.JPG" width="50%" height="50%"> </figure> 道後温泉本館はおそらく現存する最古の大衆浴場で,お風呂や扉の作りから古くからあるのが見て取れました. 全国的に有名ですが,現在も伝統を守っており,不必要な拡張などは行われていませんでした (逆に言うと,思ったよりしょぼかったです. 中はシャワーと大きな湯船が一つだけでした).</p> <p><a href="../tour_day1/" >一日目</a> <a href="../tour_day2/" >二日目</a> <a href="../tour_day3/" >三日目</a> 四日目 <a href="../tour_day5/" >五日目</a></p> 西日本近似的一周旅行三日目 https://t45k.github.io/blog/tour_day3/ Thu, 03 Sep 2020 16:17:59 +0900 https://t45k.github.io/blog/tour_day3/ <p>三日目は熊本を経由して鹿児島の指宿に行きました. 走行距離は400kmくらいです.</p> <p>大分から熊本へは,やまなみハイウェイを使いました. やまなみハイウェイは景観が良いことで有名なのですが, あいにく天気が崩れてしまい,霧がかって何も見えませんでした. バイクで雨の中を移動したため,体がとても冷えた上に バイクを傾けたら滑りそうになったこともあって死ぬかと思いました.</p> <p>熊本県では研究室の先生おすすめの天外天さんのラーメンを食べました. <figure><img src="https://t45k.github.io/img/blog/tengaiten.JPG" width="50%" height="50%"> </figure> かかっているニンニクパウダーの香りが良く,美味しかったです.</p> <p>その後ひたすら南下し指宿温泉まで行きました. また,指宿温泉の近所の龍宮神社に行きました. <figure><img src="https://t45k.github.io/img/blog/ryugu_shrine.JPG" width="50%" height="50%"> </figure> 龍宮神社はその名の通り,浦島太郎の物語の発祥となった神社です.</p> <p>晩御飯は近所のイオンで買った鶏のたたきと芋焼酎にしました. イオンで普通に生食用の鶏肉が売ってたり,焼酎の品揃えが異様に良かったりしたところに鹿児島を感じました. イオンから桜島が見えました. <figure><img src="https://t45k.github.io/img/blog/sakurajima.JPG" width="50%" height="50%"> </figure> </p> <p><a href="../tour_day1/" >一日目</a> <a href="../tour_day2/" >二日目</a> 三日目 <a href="../tour_day4/" >四日目</a> <a href="../tour_day5/" >五日目</a></p> 西日本近似的一周旅行二日目 https://t45k.github.io/blog/tour_day2/ Wed, 02 Sep 2020 19:28:19 +0900 https://t45k.github.io/blog/tour_day2/ <p>2日目は広島県を経由して大分まで行きました. 1日で500km以上移動したので結構疲れました.</p> <p>厳島神社(修理中の姿) <figure><img src="https://t45k.github.io/img/blog/itsukushima_shrine.JPG" width="50%" height="50%"> </figure> 大鳥居が見れなくて残念でした.</p> <p>お昼ご飯の「あなごめし うえの」さんの穴子めし <figure><img src="https://t45k.github.io/img/blog/anagomeshi.JPG" width="50%" height="50%"> </figure> 今まで,穴子は鰻の下位互換と考えていましたが,ここの穴子めしは本当に美味しくて, その考えが覆されました. 穴子が肉厚で弾力があり,それが炭火で焼かれていて香ばしかったです.</p> <p>次に,山口にある錦帯橋に行きました. <figure><img src="https://t45k.github.io/img/blog/kintai_bridge.JPG" width="50%" height="50%"> </figure> 本来予定にはなかったのですが,どうやら広島,山口ツーリングではそこに行くのが鉄板らしかったので.</p> <p>その後,福岡を素通りして大分にある別府温泉に行きました. 本州と九州を繋ぐ橋で風が強すぎて半車線くらい流された時は死ぬかと思いました. 高速道路で道を間違えて次のICでUターンする経験もしました. 晩御飯は近くの居酒屋で取りました. 大分名物のとり天や豊後アジ,豊後サバを楽しみました. <figure><img src="https://t45k.github.io/img/blog/toriten.JPG" width="50%" height="50%"> </figure> <figure><img src="https://t45k.github.io/img/blog/saba.JPG" width="50%" height="50%"> </figure> </p> <p><a href="../tour_day1/" >一日目</a> 二日目 <a href="../tour_day3/" >三日目</a> <a href="../tour_day4/" >四日目</a> <a href="../tour_day5/" >五日目</a></p> 西日本近似的一周旅行一日目 https://t45k.github.io/blog/tour_day1/ Tue, 01 Sep 2020 19:28:19 +0900 https://t45k.github.io/blog/tour_day1/ <p>1日目は島根県に行きました. 1日で400km近くバイクで移動しましたが,高速がメインだったのでそこまで疲れませんでした. 高速を降りてからヘルメットを確認してみると,移動中にぶつかったであろう小さい虫の死骸がたくさんへばりついていました&hellip;</p> <p>出雲大社 <figure><img src="https://t45k.github.io/img/blog/izumo_taisha.JPG" width="50%" height="50%"> </figure> </p> <p>お昼ご飯の出雲そば. 出雲そばはそばを3つの器に分けて提供するのが特徴的です. <figure><img src="https://t45k.github.io/img/blog/izumo_soba.JPG" width="50%" height="50%"> </figure> </p> <p>チェックインまで時間があったので松江城にも行きました. <figure><img src="https://t45k.github.io/img/blog/matsue_castle.JPG" width="50%" height="50%"> </figure> </p> <p>宿に着いた途端に立ちゴケしてブレーキレバーを壊しました. <figure><img src="https://t45k.github.io/img/blog/brake_broken.JPG" width="50%" height="50%"> </figure> </p> <p>夕飯は,松江のイオンで買った地酒とお寿司でした. <figure><img src="https://t45k.github.io/img/blog/shimane_zizake.JPG" width="50%" height="50%"> </figure> </p> <p>一日目 <a href="../tour_day2/" >二日目</a> <a href="../tour_day3/" >三日目</a> <a href="../tour_day4/" >四日目</a> <a href="../tour_day5/" >五日目</a></p> ABC177の解説 https://t45k.github.io/kyopuro/abc177/ Sun, 30 Aug 2020 16:35:35 +0900 https://t45k.github.io/kyopuro/abc177/ <p>5完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC177" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---dont-be-late"> A - Don&rsquo;t be late <a class="heading-link" href="#a---dont-be-late"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>規定の時間歩き切った際の距離が待ち合わせ場所までの距離以上であれば良い.</p> <h2 id="b---substring"> B - Substring <a class="heading-link" href="#b---substring"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>制約が緩いのでSの0以上<code>|S|-|T|</code>以下文字を先頭とした部分文字列とTを比較すれば良い.</p> <h2 id="c---sum-of-product-of-pairs"> C - Sum of product of pairs <a class="heading-link" href="#c---sum-of-product-of-pairs"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>愚直にやると時間に間に合わない.<br> 答えは<code>A1 * (A2 + A3 + ... An) + A2 * (A3 + ... + An) + ... + Ai * (Ai+1 + ... + An) + ...</code>なので, A2からAnまでの累積和を取ってから掛け算を行えば良い.</p> <h2 id="d---friends"> D - Friends <a class="heading-link" href="#d---friends"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Union-Findで殴る.<br> 問題文から,Union-Findを使うと友達グループは簡単に求まる. <strong>全ての人について「同じグループの中に友達がいない」という状況</strong>を達成するためには, 一番大きい友達グループと同じサイズのグループに分割すれば良い.</p> ABC176の解説 https://t45k.github.io/kyopuro/abc176/ Mon, 24 Aug 2020 17:05:57 +0900 https://t45k.github.io/kyopuro/abc176/ <p>気持ち良く5完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC176" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---takoyaki"> A - Takoyaki <a class="heading-link" href="#a---takoyaki"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>日本語をきちんと噛み砕かないと解けない問題. 答え自体は<code>(X + N - 1) / N * T</code>するだけ.</p> <h2 id="b---multiple-of-9"> B - Multiple of 9 <a class="heading-link" href="#b---multiple-of-9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>各桁の合計を9で割るだけ</p> <h2 id="c---step"> C - Step <a class="heading-link" href="#c---step"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>前から順番に見ていき,今見ている人の身長が前の人以上になるように踏み台を使うのが最適.<br> なので,人iが見てきた中で最大の身長より小さければ,その差を足し合わせ, それより大きければ身長の最大値を更新すれば良い.</p> <h2 id="d---wizard-in-maze"> D - Wizard in Maze <a class="heading-link" href="#d---wizard-in-maze"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>意外と解ける人が少なかった問題<br>. 移動をコスト0,ワープをコスト1としてダイクストラすれば良い.</p> <h2 id="e---bomber"> E - Bomber <a class="heading-link" href="#e---bomber"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>これが緑diffなの意外.<br> 最初に各列,行ごとの爆破対象の個数を数えていく. 次に,列,行ごとで爆破対象が最大のもののみをフィルターする. 最後に残った列,行を組み合わせた際に爆破対象が最大となるものを選ぶ. この時,選んだ列,行の交差点に爆破対象がない場合合計個数は<code>列の値 + 行の値</code>, そうでない場合は<code>列の値 + 行の値 - 1</code>になる. なので,交差点に爆破対象がないように選びたい. 爆破対象の数は高々M個なので,交差点がMを超過するとき,必ず爆破対象が存在しない交差点がする. 逆にM以下の場合は,全ての交差点を確認しても制限時間に間に合う.</p> ABC175の解説 https://t45k.github.io/kyopuro/abc175/ Sun, 16 Aug 2020 19:58:10 +0900 https://t45k.github.io/kyopuro/abc175/ <p>オンタイム参加せず. バチャやると3完だったので参加しなくてよかった&hellip;<br> <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/ABC175" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---rainy-season"> A - Rainy Season <a class="heading-link" href="#a---rainy-season"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>高々3文字なので全ての場合を列挙した方が良さそう.</p> <h2 id="b---making-triangle"> B - Making Triangle <a class="heading-link" href="#b---making-triangle"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>高々<code>N &lt;= 100</code>なので3重ループでOK.</p> <h2 id="c---walking-takahashi"> C - Walking Takahashi <a class="heading-link" href="#c---walking-takahashi"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>個人的に結構難しかった問題.<br> Xは最初から絶対値として扱って良い. <code>X &gt;= K * D</code>の場合は<code>X - K * D</code>が最適となる.<br> そうでない場合.まず <code>K2 = X / D</code>とすると<code>0 &lt; X - K2 * D &lt; D</code>を満たすK2が得られる. ここからK2の偶奇がKと一致する場合そのKを,一致しない場合はK2+1が答えとなる.<br> <code>K * D</code>が64bitに収まらないに注意.</p> <h2 id="d---moving-piece"> D - Moving Piece <a class="heading-link" href="#d---moving-piece"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>場合分けが面倒くさくて実装量が多くなる問題<br>. まず初めにマスのグループ分けを行う. というのも始める場所によっては行けないマスが存在することもあるからである(例えば<code>2 1 4 3</code>だと1からスタートすると1 -&gt; 2 -&gt; 1を繰り返す). グループ分けは愚直にシミュレーションしても良いし,UnionFindTreeを用いてもできる.<br> 分けたグループそれぞれに対して,スコアを計算する.</p> ABC174の解説 https://t45k.github.io/kyopuro/abc174/ Tue, 04 Aug 2020 13:48:43 +0900 https://t45k.github.io/kyopuro/abc174/ <p>5完. Fが水diffだったのに解けなくて厳しい. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC174" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---air-conditioner"> A - Air Conditioner <a class="heading-link" href="#a---air-conditioner"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>条件分岐するだけ</p> <h2 id="b---distance"> B - Distance <a class="heading-link" href="#b---distance"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>与えられたN個の座標の原点からの距離を計算していくだけ.<br> また,こういう時,小数点の計算などは誤差が発生しやすいので,平方根をとる計算はせず, 全て二乗で計算した方が良い. int型だとオーバーフローするので注意.</p> <h2 id="c---repsept"> C - Repsept <a class="heading-link" href="#c---repsept"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>証明が難しい問題.<br> C問題なので,時間いっぱい(10^7くらい)計算して答えが見つかれば答えを,見つかれなければ-1を出力する方針で解いた. 計算じたいは,最初に<code>X = 7, i = 1</code>として,XがKで割れればiを出力し, 割れなければ<code>X &lt;- (X * 10 + 7) % K, i &lt;- i + 1</code>と更新すれば良い.</p> <h2 id="d---alter-altar"> D - Alter Altar <a class="heading-link" href="#d---alter-altar"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>なんとなく解けた問題.<br> 答えは次のいずれかの小さい方</p> <ul> <li>玉を赤か白に統一する</li> <li>swapして左側に赤,右側に白を揃える</li> </ul> <p>下の方法だと,最左の白玉と最右の赤玉の間にある玉の赤と白の少ない方の個数が答えになる.</p> <h2 id="e---logs"> E - Logs <a class="heading-link" href="#e---logs"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>なんとなく解けた問題.想定解はにぶたん.<br> まず<code>K &lt;= 10^9</code>という条件を無視すると,丸太iとその切断回数jに対して, i/jの天井関数の降順に並べるようにした 優先度付きキューに丸太を入れて,K回先頭の割る回数を増やすという操作で解ける(以降,操作O). なので,<code>K</code>を10^5くらいにできれば,この操作で大丈夫である. <code>K</code>を減らす方法として,はじめに丸太iの長さに応じて適切な切断回数を決めておき, その切断回数の総和を<code>K</code>から引いた上で,操作Oに入ればよい. 初期切断回数として,丸太の長さの総和に対する割合を利用できる. つまり,丸太の長さの総和Sに対して,丸太iの長さがLiの時, <code>K * (Li / S)</code>を初期切断回数とすれば良い.</p> 「きまぐれロボット」読了 https://t45k.github.io/blog/kimagure_robot/ Sat, 25 Jul 2020 20:46:40 +0900 https://t45k.github.io/blog/kimagure_robot/ <p>星新一のきまぐれロボットを読みました.</p> <p>この本を読んだ経緯ですが,楽天で買い物をしたときにもらった 電子書籍の割引券の使い道に困っていたところ, 友人に星新一を進められたのがきっかけです.</p> <p>ついこの間までしばらく本をあまり読んでいなかったうえに, ここ最近は長めのミステリばかり読んでいたので, ショートショートは本当に久しぶり(もしかしたら初めて)でした. 伏線を積み重ねまくって最後にひっくり返すミステリに対して, ショートショートは長くても3ページ程度でオチがつくので, スッと読み進められました. また,すぐ話が切り替わるので,飽きることなく最後まで読めました.</p> <p>思ったよりショートショートが面白かったので, また電子書籍のクーポンをもらえたら星新一の本をもう一冊買っても良いかなと思いました.</p> 「ジョーカー 旧約探偵神話」読了 https://t45k.github.io/blog/joker/ Sat, 18 Jul 2020 00:30:49 +0900 https://t45k.github.io/blog/joker/ <p>清涼院流水の「ジョーカー 旧約探偵神話」を読みました.</p> <p>全編を通して「メタミステリ」「過去のミステリに対する挑発」がひしひしと伝わってくる内容でした. 特にミステリ四大奇書である「ドグラマグラ」「匣の中の失楽」「虚無への供物」「黒死館殺人事件」は文中で何度も言及されており, リスペクトが感じられました. 本文中でミステリの30の原則を挙げ,それを達成しようとする姿勢から,ミステリの総決算だと評されるのもうなずけました.</p> <p>内容自体は前作コズミックと被っている部分もありましたが(作中作など),どんでん返しからのどんでん返しなど目を見張るような場面もいくつもありました. ラスト(真犯人)自体は読了直後はあまり納得いきませんでしたが,この直後にコズミックの内容がくることを考えるとなんとなく理解できました.</p> <p>少し残念なところは,今作は時系列的に前作の前の話であり,前作中で今作の事件内容が言及されることもあったため, 誰が殺されないかなどが薄々わかってしまったことです.</p> <p>次回は,同じく清涼院流水のカーニバル・イブを読む予定です. そろそろ目的だった舞城王太郎の九十九十九を読んでも良いかもです. また,いつかミステリ四大奇書も読める日が来ればなぁとは感じています.</p> エイシングプログラミングコンテスト2020の解説 https://t45k.github.io/kyopuro/aising2020/ Mon, 13 Jul 2020 18:19:23 +0900 https://t45k.github.io/kyopuro/aising2020/ <p>4完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/other/aising2020" class="external-link" target="_blank" rel="noopener">コード</a> 実装が重かった印象.</p> <h2 id="a---number-of-multiples"> A - Number of Multiples <a class="heading-link" href="#a---number-of-multiples"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>for文で回すだけ</p> <h2 id="b---an-odd-problem"> B - An Odd Problem <a class="heading-link" href="#b---an-odd-problem"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>for文で回すだけ</p> <h2 id="c---xyz-triplets"> C - XYZ Triplets <a class="heading-link" href="#c---xyz-triplets"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ゴリ押し全探索<br> N&lt;=10^4から,x,y,zそれぞれの最大値は10^2になることが分かる. なので,x,yを1から10^2まで全探索しても計算量は全体で10^8に抑えられる.<br> 計算方法だが,xとyが決まればあとはzの二次方程式となるため,解の公式を使えば条件を満たすzが存在するかがO(1)で分かる.</p> <h2 id="d---anything-goes-to-zero"> D - Anything Goes to Zero <a class="heading-link" href="#d---anything-goes-to-zero"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>意外と難しかったらしい問題<br> 条件から,各Xiを最初に割るのは,popcount(X)±1となる. また桁iが0の時,<code>Xi = X + 2^i</code>,1の時,<code>Xi = X - 2^1</code>となることから, Xの値と各2^iの値を最初に求めておけば,最初の余を求めるところ以降は愚直にやっても間に合う. Xの値と各2^iの値は非常に大きくなる可能性があるので,何らかの値で割った余りを利用したい. ここで,<code>条件から,各Xiを最初に割るのは,popcount(X)±1となる</code>ので,popcount(X)±1で割った余りを記録して, 桁iの値で使い分ければ良い.</p> ABC173の解説 https://t45k.github.io/kyopuro/abc173/ Mon, 13 Jul 2020 17:52:00 +0900 https://t45k.github.io/kyopuro/abc173/ <p>4完. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC173" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---payment"> A - Payment <a class="heading-link" href="#a---payment"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>愚直にforループを回しても良いが,Nが最大10,000なのを踏まえて, <code>10,000 - N</code>をしてお釣りを1000で割った余りを求めると早い.</p> <h2 id="b---judge-status-summary"> B - Judge Status Summary <a class="heading-link" href="#b---judge-status-summary"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>switch文で数え上げるだけ.</p> <h2 id="c---h-and-v"> C - H and V <a class="heading-link" href="#c---h-and-v"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>典型的なbit全探索の問題. 縦,横でbit全探索して,該当行を赤く塗った後に盤上の黒いマスの個数を数える.</p> <h2 id="d---chat-in-a-circle"> D - Chat in a Circle <a class="heading-link" href="#d---chat-in-a-circle"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>なぜ解けたかよくわからなかった. 直感的には,Aiをソートした後に</p> <ol> <li>A1 A2を列に加える</li> <li>A3,A4を交互に列に加える.A1 A3 A2 A4となる</li> <li>A5,A6,A7,A8を交互に列に加える.A1 A5 A3 A6 A2 A7 A4 A8となる</li> <li>これを繰り返す.</li> </ol> <p>みたいな.</p> 「コズミック 世紀末探偵神話」読了 https://t45k.github.io/blog/cosmic/ Wed, 01 Jul 2020 11:05:57 +0900 https://t45k.github.io/blog/cosmic/ <p>清涼院流水の「コズミック 世紀末探偵神話」を読みました.</p> <p>清涼院流水は,僕が敬愛する作家である西尾維新や舞城王太郎が影響を受けたと公言している作家なので,どんな本を書いているのか昔から非常に興味がありました.</p> <p>読んだ感想ですが,久しぶりにページを捲る手が止まらない本を読んだ気がします. 最初は分厚い上に延々と殺人事件が続くので若干退屈でしたが,探偵の推理パートに入ると一気に面白くなりました. 特に,最後の九十九十九が推理をする直前,読者への挑戦状あたりはずっと興奮していました.</p> <p>犯人は実は作者みたいなメタ的な展開を予想していたのですが,きれいに納得のいく形で完結していたのも良いと思いました. 前半の作中作が大きなヒントになっていたとは思わなかったです.</p> <p>この流れで,次も清涼院流水のジョーカーを読む予定です.</p> ABC172の解説 https://t45k.github.io/kyopuro/abc172/ Wed, 01 Jul 2020 10:38:47 +0900 https://t45k.github.io/kyopuro/abc172/ <p>C,D問題に緑diffが出て結構阿鼻叫喚な人が多かった回. 4完.<br> <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC172" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---calc"> A - Calc <a class="heading-link" href="#a---calc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>計算するだけ</p> <h2 id="b---minor-change"> B - Minor Change <a class="heading-link" href="#b---minor-change"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>問題文から,SとTの同じ位置で文字が異なる回数を数え上げれば良いことが分かる.</p> <h2 id="c---tsundoku"> C - Tsundoku <a class="heading-link" href="#c---tsundoku"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>貪欲だと解けない問題.<br> A,Bどちらの本も上限が10^5なので,全ての組み合わせを見ると時間が足りなくなる. ここで,<strong>本は上から見ていく</strong>というルールから,累積和をとっても問題ないことに気付ける. 累積和が取れるので,Aは前から見ていき,Bは二分探索できることに気付けるので,あとは実装するだけ.</p> <h2 id="d---sum-of-divisors"> D - Sum of Divisors <a class="heading-link" href="#d---sum-of-divisors"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>最近流行のエラトステネス的問題.<br> 全ての数字の約数の個数をそれぞれ求めていたら遅いので,前から素数を見て,その素数を約数として持つ値に約数として加えていく方針でやる.<br> 実装としては,以下のようにする.</p> <ol> <li>長さNの配列を2つ用意する. 配列Aは1で,配列Bはその添字で初期化する. 配列Aは約数の個数を,配列Bは素数かどうかを判定するのに使う.</li> <li>2 &lt;= i &lt;= √Nとして,配列を順番に見ていく. <ul> <li>Biが2以上の時,iは素数となる.なので,iの倍数jに対して,jがiでk回割れる(= log(i,j))とすると</li> </ul> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>Ak *= k + 1 </span></span><span style="display:flex;"><span>Bk /= i ^ k </span></span></code></pre></div>と更新する <ul> <li>Biが1の時,iは素数なので何もしない</li> </ul> </li> <li>配列Aに約数の個数が記録できたので,√N以上の素数に注意しながら欲しい値を計算する.</li> </ol> ABC171の解説 https://t45k.github.io/kyopuro/abc171/ Tue, 30 Jun 2020 22:33:15 +0900 https://t45k.github.io/kyopuro/abc171/ <p>難易度が暴落した回.<br> 5完.<br> <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC171" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---αlphabet"> A - αlphabet <a class="heading-link" href="#a---%ce%b1lphabet"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ. Javaなら<code>Character#isUpperCase</code>とかが使える.</p> <h2 id="b---mix-juice"> B - Mix Juice <a class="heading-link" href="#b---mix-juice"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ソートして前からK個選ぶ.</p> <h2 id="c---one-quadrillion-and-one-dalmatians"> C - One Quadrillion and One Dalmatians <a class="heading-link" href="#c---one-quadrillion-and-one-dalmatians"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>与えられた数字を26進数に変換する問題.<br></p> <ol> <li>Nをデクリメントし</li> <li>Nを26で割ったあまりを求め(これを使う)</li> <li>N /= 26 をする</li> </ol> <p>を繰り返す.</p> <h2 id="d---replacing"> D - Replacing <a class="heading-link" href="#d---replacing"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>C問題よりわかりやすい.<br> 最初に全ての和Sと,それぞれの数字が何回出てくるかを記録しておく. 各クエリ毎に以下の操作をすれば良い.</p> <ol> <li>与えられたCに対して,SからC*(Cの出現回数)を引く</li> <li>与えられたDに対して,SにD*(Cの出現回数)を加える</li> <li>Dの出現回数にCの出現回数を加える</li> <li>Cの出現回数を0にする</li> </ol> <h2 id="e---red-scarf"> E - Red Scarf <a class="heading-link" href="#e---red-scarf"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>まさかの茶diff.Nが偶数という制約があるのを知らんかった&hellip;<br> すぬけ君iのスカーフに書かれた整数をbiとすると</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>a1 = b2 ^ b3 ^ ... ^ bn </span></span><span style="display:flex;"><span>a2 = b1 ^ b3 ^ ... ^ bn </span></span><span style="display:flex;"><span>a3 = b1 ^ b2 ^ ... ^ bn </span></span><span style="display:flex;"><span>... </span></span></code></pre></div><p>であることが分かる. また,排他的論理和の性質から<code>x ^ x = 0</code>なので,以下が成り立つ.</p> ABC170の解説 https://t45k.github.io/kyopuro/abc170/ Sat, 20 Jun 2020 11:52:18 +0900 https://t45k.github.io/kyopuro/abc170/ <p>無念の3完. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/ABC170" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---five-variables"> A - Five Variables <a class="heading-link" href="#a---five-variables"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ. Listを作って<code>List#indexOf</code>で探すと楽.</p> <h2 id="b---crane-and-turtle"> B - Crane and Turtle <a class="heading-link" href="#b---crane-and-turtle"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ツルカメ算. ループを回す.</p> <h2 id="c---forbidden-list"> C - Forbidden List <a class="heading-link" href="#c---forbidden-list"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解答が燃えた問題.<br> Xが100以下なので,答えは101以下になる. したがって,0から101までの,数列に含まれていない数字に対してXとの差を計算するだけ.</p> <h2 id="d---not-divisible"> D - Not Divisible <a class="heading-link" href="#d---not-divisible"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解けなかった.<br> エラトステネスの篩のイメージ. 数列A中の最大値をAmaxとすると,数列Aを昇順に見て<code>sqrt(Amax)</code>までの数字の倍数を全て消す作業をする. 最後に残った数字の中でダブりがないものが答え.</p> <h2 id="e---smart-infants"> E - Smart Infants <a class="heading-link" href="#e---smart-infants"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>データ構造で殴る問題. Javaの標準ライブラリにMultiSetはないので少し考える必要がある. 今回は各幼稚園の園児のレートをTreeSetで,全ての幼稚園の最小値をセグ木で持つと,転園は以下の操作で行われる. また,各園児が現在所属している幼稚園の情報を持つとする.</p> <ol> <li>Cjの園児が所属している幼稚園(TreeSet)からCjを消す.</li> <li>その幼稚園に関してセグ木の値を更新する.もし幼稚園に園児がいないなら<code>Integer.MAX_VALUE</code>とする.</li> <li>幼稚園DjにCjを加える.</li> <li>幼稚園Djに関してセグ木の値を更新する.</li> <li>セグ木の全ての範囲に対してクエリを投げる.これが平等さになる.</li> </ol> 東京海上日動プログラミングコンテスト2020の解説 https://t45k.github.io/kyopuro/tokiomarine2020/ Sun, 14 Jun 2020 18:55:26 +0900 https://t45k.github.io/kyopuro/tokiomarine2020/ <p>3完. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/other/tokiomarine2020" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---nickname"> A - Nickname <a class="heading-link" href="#a---nickname"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>与えられた文字列の先頭3文字を抜き出すだけ.</p> <h2 id="b---tag"> B - Tag <a class="heading-link" href="#b---tag"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>非鬼が鬼より右側にいる場合,BはAに捕まらいためには右側に逃げるのが最適となる. 鬼と非鬼がT秒移動した時にいる箇所は,</p> <ul> <li>鬼: <code>A + V*T</code></li> <li>非鬼: <code>B + W*T</code></li> </ul> <p>となる. 鬼の座標が非鬼の座標以上に右側にいる(=より座標が大きい)と捕まるので,それを判定するだけ</p> <h2 id="c---lamps"> C - Lamps <a class="heading-link" href="#c---lamps"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://imoz.jp/algorithms/imos_method.html" class="external-link" target="_blank" rel="noopener">いもす法</a>をすると1回の操作はO(N)で達成できるので,K回やるとO(NK)となる(いもす法のやり方: Aiの値がdの時,座標<code>i-d</code>に+1,座標<code>i+d+1</code>に-1を加え,最後に累積和する). O(NK)なので,最大で4*10^10程度の計算量となってしまいそうだが,ここで問題文から以下のことが言える.</p> <blockquote> <p>全ての電球の明るさが<code>N</code>となった場合,それ以降の操作で明るさは増えないため,そこで操作を打ち切って良い</p> </blockquote> <p>操作回数が最大になるのはN=10^5,K=10^5,全ての電球の明るさの初期値が0の時なので,これを試してみると時間に十分間に合う.</p> <p>あとはやるだけ.</p> <p>解答を見ると,操作回数はO(log N)で抑えられるらしい.</p> ABC169の解説 https://t45k.github.io/kyopuro/abc169/ Mon, 01 Jun 2020 13:25:09 +0900 https://t45k.github.io/kyopuro/abc169/ <p>久々のABC水パフォ. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/ABC169" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---multiplication-1"> A - Multiplication 1 <a class="heading-link" href="#a---multiplication-1"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>読み込んで掛け算して出力するだけ.</p> <h2 id="b---multiplication-2"> B - Multiplication 2 <a class="heading-link" href="#b---multiplication-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>与えられた数字の中に0があれば確定で0. それ以外の場合,それぞれ掛けて10^18を越えるかを確認すれば良い. Javaだと<code>BigInteger</code>が使える. 比較は<code>BigInteger#compareTo</code>で,0より大きければ1が返るっぽい.</p> <h2 id="c---multiplication-3"> C - Multiplication 3 <a class="heading-link" href="#c---multiplication-3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>罠.<br> Javaだと<code>BigDecimal</code>が使える. 解説通りにやるとするなら,一旦文字列で読み込んで,小数点を消した上で整数に変換すると良さそう.</p> <h2 id="d---div-game"> D - Div Game <a class="heading-link" href="#d---div-game"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>まずは素因数分解する. 問題の条件から素数pに対して,p^1,p^2,p^3,&hellip;,p^kと割っていくのが最適となる. したがって,各素数の出現回数からkを求めれば良い. p^kまで作るには,出現回数は<code>1+2+3+...k=k(k+1)/2</code>個必要となる. これは,kを1から全部列挙して探せば良い. 出現回数の最大値は,N&lt;=10^12≒2^40から高々40回程度なので,全列挙しても十分間に合う.</p> <h2 id="e---count-median"> E - Count Median <a class="heading-link" href="#e---count-median"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>たまたま解けた.<br> とても単純化してみる.</p> <h3 id="nが奇数の時"> Nが奇数の時 <a class="heading-link" href="#n%e3%81%8c%e5%a5%87%e6%95%b0%e3%81%ae%e6%99%82"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>N=3で,以下のような時を考える.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-fallback" data-lang="fallback"><span style="display:flex;"><span>|---| |---| |---| </span></span><span style="display:flex;"><span>a b c d e f </span></span></code></pre></div><p>この時,明らかに中央値はc~dの整数値になる.<br> このことから,何となく中央値は(0-indexedで)前からN/2番目の開始位置と後ろからN/2番目の終了位置の間の整数値であると考えられる.</p> NOMURA プログラミングコンテスト2020の解説 https://t45k.github.io/kyopuro/nomura2020/ Sun, 31 May 2020 15:57:56 +0900 https://t45k.github.io/kyopuro/nomura2020/ <p>何とか3完. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/others/nomura2020" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---study-scheduling"> A - Study Scheduling <a class="heading-link" href="#a---study-scheduling"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>時間を分に直して引き算するだけ.</p> <h2 id="b---postdocs"> B - Postdocs <a class="heading-link" href="#b---postdocs"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>例えば,<code>?</code>を<code>P</code>にした場合,その右側に<code>D</code>がある時だけ指数が1増えるのに対して,<code>D</code>にすると確実に指数が1増えることから,全ての<code>?</code>を<code>D</code>に変換するのが最適になる.</p> <h2 id="c---folia"> C - Folia <a class="heading-link" href="#c---folia"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>解けてる人多くてびっくりした. 厳密な証明はeditorial参照.<br> 初めに木を上から下の方へ見ていって,それぞれの深さでの葉でない頂点(以降,節)の最大値数を求めていく. 深さiの葉の数がAiの時,深さi-1での節の数がAi/2未満の時,Ai個の葉を生成できないので条件を満たす木は存在しない.<br> 次に,木を下から上へ見ていき,各深さでの節の数を最適化していく. 木の頂点数を最大にするためには,各深さiに対して節の数を最大化したい. 節の数は,深さi+1の頂点数より大きくできない(全ての節は1つ以上の子を持つ),また,初めの操作により,深さiの節の個数から(深さi+1の頂点)個の子を産めることが分かっている. したがって,深さiでの節の数の最大値は<code>min(深さiでの節の数,深さi+1での頂点の数)</code>となる. あとはこれを再帰的に計算して足し合わせるだけ.<br> この解き方だと,n=0がコーナーケースになることに注意(<code>n=0</code>, <code>A0=1</code>の時のみ答えが<code>1</code>で,それ以外は<code>-1</code>)</p> 「阿修羅ガール」読了 https://t45k.github.io/blog/ashura-girl/ Thu, 28 May 2020 00:23:42 +0900 https://t45k.github.io/blog/ashura-girl/ <p>舞城王太郎の阿修羅ガールを読みました.</p> <p>一人称視点で進んでいくのですが,主人公の心の声の喋り方がとても真に迫った感じだったのが印象的でした. 特に,第二部の後半の進め方がすごく理解しやすく,場面をイメージしやすかったです. 他に,ディスコ探偵水曜日でも登場した桜月淡雪が出てきたのはニヤリとしました. 舞城王太郎の作品で西暁が出てこないのは珍しいのではないでしょうか.</p> <p>今回,人生で初めて電子書籍を試してみました. 読んだページの量で達成感を感じる人なので,どのくらいのページ読んだのかが直感的にわからない電子書籍は読書の達成感は薄かったです.</p> <p>次は,舞城王太郎と西尾維新が崇拝している(であろう)清涼院流水の「コズミック」を読む予定です.</p> AGC044の解説 https://t45k.github.io/kyopuro/agc044/ Wed, 27 May 2020 23:41:26 +0900 https://t45k.github.io/kyopuro/agc044/ <p>太陽でしたがNoSubなのでレートは変わらなかったです(NoSubというシステムをよく理解していなかったので,入力するのではないかとドキドキしてました). A,Bの解説. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/AGC/AGC044" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---pay-to-win"> A - Pay to Win <a class="heading-link" href="#a---pay-to-win"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>400点問題だと高を括って望んだら痛い目にあった.<br> 簡単に説明するとNから2,3,5で割っていくだけ. メモ化(b|d)fs. メモは値をキー,コストをバリューとしたMapで持つ. bfsで解く場合は,キューから取り出した値Kに対して</p> <ol> <li>2で割れるか試す <ul> <li>割れる場合: <code>現在のコスト+min(a,d*K/2)</code>(2で割るか,同じ値だけ1を引くかのコストが小さい方)がメモ[K/2]を更新できなければ何もしない.更新できれば,K/2をキューに追加する.</li> <li>破れない場合: K+1とK-1は2で割れるので,割れる場合と同じ処理をする.</li> </ul> </li> <li>3で割れるか試す <ul> <li>割れる場合: <code>現在のコスト+min(b,d*2*K/3)</code>がメモ[K/3]を更新できなければ何もしない.更新できれば,K/3をキューに追加する.</li> <li>破れない場合: K-K%3とK+3-K%3はKで割り切れるので,割れる場合と同じ処理をする</li> </ul> </li> <li>5で割れるか試す.略</li> </ol> <p>をやるだけ.</p> <h2 id="b---joker"> B - Joker <a class="heading-link" href="#b---joker"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>計算量の見積もりが難しい問題.<br> N&lt;=500に対して,与えられる座標の数はN^2なので,座標が与えられる度に(d|b)fsすると間に合わないように見える. しかし,実は間に合う. 1回の(b|d)fsでいくつかの座標の端からの距離が減る では全ての走査で行われる操作は合計でO(n^3)で収まる 例えばN=6の時,最初の各座標の端からの距離は以下のようになる<br> 0 0 0 0 0 0<br> 0 1 1 1 1 0<br> 0 1 2 2 1 0<br> 0 1 2 2 1 0<br> 0 1 1 1 1 0<br> 0 0 0 0 0 0<br> 全てを走査しきる(= 各座標の端からの距離が0になる)のは 4*4 + 2*2(四角形を狭めていくイメージ)回の操作が必要となる. 合計するとだいたい (N^3)/6 らしいので条件下で間に合う.</p> ABC168の解説 https://t45k.github.io/kyopuro/abc168/ Tue, 19 May 2020 19:54:50 +0900 https://t45k.github.io/kyopuro/abc168/ <p>速解き回だったけど速解き失敗. 4完. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/ABC168" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a----therefore"> A - ∴ (Therefore) <a class="heading-link" href="#a----therefore"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>switch</code>文を使う問題. コードが長くなりがち. Kotlinだと気持ちよく書ける.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-mysql" data-lang="mysql"><span style="display:flex;"><span>fun main() <span style="">{</span> </span></span><span style="display:flex;"><span> Scanner(System.`<span style="font-weight:bold">in</span>`) </span></span><span style="display:flex;"><span> .run <span style="">{</span> </span></span><span style="display:flex;"><span> <span style="font-weight:bold">when</span> (this.nextInt() % 10) <span style="">{</span> </span></span><span style="display:flex;"><span> 3 -&gt; <span style="font-style:italic">&#34;bon&#34;</span> </span></span><span style="display:flex;"><span> 0, 1, 6, 8 -&gt; <span style="font-style:italic">&#34;pon&#34;</span> </span></span><span style="display:flex;"><span> <span style="font-weight:bold">else</span> -&gt; <span style="font-style:italic">&#34;hon&#34;</span> </span></span><span style="display:flex;"><span> <span style="">}</span>.apply(::println) </span></span><span style="display:flex;"><span> <span style="">}</span> </span></span><span style="display:flex;"><span><span style="">}</span> </span></span></code></pre></div><h2 id="b----triple-dots"> B - &hellip; (Triple Dots) <a class="heading-link" href="#b----triple-dots"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ. Sの長さがKを上回っているとき,<code>S.substring(0, K.length)</code>.</p> <h2 id="c----colon"> C - : (Colon) <a class="heading-link" href="#c----colon"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>数学.<br> 極座標か余弦定理を使うと簡単に解ける. 意外と二つの針の間の角度を求めるのが曲者.</p> <h2 id="d----double-dots"> D - .. (Double Dots) <a class="heading-link" href="#d----double-dots"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>嫌な気持ちになります.<br> 問題の条件から何となく根付き木のような構造が思い浮かぶので,幅探するだけ.</p> ABC167の解説 https://t45k.github.io/kyopuro/abc167/ Mon, 11 May 2020 11:43:31 +0900 https://t45k.github.io/kyopuro/abc167/ <p>4完. <a href="https://github.com/t45k/tree/master/AtCoder/ABC/ABC167" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---registration"> A - Registration <a class="heading-link" href="#a---registration"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>文字列Sと文字列Tの最後の文字を消した文字列が同等か確認する. javaだと <code>S.equals(T.substring(0, S.length))</code></p> <h2 id="b---easy-linear-programming"> B - Easy Linear Programming <a class="heading-link" href="#b---easy-linear-programming"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>A,B,Cの順番になるべく多くカードを取ると最大値になるので</p> <ul> <li>KがA以下なら1のカードをK枚取って和はK</li> <li>Kが(A+B)以下なら,1のカードをA枚,0のカードを取れるだけ取って和はA</li> <li>それ以外なら1をA枚,0をB枚,-1を(K-(A+B))枚取って和は2A+B+K</li> </ul> <h2 id="c---skill-up"> C - Skill Up <a class="heading-link" href="#c---skill-up"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>bit全探索するだけ問題.<br> N&lt;=12なので,全て試しても2^12≒4000通りなので十分間に合う.</p> <h2 id="d---teleporter"> D - Teleporter <a class="heading-link" href="#d---teleporter"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ABC030_Dとほぼ同じ問題.<br></p> <h3 id="knのとき"> K&lt;=Nのとき <a class="heading-link" href="#kn%e3%81%ae%e3%81%a8%e3%81%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>K回のテレポートを愚直に計算しても間に合う.</p> <h3 id="knの時"> K&gt;Nの時 <a class="heading-link" href="#kn%e3%81%ae%e6%99%82"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>鳩の巣原理的に考えると,必ずどこかでループが発生することになる. なので,1ループで訪れる町の数でmodを取る.</p> <h2 id="e---colorful-blocks"> E - Colorful Blocks <a class="heading-link" href="#e---colorful-blocks"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>時間内に解けなかった.<br> 全て隣り合わない組み合わせは m*(m-1)^(n-1)になる. 1組隣り合う場合,その隣り同士は同じ色なので ↑/(m-1) ↑に組み合わせをかける.一つ右とペアになると考えれば n-1C1 通り 2組以降も同じように考える.</p> 「クビシメロマンチスト 人間失格・零崎人識」読了 https://t45k.github.io/blog/easy_love_easy_no/ Wed, 06 May 2020 20:45:52 +0900 https://t45k.github.io/blog/easy_love_easy_no/ <p>西尾維新の戯言シリーズ2作目であるクビシメロマンチストを読みました. <a href="https://www.amazon.co.jp/%E3%82%AF%E3%83%93%E3%82%B7%E3%83%A1%E3%83%AD%E3%83%9E%E3%83%B3%E3%83%81%E3%82%B9%E3%83%88-%E4%BA%BA%E9%96%93%E5%A4%B1%E6%A0%BC%E3%83%BB%E9%9B%B6%E5%B4%8E%E4%BA%BA%E8%AD%98-%E8%AC%9B%E8%AB%87%E7%A4%BE%E6%96%87%E5%BA%AB-%E8%A5%BF%E5%B0%BE%E7%B6%AD%E6%96%B0-ebook/dp/B01EV0NMIG/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;crid=2WNUAO24W551I&amp;dchild=1&amp;keywords=%E3%82%AF%E3%83%93%E3%82%B7%E3%83%A1%E3%83%AD%E3%83%9E%E3%83%B3%E3%83%81%E3%82%B9%E3%83%88&amp;qid=1588765443&amp;sprefix=%E3%81%8F%E3%81%B3%E3%81%97%E3%82%81%2Caps%2C293&amp;sr=8-1" class="external-link" target="_blank" rel="noopener">amazon</a></p> <p>高校生くらいの時に一度読んだのですが,面白かったのを覚えていたため古本で購入しました. 2度目でしたがやっぱり面白くかったです. 中二臭い言い回し,叙述トリック,そして完璧なラストと個人的にツボにはまる部分が多く,24年間生きてきて面白かった本暫定一位です. 西尾維新といえば物語シリーズが有名ですが,このシリーズも負けず劣らず面白いのでぜひ皆さんに読んで欲しいとは思います. 区分的にはライトノベルになるので,10年後,20年後にはまた違った感想を抱くかもしれません.</p> <p>アニメ化期待してます.</p> 競プロ https://t45k.github.io/kyopuro_index/ Wed, 06 May 2020 18:26:46 +0900 https://t45k.github.io/kyopuro_index/ <p>競プロの解説とか. Java でやっているのでコード例は Java になります.<br> リポジトリは<a href="https://github.com/t45k/kyopuro" class="external-link" target="_blank" rel="noopener">こちら</a>.<br> 自作ライブラリのドキュメントは<a href="../kyopuro/doc/library/package-summary.html" >こちら</a>.</p> <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> <script> $(function(){ $("#cover").load("../kyopuro/index.html #for_outer"); }); </script> <div id="cover"></div> ブログ https://t45k.github.io/blog_index/ Wed, 06 May 2020 18:26:39 +0900 https://t45k.github.io/blog_index/ <p>近況や今まで読んできた本の感想などを書いていきます.</p> <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> <script> $(function(){ $("#cover").load("../blog/index.html #for_outer"); }); </script> <div id="cover"></div> ABC166の解説 https://t45k.github.io/kyopuro/abc166/ Mon, 04 May 2020 22:58:09 +0900 https://t45k.github.io/kyopuro/abc166/ <p>二日連続ABCの二日目. ABCEの4完. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/ABC166" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---ac"> A - A?C <a class="heading-link" href="#a---ac"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>分岐するだけ.</p> <h2 id="b---trick-or-treat"> B - Trick or Treat <a class="heading-link" href="#b---trick-or-treat"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>数え上げるだけ</p> <h2 id="c---peaks"> C - Peaks <a class="heading-link" href="#c---peaks"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>結構誤読してた人が多かった問題<br>. 問題文から,i番目の展望台が地震を含めて繋がっている展望台の中で一番高ければ良いことが分かる. つまり,繋がっている展望台のどれか一つでも自身より高いものが良い展望台となる. なので,各A,Bに対して大きい方だけ残していくという戦略を取れば,残ったものが良い展望台である.</p> <h2 id="d---i-hate-factorization"> D - I hate Factorization <a class="heading-link" href="#d---i-hate-factorization"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><strong>解けませんでした</strong><br> 問題文を誤読しないように. <strong>任意の</strong>Xについて成り立っているのではなく,<strong>テストケースとして与えられる</strong>Xについて成り立つ. およそ200くらいが上限となるらしいので,それについて全探索するだけ.</p> <h2 id="e---this-message-will-self-destruct-in-5s"> E - This Message Will Self-Destruct in 5s <a class="heading-link" href="#e---this-message-will-self-destruct-in-5s"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>条件は添字i,jに対して<code>i - j = Ai + Aj</code>であり,これを式変形すると<code>i - Ai = j + Aj</code>となる. つまり,(添字と身長の差)と(添字と身長の和)が同じ値になるペアが条件を満たす. なので各Aに対して添字との差と和をあらかじめ計算しておけば解ける</p> ABC165の解説 https://t45k.github.io/kyopuro/abc165/ Mon, 04 May 2020 22:58:03 +0900 https://t45k.github.io/kyopuro/abc165/ <p>二日連続ABCの一日目. 3完. <a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/ABC165" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---we-love-golf"> A - We Love Golf <a class="heading-link" href="#a---we-love-golf"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>きちんと数学して解くこともできるが,制約が小さいので全探索しても間に合う. AからBまでの閉区間内にKの倍数があるか確認する.</p> <h2 id="b---1"> B - 1% <a class="heading-link" href="#b---1"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>これもきちんと数学して解けるけど全探索で解ける系. 入力例から分かるように,10^18が与えられても出力は3760になるので,1~3760までの区間を探索するだけで良い.</p> <h2 id="c---many-requirements"> C - Many Requirements <a class="heading-link" href="#c---many-requirements"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><strong>解けませんでした</strong><br> これも全探索するだけ問題. 考えられる数列を全列挙して特典の最大値を探す.<br> 全列挙に必要な計算量が10^10だと思っていたので試さなかったが,実際にはボールとしきりの要領で組み合わせを考えると計算量は*O(N * C(N+M-1,N))*なので,全列挙しても十分間に合う.</p> <h2 id="d---floor-function"> D - Floor Function <a class="heading-link" href="#d---floor-function"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>数学.editorialが分かりやすいです.</p> <h2 id="e---rotation-matching"> E - Rotation Matching <a class="heading-link" href="#e---rotation-matching"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>同じ組み合わせを避けていく問題.<br> 例えば,組み合わせ(1,N)は(1,2)と同じ組み合わせになる. したがって,(組み合わせの方の大きい方)-(小さい方)を<strong>組み合わせの距離</strong>と定義すると,距離N-iと距離iは同じ組み合わせである. これを念頭に入れてN-1からN-mまでの組み合わせを考えていく. (1,N)(2,N-1)&hellip;と作っていくと距離N-1,N-3&hellip;と1飛ばしに組み合わせを作れる. 途中で折り返しをうまく調整して距離N-2,N-4&hellip;の組み合わせを作る.</p> ABC164の解説 https://t45k.github.io/kyopuro/abc164/ Mon, 27 Apr 2020 23:38:04 +0900 https://t45k.github.io/kyopuro/abc164/ <p>4完.<a href="https://github.com/t45k/kyopuro/tree/master/atcoder/abc/abc164" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---sheep-and-wolves"> A - Sheep and Wolves <a class="heading-link" href="#a---sheep-and-wolves"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>if文で分岐するだけ</p> <h2 id="b---battle"> B - Battle <a class="heading-link" href="#b---battle"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>割った余りを求めるのがスマートだけで,先攻後攻の概念があるので愚直に互いに引いていった方が安全.</p> <h2 id="c---gacha"> C - gacha <a class="heading-link" href="#c---gacha"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>JavaだとSetに打ち込めば良い. <code>Stream#distinct</code>からの<code>Stream#count</code>で多少スマートに書ける.</p> <h2 id="d---multiple-of-2019"> D - Multiple of 2019 <a class="heading-link" href="#d---multiple-of-2019"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>各桁に対して,i桁目の数字がDiとして<code>Si = (10 ^ i * Di + Si-1) % 2019</code>を計算すると,Siが同じ値の桁間の数字は2019の倍数になる.</p> <h2 id="e---two-currencies"> E - Two Currencies <a class="heading-link" href="#e---two-currencies"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>むずかしかった.<br> (頂点番号, 所持金)を一つの頂点としてダイクストラする.</p> K-Shoot MANIAが正しく動かなくなった原因とその対策 https://t45k.github.io/blog/k-shoot_mania/ Sat, 25 Apr 2020 17:05:30 +0900 https://t45k.github.io/blog/k-shoot_mania/ <p>K-Shoot MANIAの挙動がおかしい原因が分かったのでメモ</p> <h2 id="症状"> 症状 <a class="heading-link" href="#%e7%97%87%e7%8a%b6"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>キーボードの入力が異様に遅くなる. キーボードを押しっぱなしにして10秒後くらいにようやく反応する. もちろんプレイもままならない. Windowsのpreview版を使っていたのでそれが原因かなと思っていたが,違うPCでも同じ症状が出たためOSは関係なかった.</p> <h2 id="原因"> 原因 <a class="heading-link" href="#%e5%8e%9f%e5%9b%a0"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>キーボードの入力を書き換えるソフトを使っていたのが原因. <a href="https://sites.google.com/site/craftware/keyhac-ja" class="external-link" target="_blank" rel="noopener">keyhac</a>と<a href="https://www.karakaram.com/alt-ime-on-off" class="external-link" target="_blank" rel="noopener">alt-ime</a>を使っていたが,これのせいでキーボードの入力がケーシューに正しく反映されなくなってたっぽい. 対策は簡単で,該当ソフトを落とすだけ.</p> <h2 id="終わりに"> 終わりに <a class="heading-link" href="#%e7%b5%82%e3%82%8f%e3%82%8a%e3%81%ab"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>LR2の反応がおかしかったのもこれが原因かも. 自宅ゲーセン環境で快適なひきこもり生活を.</p> 「ディスコ探偵水曜日」読了 https://t45k.github.io/blog/disco_detective_wednesdayyy/ Fri, 24 Apr 2020 19:01:51 +0900 https://t45k.github.io/blog/disco_detective_wednesdayyy/ <p><strong>この世の出来事は全部運命と意志の相互作用で生まれるんだって、知ってる?</strong></p> <p>舞城王太郎の「ディスコ探偵水曜日」を読みました. 10年以上前の本なのでおそらく新品ではもう手に入りません. 僕はBook Offをはしごしました.</p> <p>上中下の3巻構成なのですが,下巻が異様に長い上にとても難解. この本を読むのは2回目ですが,今回も内容を理解しきれませんでした.</p> <p>粗筋は割愛します. 個人的には中間の,名探偵が次々と推理を披露して死んでいくシーンと,そしてディスコが最後の推理をするシーンが, 舞城王太郎特有のスピード感があって好きです.</p> <p>1年に1回,イベントとしてこの本を読むことをありかなぁと思いました.</p> <p>次は西尾維新の「クビシメロマンチスト」を読む予定です.</p> ABC163の解説 https://t45k.github.io/kyopuro/abc163/ Tue, 21 Apr 2020 16:22:58 +0900 https://t45k.github.io/kyopuro/abc163/ <p>3完. unratedで良かった&hellip; <a href="https://github.com/t45k/kyopuro/tree/master/ABC/ABC163" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---circle-pond"> A - Circle Pond <a class="heading-link" href="#a---circle-pond"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.<br> 円周は<code>2 * r * 円周率</code>. Javaだと円周率は<code>java.lang.Math.PI</code>が使える.</p> <h2 id="b---homework"> B - Homework <a class="heading-link" href="#b---homework"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>全ての宿題をやるには<code>Σ Ai</code>日かかるので,それを<code>M</code>と比較する.</p> <h2 id="c---management"> C - management <a class="heading-link" href="#c---management"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>問題文が若干ややこしい. やることは特定の数字が何回出てくるかを数えるだけ. はじめに配列<code>array[N + 1]</code>を用意して,各<code>Ai</code>に対して<code>array[Ai]++</code>する.</p> <h2 id="d---sum-of-large-numbers"> D - Sum of Large Numbers <a class="heading-link" href="#d---sum-of-large-numbers"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>時間内に解けなかった. 組み合わせの問題だと思ってライブラリを引っ張ってきたけど使わなかった&hellip;<br> 各数字が10^100以上と十分大きいので,足し合わせる個数が違うとき同じ値になることはない. あるiに対して<code>front_sum</code>を0からi-1までの和,<code>back_sum</code>をn-i+1からnまでの和とすると, i個選択する時の組み合わせによって得られる和は<code>i * 10^100 + front_sum</code>から<code>i * 10^100 + back_sum</code>までの間に収まる. つまり,<code>back_sum - front_sum + 1</code>通りになる. <code>front_sum</code>と<code>back_sum</code>は累積和で取れるので,iをKからNまで動かして足し合わせれば良い.</p> <h2 id="e---active-infants"> E - Active Infants <a class="heading-link" href="#e---active-infants"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>原始的なDP(ほんまか?).<br> 活発度が高い順に左か右に移動させる. 活発度を降順にソートした時,<code>dp[i][j]</code>を,<strong>(i+j)番目の園児を移動させた結果左側にi人,右側にj人の時の嬉しさ</strong>という風に考える. そうすると,<code>dp[i][j]</code>は<strong>左側にi-1人,右側にj人いるときに(i+j)番目の園児を左側に移動させる</strong>か<strong>左側にi人,右側にj-1人いるときに(i+j)番目の園児を右側に移動させる</strong>の嬉しさが大きい方になる.</p> MacでIntelliJを使っているとクラッシュする問題と解決法 https://t45k.github.io/blog/fix_mac_fault/ Mon, 13 Apr 2020 17:38:19 +0900 https://t45k.github.io/blog/fix_mac_fault/ <p>MacBook Air 2020を買いました.詳しくは<a href="https://t45k.github.io/blog/macbook_air" >ここ</a>.</p> <p>普段はJavaやKotlinを書いているので迷いなくIntelliJ IDEAをインストールしたのですが,どうも挙動がおかしい.<br> というのも,結構な頻度でIntelliJがクラッシュするし,場合によってはOSがクラッシュ強制的に再起動がかかります. ひどい時にはOSがクラッシュして再起動がかかり,それが開けた2分後に再びクラッシュしたこともあります.</p> <p>実は<a href="https://t45k.github.io/blog/line" >LINEのインターン</a>で借りていたMacBook Pro 15inchでも似たような問題が起こっていたので,2度目の経験でした.<br> インターンで借りていたパソコンは5日間で返すので我慢して使っていましたが,今回は長らく使っていく予定なので流石に直す必要がありました.</p> <p>修理も視野に入れながら解決法を探しました.</p> <h2 id="解決法"> 解決法 <a class="heading-link" href="#%e8%a7%a3%e6%b1%ba%e6%b3%95"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>結論からいうと原因は分かりませんでしたが(),<strong>OSを再インストール</strong>することで解決しました.詳しくは<a href="https://support.apple.com/ja-jp/HT204904" class="external-link" target="_blank" rel="noopener">こちら</a>.<br> 原因が分からないので全ての人がこれで直るかは分かりませんが,OS再インスコでデータが消えることはないため真っ先に試す価値はあります.</p> MacBook Airを購入した話 https://t45k.github.io/blog/macbook_air/ Mon, 13 Apr 2020 17:21:02 +0900 https://t45k.github.io/blog/macbook_air/ <h3 id="念願のmacbook-airを購入しました"> 念願のMacBook Airを購入しました! <a class="heading-link" href="#%e5%bf%b5%e9%a1%98%e3%81%aemacbook-air%e3%82%92%e8%b3%bc%e5%85%a5%e3%81%97%e3%81%be%e3%81%97%e3%81%9f"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p><img src="https://t45k.github.io/img/blog/mba.JPG" alt="mba"></p> <p>構成は</p> <ul> <li>CPU: 1.1GHzクアッド</li> <li>メモリ: 16GB</li> <li>SSD: 256GB</li> </ul> <p>数ヶ月後に出ると噂のMacBook Proを待っている人もいるかもしれませんが,僕は以下のような理由でmbaを選びました.</p> <h2 id="1---もう待てなかったから"> 1 - もう待てなかったから <a class="heading-link" href="#1---%e3%82%82%e3%81%86%e5%be%85%e3%81%a6%e3%81%aa%e3%81%8b%e3%81%a3%e3%81%9f%e3%81%8b%e3%82%89"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ずっと新しいmacが欲しいと思っていたのでこれ以上待てませんでした</p> <h2 id="2---そこまでスペックを必要としていないかったから"> 2 - そこまでスペックを必要としていないかったから <a class="heading-link" href="#2---%e3%81%9d%e3%81%93%e3%81%be%e3%81%a7%e3%82%b9%e3%83%9a%e3%83%83%e3%82%af%e3%82%92%e5%bf%85%e8%a6%81%e3%81%a8%e3%81%97%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%e3%81%8b%e3%81%a3%e3%81%9f%e3%81%8b%e3%82%89"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>研究室からmbpを借りていますし,研究などでマシンパワーが必要な時は研究室のワークステーションを使えば良いだけなので</p> <h2 id="3---touch-barが嫌いだから"> 3 - Touch barが嫌いだから <a class="heading-link" href="#3---touch-bar%e3%81%8c%e5%ab%8c%e3%81%84%e3%81%a0%e3%81%8b%e3%82%89"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>バタフライキーボードはともかく,Touch barは賛否両論ありますが,僕はあまり好きになれませんでした. たまに反応しなくなったりするし.</p> <h2 id="4---安いから"> 4 - 安いから <a class="heading-link" href="#4---%e5%ae%89%e3%81%84%e3%81%8b%e3%82%89"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>税込み13万で買えました. mbpはこんなものじゃすまないと思います.</p> <p>理由としてはこんなところです. 付け加えるなら,自分の理想にとても近かったというのもあります. これは去年の12月のツイート</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">はよmacbook air,13インチ,cpu4コア,RAM16GB,SSD256GB,ファンクションキー,シザーキーボードで10万くらいのやつ出てくれや</p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1203581420871905280?ref_src=twsrc%5Etfw">December 8, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h2 id="使い心地"> 使い心地 <a class="heading-link" href="#%e4%bd%bf%e3%81%84%e5%bf%83%e5%9c%b0"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="https://t45k.github.io/blog/fix_mac_fault" >ある一点</a>を除いたら最高です(その一点も結局解決しました).</p> <p>主にmbpとの比較になるのですが,</p> ABC162の解説 https://t45k.github.io/kyopuro/abc162/ Mon, 13 Apr 2020 16:57:30 +0900 https://t45k.github.io/kyopuro/abc162/ <p>祝参加者1万人越え.無念の4完.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC162" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---lucky-7"> A - Lucky 7 <a class="heading-link" href="#a---lucky-7"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.文字列で読み込んで<code>String#contains</code>を使うと早い.</p> <h2 id="b---fizzbuzz-sum"> B - FizzBuzz Sum <a class="heading-link" href="#b---fizzbuzz-sum"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>これもやるだけ.<code>LongStream</code>できれいに書ける.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span>LongStream.rangeClosed(1, scanner.nextInt()) </span></span><span style="display:flex;"><span> .filter(i -&gt; i % 3 != 0 &amp;&amp; i % 5 != 0) </span></span><span style="display:flex;"><span> .sum(); </span></span></code></pre></div><h2 id="c---sum-of-gcd-of-tuples-easy"> C - Sum of gcd of Tuples (Easy) <a class="heading-link" href="#c---sum-of-gcd-of-tuples-easy"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>三重ループを回すだけ.</p> <h2 id="d---rgb-triplets"> D - RGB Triplets <a class="heading-link" href="#d---rgb-triplets"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>N &lt;= 4,000</code>なので二重ループで回すことを考える. ある座標以降のそれぞれの色が何個あるかを記録する. これは後ろから累積和をとることで可能. こうすることで,例えば<code>i</code>が赤色,<code>j</code>が緑色のとき,<code>j+1</code>以降の青色の個数を<code>O(1)</code>で得られる. また,<code>k-j ≠ j-i</code>の条件を満たすために,k-j = j-iとなるkに対して<code>(j+1以降の数) - (k以降の数) + (k+1以降の数)</code>と計算すれば良い(累積和の性質から).</p> ABC161の解説 https://t45k.github.io/kyopuro/abc161/ Sat, 04 Apr 2020 22:53:03 +0900 https://t45k.github.io/kyopuro/abc161/ <p>100-200-300-400-600の5完. 人生初のオンサイト600点問題AC. <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC161" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---abc-swap"> A - ABC Swap <a class="heading-link" href="#a---abc-swap"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Z,X,Yを順に出力するだけ</p> <h2 id="b---popular-vote"> B - Popular Vote <a class="heading-link" href="#b---popular-vote"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>やるだけ.<br> 割り算の結果を比較するときは,<code>a &gt; b / c</code>ではなく<code>a * c &gt; b</code>のように書いたほうが正確.</p> <h2 id="c---replacing-integer"> C - Replacing Integer <a class="heading-link" href="#c---replacing-integer"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>方針立てるのに時間かかった問題.<br> 直感的には分かりづらいけど以下のように言い換えられる(chokudaiさんのツイート).</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">C問題、数学の問題といえばそうなんだけど、「無限に長いすごろくがあります。ゴールまでの距離がxです。Kマスずつ進めますが、ゴールを通り過ぎてしまう場合は折り返します。最もゴールに近づく時の残りマス数を答えなさい」みたいにすると、まぁ一応ちゃんとしたストーリーはつくよね。</p>&mdash; chokudai(高橋 直大)🌸🍆🍡 (@chokudai) <a href="https://twitter.com/chokudai/status/1246435428476973063?ref_src=twsrc%5Etfw">April 4, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <p>というわけで,<code>N % K</code>と<code>(N - (N % K)) % K</code>の小さい方を求める.</p> <h2 id="d---lunlun-number"> D - Lunlun Number <a class="heading-link" href="#d---lunlun-number"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>想定解が天才すぎる.愚直に解いた.<br> i番目の数字に対して,i + 1番目の数字を次のように決める.各桁を下から順番に見ていく.もし見ている桁が9でなく,かつ次の桁の数字より1小さいか同じなら,その桁をインクリメントし,それ以降の桁をルンルン数かつ最小となるように調整(つまり,&lsquo;上の桁 - 1&rsquo;か'0&rsquo;)した値がi + 1番目の数になる.どの桁も条件に当てはまらなければ,一番大きい桁をインクリメントする.<br> 各桁を確認,操作する場合は,数字をいったんchar型配列にするとやりやすいかも.</p> AtCoderで水色になりました https://t45k.github.io/blog/nyusui/ Sun, 29 Mar 2020 00:16:31 +0900 https://t45k.github.io/blog/nyusui/ <p>先日行われた<a href="https://atcoder.jp/contests/abc160" class="external-link" target="_blank" rel="noopener">ABC160</a>にて無事に入水を果たしたのでポエムを書きます. <img src="https://t45k.github.io/img/blog/nyusui.png" height="75%" width="75%"></p> <h2 id="感じたこと"> 感じたこと <a class="heading-link" href="#%e6%84%9f%e3%81%98%e3%81%9f%e3%81%93%e3%81%a8"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>一つの目標だった水色に到達してほっとしています. 人によっては10回かそこらでなる人もいる中,53回目でようやくなれた自分の才能とセンスのなさには本当に辟易しています. 精進が大事. 蟻本は最初の章しか読めてないけど結構役に立ちました.</p> <h2 id="次は"> 次は <a class="heading-link" href="#%e6%ac%a1%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>せっかくなので青色を目指します. ここ2回のABCは青パフォが出てるので,この調子で頑張っていきたいです.</p> <h2 id="最後に"> 最後に <a class="heading-link" href="#%e6%9c%80%e5%be%8c%e3%81%ab"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>毎回楽しいコンテストを開催してくれているAtCoder社と,その問題を用意してくれているWriter,Testerの皆様に心から感謝します.</p> ABC160の解説 https://t45k.github.io/kyopuro/abc160/ Sat, 28 Mar 2020 23:27:57 +0900 https://t45k.github.io/kyopuro/abc160/ <p>5完.<a href="https://github.com/T45K/tree/master/AtCoder/ABC/ABC160" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---coffee"> A - Coffee <a class="heading-link" href="#a---coffee"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>書かれてることをするだけ.<code>String#charAt</code>を使う</p> <h2 id="b---golden-coins"> B - Golden Coins <a class="heading-link" href="#b---golden-coins"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>なるべく多くの500円に換金した方が良いので,まずは<code>X</code>を500で割る. 余りを50で割って,それぞれの商に1000と5を掛けて出力.</p> <h2 id="c---traveling-salesman-around-lake"> C - Traveling Salesman around Lake <a class="heading-link" href="#c---traveling-salesman-around-lake"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ある家からその一つ手前の家までをぐるっと一周回ってくるのが最適となる. 1番目の家からN番目の家までに移動距離は<code>Ai - AN</code>,それ以外の家iから家i - 1までは<code>K - Ai + Ai-1</code>になるので,その中の最小値が答え.</p> <h2 id="d---line"> D - Line++ <a class="heading-link" href="#d---line"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ワーシャルフロイドっぽい問題.<br> まず初めにX,Yを経由しない場合の全ての頂点間の距離を求める. これはグラフを隣接行列で表すと<code>graph[i][j] = |i - j|</code>となる.<br> 次に,XまたはYを経由した場合を考えた上で,全ての頂点間の最短距離を求める. これは<code>graph[i][j] = min(graph[i][j], graph[i][X] + graph[X][j])</code>となる.<br> 最後に,隣接行列の中で各距離の出現回数を記録し,それを出力する.</p> <h2 id="e---red-and-green-apples"> E - Red and Green Apples <a class="heading-link" href="#e---red-and-green-apples"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>貪欲にやるだけ.<br> 美味しさを最大化したいとき,赤リンゴを降順に並べたときのX+1つ目以降と緑リンゴを降順に並べたときののY+1つ目以降は捨ててもよい. 後はそれぞれのリンゴの小さいものを順番に無色のものと入れ替えるだけ.</p> ABC159の解説 https://t45k.github.io/kyopuro/abc159/ Sun, 22 Mar 2020 22:48:22 +0900 https://t45k.github.io/kyopuro/abc159/ <p>奇跡的に5完.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC159" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---the-number-of-even-pairs"> A - The Number of Even Pairs <a class="heading-link" href="#a---the-number-of-even-pairs"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>和が正になるのは<code>even + even</code>か<code>odd + odd</code>の時なので,偶奇それぞれに対して組み合わせ(<code>n * (n - 1) / 2</code>)を計算して足し合わせる.</p> <h2 id="b---string-palindrome"> B - String Palindrome <a class="heading-link" href="#b---string-palindrome"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>書かれてることをするだけ. 回文系の問題は以下のようなメソッドを作っとくと便利かも.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="font-weight:bold">private</span> <span style="font-weight:bold">static</span> <span style="">boolean</span> isPalindrome(<span style="font-weight:bold">final</span> <span style="">int</span> start, <span style="font-weight:bold">final</span> <span style="">int</span> end, <span style="font-weight:bold">final</span> String s) { </span></span><span style="display:flex;"><span> <span style="font-weight:bold">for</span> (<span style="">int</span> i = 0; ; i++) { </span></span><span style="display:flex;"><span> <span style="font-weight:bold">if</span> (start + i &gt;= end - i) { </span></span><span style="display:flex;"><span> <span style="font-weight:bold">return</span> <span style="font-weight:bold">true</span>; </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> <span style="font-weight:bold">if</span> (s.charAt(start + i) != s.charAt(end - i)) { </span></span><span style="display:flex;"><span> <span style="font-weight:bold">return</span> <span style="font-weight:bold">false</span>; </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><h2 id="c---maximum-volume"> C - Maximum Volume <a class="heading-link" href="#c---maximum-volume"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Lの1/3の3乗</p> AGC043の解説 https://t45k.github.io/kyopuro/agc043/ Sat, 21 Mar 2020 23:37:35 +0900 https://t45k.github.io/kyopuro/agc043/ <script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script> <p>1完.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/AGC/AGC043" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---range-flip-find-route"> A - Range Flip Find Route <a class="heading-link" href="#a---range-flip-find-route"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>全探索の計算量をいかに減らせるかがポイント.DPは思いつかんかった&hellip;</p> <p>右か下にしか移動できない時,黒ゾーンに入ってから出るまでの経路を一回の操作で白にできる(公式参照). なので,白から黒に入る経路のコストを1,それ以外を0とみなした最短経路問題に落とし込むことができる. ダイクストラ法を使うと計算量は頂点数<code>V</code>と辺数<code>E</code>に対して<code>O(V * log(E))</code>となる. 今回の頂点数Vは<code>V &lt;= H * W = 10 ^ 4</code>となる. また,一つの頂点に対して辺の数はたかだか2(右に移動するか下に移動するかの2通り)なので,十分間に合う.</p> <h2 id="b---123-triangle"> B - 123 Triangle <a class="heading-link" href="#b---123-triangle"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>誰がこんな解法思いつくんでしょうね&hellip;(解説AC)</p> <p>答えは0,1,2のいずれかになるので,初めに答えの偶奇を判定する. 各aは先に1引いといても問題ない. 偶奇判定なので,<code>abs(a - b)</code>ではなく<code>a xor b</code>で良い. そうすると, <math> <msub> <mi>x</mi> <mn>n,1</mn> </msub> <mo>=</mo> <mo>(</mo> <mmultiscripts> <mo>C</mo> <mn>0</mn> <none /> <mprescripts /> <mi>n-1</mi> <none /> </mmultiscripts> <mo>⁢</mo> <msub> <mi>x</mi> <mn>1,1</mn> </msub> <mo>^</mo> <mmultiscripts> <mo>C</mo> <mn>1</mn> <none /> <mprescripts /> <mi>n-1</mi> <none /> </mmultiscripts> <mo>⁢</mo> <msub> <mi>x</mi> <mn>1,2</mn> </msub> <mo>^</mo> <mo>&hellip;</mo> <mo>^</mo> <mmultiscripts> <mo>C</mo> <mi>n-1</mi> <none /> <mprescripts /> <mi>n-1</mi> <none /> </mmultiscripts> <mo>⁢</mo> <msub> <mi>x</mi> <mn>1,n</mn> </msub> <mo>)</mo> <mo>%</mo> <mn>2</mn> </math> となる. そのため,各組み合わせを計算すれば良い.<br> 今回は偶奇が欲しいので,各組み合わせの2で割った余りだけで十分である. そこで<a href="https://mathtrain.jp/lucastheorem" class="external-link" target="_blank" rel="noopener"><strong>Lucasの定理</strong></a>を用いる(リンク参照). 定理に従うと手順はこう.</p> 「みんな元気。」読了 https://t45k.github.io/blog/all_fine/ Fri, 20 Mar 2020 12:00:53 +0900 https://t45k.github.io/blog/all_fine/ <p><strong>みんな大丈夫。みんな元気。</strong></p> <p>舞城王太郎の「みんな元気。」を読みました.<a href="https://www.amazon.co.jp/%E3%81%BF%E3%82%93%E3%81%AA%E5%85%83%E6%B0%97%E3%80%82-%E8%88%9E%E5%9F%8E%E7%8E%8B%E5%A4%AA%E9%83%8E-ebook/dp/B00CL6N332/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;dchild=1&amp;keywords=%E3%81%BF%E3%82%93%E3%81%AA%E5%85%83%E6%B0%97&amp;qid=1584673351&amp;sr=8-5" class="external-link" target="_blank" rel="noopener">Amazon</a></p> <p>この本は,表題である「みんな元気。(副題: Cuckoos &amp; The Invisible Devil)」と短編4編で構成されています. 例によってきっかけはDJ Technorch.</p> <p>粗筋は,空飛ぶ家族が主人公の妹を拐いに来てなんやかんやある感じです. 相変わらず難解だった気がします. この物語は,「選択」が主題の一つだと思います. 副題のカッコウから,拐われた妹が実は托卵だったみたいな展開を予想しましたが全然そんなことありませんでした. 風呂敷をめちゃくちゃに広げたうえで畳むことなく急に終わる感じなのですが,終わり方が納得できるというかとても爽やかでした.</p> <p>短編集の中では,「スクールアタック・シンドローム」が好きです.</p> <p>なんとなく,舞城王太郎特有のスピード感的なものを理解してきた気がしました.</p> <p>次はおそらく「九十九十九」を読みます.</p> <p>最後に</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/-71fQjkZ0X8" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> パナソニックプログラミングコンテスト2020の解説 https://t45k.github.io/kyopuro/panasonic2020/ Sat, 14 Mar 2020 22:56:44 +0900 https://t45k.github.io/kyopuro/panasonic2020/ <p>4完.<a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/others/pana20" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---kth-term"> A - Kth Term <a class="heading-link" href="#a---kth-term"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>実装するだけ. Javaの場合は問題文をコピペして<code>final int[] array = {1, 1, ...};</code>と宣言すると早い.</p> <h2 id="b---bishop"> B - Bishop <a class="heading-link" href="#b---bishop"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ここに一番時間を吸われた.<br> 問題例を見ると最終的に<code>(h * w + 1) / 2</code>でいけそうに見えるが,hまたはwが1の時角は一切移動できなくなることに気付けるかがポイント.</p> <h2 id="c---sqrt-inequality"> C - Sqrt Inequality <a class="heading-link" href="#c---sqrt-inequality"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ここにも時間を吸われた.<br> <code>Math#sqrt</code>を使うと解けそうな気がするが,精度の都合上間違いになることがある. 今回は式変換を行うと<code>4ab &lt; a^2 + b^2 + c^2 + 2ab - 2bc - 2ca</code>に持っていけるので,そこに代入するだけ. あるいは<code>BigDecimal</code>を使っても大丈夫らしい.</p> <h2 id="d---string-equivalence"> D - String Equivalence <a class="heading-link" href="#d---string-equivalence"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>偶然通った問題.<br> 左側から文字を決めていくが,使える文字は自身より左に存在している一番大きい文字 + 1までしか使えないことに注意.</p> <h2 id="e---three-substrings"> E - Three Substrings <a class="heading-link" href="#e---three-substrings"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>全探索の問題.<a href="https://www.hamayanhamayan.com/entry/2020/03/15/002311" class="external-link" target="_blank" rel="noopener">ここ</a>を参考にした.<br> Editorialではa,b,cの順番を考慮せずにやる方法を紹介しているが,考えることが増えるので素直に全ての順列で場合分けした方が良さそう. 以降,(aの先頭) ≦ (bの先頭) ≦ (cの先頭)の場合を考える.<br> まず,a中のどの箇所がbと被っているかを全探索して,配列か何かに記録する(O(n^2)).これをaとc,bとcに対してもやる. コードだとこんな感じ.</p> ABC061#Dの別解 https://t45k.github.io/kyopuro/abc061_d/ Sun, 08 Mar 2020 20:39:29 +0900 https://t45k.github.io/kyopuro/abc061_d/ <p><a href="https://atcoder.jp/contests/abc061/tasks/abc061_d" class="external-link" target="_blank" rel="noopener">ABC061 D - Score Attack</a>の別解.<a href="https://github.com/T45K/kyopuro/blob/master/ABC061/D/MainAlt.java" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="問題内容"> 問題内容 <a class="heading-link" href="#%e5%95%8f%e9%a1%8c%e5%86%85%e5%ae%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>正負の重みの辺で構成された,閉路を含む有向グラフの単一始点終点の最長経路を求める問題. 解説では,初めに辺の重みの正負を逆転してからベルマンフォード法で最短経路を求めている. また,経路に影響を与えうる閉路の存在を確認するために,フラグを使った方法を採用している.単純に負の閉路の存在が最短経路に影響を及ぼすわけではないことに注意.</p> <h2 id="別解"> 別解 <a class="heading-link" href="#%e5%88%a5%e8%a7%a3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>最長路検出と閉路検出について異なる方法を紹介する.</p> <h3 id="最長路検出"> 最長路検出 <a class="heading-link" href="#%e6%9c%80%e9%95%b7%e8%b7%af%e6%a4%9c%e5%87%ba"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>今回頂点数が1,000と比較的少ないので,BFSを用いた全探索が可能である. BFSを用いる場合は,閉路を含むことから,キューが空にならない可能性があるので,繰り返し回数を制限する必要がる. BFSであることから,n ^ 2 回繰り返せば十分である.</p> <h3 id="閉路検出"> 閉路検出 <a class="heading-link" href="#%e9%96%89%e8%b7%af%e6%a4%9c%e5%87%ba"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>解説ではbool型配列を用いてフラグ管理をしているが,そもそもフラグ管理をする必要はない. 各辺に対する経路長の更新を頂点の個数回繰り返し,結果が変わっていれば<code>inf</code>を出力すれば良い.</p> ABC158の解説 https://t45k.github.io/kyopuro/abc158/ Sat, 07 Mar 2020 22:42:19 +0900 https://t45k.github.io/kyopuro/abc158/ <p>四完.<a href="https://github.com/t45k/kyopuro/master/tree/abc158" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---station-and-bus"> A - Station and Bus <a class="heading-link" href="#a---station-and-bus"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>連想配列にぶちこむ.</p> <h2 id="b---count-balls"> B - Count Balls <a class="heading-link" href="#b---count-balls"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>n に対する (A + B) の商と余りを求めておき,ごちゃごちゃする.</p> <h2 id="c---tax-increase"> C - Tax Increase <a class="heading-link" href="#c---tax-increase"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>1から20,000くらいまでの整数が条件を満たすか全探索.</p> <h2 id="d---string-formation"> D - String Formation <a class="heading-link" href="#d---string-formation"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>現在文字列が正順なのか逆順なのかを記録しておくフラグを用意する. クエリが<code>1</code>ならフラグ反転,クエリが<code>2</code>の場合は,</p> <ul> <li>正順ならクエリ通りに文字追加</li> <li>逆順ならクエリとは逆に文字追加</li> </ul> <p>をやる. 最終的にフラグを参照してから正しい方向で出力.</p> <p><code>StringBuilder#insert</code>を使うとTLEになりました.</p> 「好き好き大好き超愛してる。」読了 https://t45k.github.io/blog/love_love_love_you_i_love_you/ Tue, 03 Mar 2020 16:20:18 +0900 https://t45k.github.io/blog/love_love_love_you_i_love_you/ <p><strong>愛は祈りだ。僕は祈る。</strong></p> <p>舞城王太郎の「好き好き大好き超愛してる。」を読みました.<a href="https://www.amazon.co.jp/%E5%A5%BD%E3%81%8D%E5%A5%BD%E3%81%8D%E5%A4%A7%E5%A5%BD%E3%81%8D%E8%B6%85%E6%84%9B%E3%81%97%E3%81%A6%E3%82%8B%E3%80%82-%E8%AC%9B%E8%AB%87%E7%A4%BE%E6%96%87%E5%BA%AB-%E8%88%9E%E5%9F%8E-%E7%8E%8B%E5%A4%AA%E9%83%8E/dp/4062760819/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&amp;keywords=%E5%A5%BD%E3%81%8D%E5%A5%BD%E3%81%8D%E5%A4%A7%E5%A5%BD%E3%81%8D%E8%B6%85%E6%84%9B%E3%81%97%E3%81%A6%E3%82%8B&amp;qid=1583220082&amp;sr=8-1" class="external-link" target="_blank" rel="noopener">Amazon</a></p> <p>きっかけはDJ Technorchの楽曲「Love Love Love You I Love You」.<br> 舞城王太郎作品は,以前「ディスコ探偵水曜日」を読んでめちゃくちゃ読みにくいなと思っていたので,読む前に少し構えました.<br> 「愛は祈りだ。」の一文から始まるこの本は,一貫して「愛」と「物語」についての小説です. 一文目がこれほど全体を象徴している作品は個人的にはこれが初めてで,おそらく長く記憶に残るんだろうなぁという感じです(余談ですが,最後の一文が一番記憶に残っている作品は西尾維新の「クビシメロマンチスト」). 読みやすい方ではありますが,理解するのは難しいと感じました.</p> <p>次は「みんな元気。」を読みます.</p> <p>最後に,きっかけとなった楽曲を貼っときます.</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/lTrDY-60mMg" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ABC157の解説 https://t45k.github.io/kyopuro/abc157/ Sun, 01 Mar 2020 22:53:59 +0900 https://t45k.github.io/kyopuro/abc157/ <p>なんとか四完.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC157" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---duplex-printing"> A - Duplex Printing <a class="heading-link" href="#a---duplex-printing"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><code>n</code>に1足して2で割るだけ</p> <h2 id="b---bingo"> B - Bingo <a class="heading-link" href="#b---bingo"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>実装するだけだが実装量が多くなりがちな問題</p> <h2 id="c---guess-the-number"> C - Guess The Number <a class="heading-link" href="#c---guess-the-number"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>条件に合う数字を生成する方針をとるもWAになったので全探索する方向に変更. 桁数を満たす整数を昇順に条件を満たすか確認する. 余談だが,WAの原因はおそらく1桁の数字は0でも大丈夫なのを考慮していなかったため.</p> <h2 id="d---friend-suggestions"> D - Friend Suggestions <a class="heading-link" href="#d---friend-suggestions"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Union-Find Treeで殴る問題. 友達関係を取得する時にUnion-Find Treeを構築します. 同時に,それぞれの人が何人友達がいるかを記録します.<br> ブロック関係を取得する際に,それぞれの人に何人ブロックしている人がいるか記録します. この時,友達候補でない人を記録する必要はありません.<br> 最終的に,Union-Find Treeから<strong>自分,友達,ブロック関係を含めた自分と繋がっている人</strong>を得られるので,そこから友達の人数とブロックしている人数と自分自身の人数を引くことで答えが求まります.<br> 余談ですが,<code>Set</code>をfor文で回すと異様に遅いので,for文を使う場合は<code>List</code>を使った方が良いです.</p> 最小全域木メモ https://t45k.github.io/kyopuro/min_spanning_tree/ Sat, 29 Feb 2020 22:37:36 +0900 https://t45k.github.io/kyopuro/min_spanning_tree/ <p>最小全域木という概念を知ったのでメモ.</p> <h2 id="最小全域木とは"> 最小全域木とは <a class="heading-link" href="#%e6%9c%80%e5%b0%8f%e5%85%a8%e5%9f%9f%e6%9c%a8%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><em>無向グラフが与えられた時に,その部分グラフで任意の2頂点を連結にする様な木を全域木(Spanning Tree)と言います.辺にコストがある場合に,使われる辺のコストの和を最小にする全域木を最小全域木(MST : Minimum Spanning Tree)と言います.</em>(蟻本より)<br> つまり,グラフが連結であることを保ったまま,コストの大きい辺を間引いてできたグラフを指します.連結であり,かつ辺のコストの和が最小なので,グラフは木となります.<br> <a href="https://atcoder.jp/contests/abc065/tasks/arc076_b" class="external-link" target="_blank" rel="noopener">ABC065-D</a>がこの問題に該当します.</p> <h2 id="解き方"> 解き方 <a class="heading-link" href="#%e8%a7%a3%e3%81%8d%e6%96%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>有名なアルゴリズムとして,クラスカル法とプリム法があります. 今回はクラスカル法を紹介します.<br> クラスカル法は至って単純で,各辺をコスト順にソートし,その辺が繋ぐノードが連結でなければその辺を採用,そうでなければ不採用としMSTを作ります. ノード同士が連結であるかどうかは,Union-Find Treeを用いて確認します.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="font-style:italic">// edges は Edge(int label1, int label2, long cost) のリスト</span> </span></span><span style="display:flex;"><span>edges.sort(Comparator.comparingLong(o -&gt; o.cost)); </span></span><span style="display:flex;"><span><span style="font-weight:bold">final</span> UnionFindTree unionFindTree = <span style="font-weight:bold">new</span> UnionFindTree(n); <span style="font-style:italic">// 要素数nのUnion-Find Treeを構築</span> </span></span><span style="display:flex;"><span><span style="">long</span> sum = 0; </span></span><span style="display:flex;"><span><span style="font-weight:bold">for</span> (<span style="font-weight:bold">final</span> Edge edge : edges) { </span></span><span style="display:flex;"><span> <span style="font-weight:bold">if</span> (!unionFindTree.isSame(edge.label1, edge.label2)) { </span></span><span style="display:flex;"><span> unionFindTree.unit(edge.label1, edge.label2); </span></span><span style="display:flex;"><span> sum += edge.cost; </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>辺のソートに一番計算量を食われます.</p> ワーシャルフロイド法メモ https://t45k.github.io/kyopuro/warshallfloyd/ Sun, 23 Feb 2020 01:54:16 +0900 https://t45k.github.io/kyopuro/warshallfloyd/ <p>ワーシャルフロイド法というアルゴリズムを知ったのでメモ.</p> <h2 id="ワーシャルフロイド法とは"> ワーシャルフロイド法とは <a class="heading-link" href="#%e3%83%af%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%95%e3%83%ad%e3%82%a4%e3%83%89%e6%b3%95%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>グラフのある一点から任意の点への最短距離を求めるアルゴリズム. 計算量は点の個数nに対してO(n^3). 似たようなアルゴリズムに<strong>ダイクストラ法</strong>があるが,あちらはある2点の最短距離をO(n^2)で求めるアルゴリズムである. 計算量が重ためなので,使う場面はかなり限られるが,知っておくと便利だと思った.</p> <h2 id="実装"> 実装 <a class="heading-link" href="#%e5%ae%9f%e8%a3%85"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>このアルゴリズムは,動的計画法を用いて最短距離を計算するというアイデアに基づいており,実装がとても簡単. 二次元配列を用いた例がこちら.</p> <div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-java" data-lang="java"><span style="display:flex;"><span><span style="font-weight:bold">public</span> <span style="font-weight:bold">static</span> <span style="">void</span> main(<span style="font-weight:bold">final</span> String[] args) { </span></span><span style="display:flex;"><span> <span style="font-weight:bold">final</span> <span style="">int</span>[][] graph = <span style="font-weight:bold">new</span> <span style="">int</span>[n][n]; </span></span><span style="display:flex;"><span> <span style="font-style:italic">// 初めに無限大の値で各要素を初期化</span> </span></span><span style="display:flex;"><span> <span style="font-weight:bold">for</span> (<span style="">int</span> i = 0; i &lt; graph.length; i++) { </span></span><span style="display:flex;"><span> Arrays.fill(graph[i], Integer.MAX_VALUE / 2); <span style="font-style:italic">// Integer.MAX_VALUEでないことに注意</span> </span></span><span style="display:flex;"><span> graph[i][i] = 0; </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="font-style:italic">// グラフの各辺を与えられた値に変更</span> </span></span><span style="display:flex;"><span> </span></span><span style="display:flex;"><span> <span style="font-style:italic">// ここからワーシャルフロイド</span> </span></span><span style="display:flex;"><span> <span style="font-weight:bold">for</span> (<span style="">int</span> k = 0; k &lt; graph.length; k++) { <span style="font-style:italic">// 中継する点</span> </span></span><span style="display:flex;"><span> <span style="font-weight:bold">for</span> (<span style="">int</span> i = 0; i &lt; graph.length; i++) { <span style="font-style:italic">// 出発する点</span> </span></span><span style="display:flex;"><span> <span style="font-weight:bold">for</span> (<span style="">int</span> j = 0; j &lt; graph.length; j++) { <span style="font-style:italic">// 到着する点</span> </span></span><span style="display:flex;"><span> graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]); <span style="font-style:italic">// 中継する点をとった方が短となるか判定</span> </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span> } </span></span><span style="display:flex;"><span>} </span></span></code></pre></div><p>三重ループを回すだけである. 注意点は,グラフの初期化時に<code>Integer.MAX_VALUE</code>を代入しないこと. <code>Math.min</code>のタイミングでオーバーフローするため</p> ABC156の解説 https://t45k.github.io/kyopuro/abc156/ Sat, 22 Feb 2020 22:17:59 +0900 https://t45k.github.io/kyopuro/abc156/ <p>4完.<a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC156" class="external-link" target="_blank" rel="noopener">解答</a></p> <h2 id="a---beginner"> A - Beginner <a class="heading-link" href="#a---beginner"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>算数</p> <h2 id="b---digits"> B - Digits <a class="heading-link" href="#b---digits"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>nが0になるまでkで割り続ける</p> <h2 id="c---rally"> C - Rally <a class="heading-link" href="#c---rally"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>座標は100までなので,1~100までの座標についてそれぞれ距離の総和を全探索する.</p> <h2 id="d---bouquet"> D - Bouquet <a class="heading-link" href="#d---bouquet"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>組み合わせの問題.<br> 組み合わせの総和(nCkのkを1からnまで時の和)からaとbそれぞれの組み合わせ時の場合の数(nCaとnCb)を引く. 組み合わせの総和は2^n - 1になる. a,bの組み合わせ計算の際には,modを考慮する必要があるため,フェルマーの小定理などを利用すると良い(modInvなどでググると出てくる).<br> <a href="https://github.com/T45K/kyopuro/blob/master/util/Utility.java#L360-L390" class="external-link" target="_blank" rel="noopener">modInvのJava実装の例</a></p> ABC155の解説 https://t45k.github.io/kyopuro/abc155/ Sun, 16 Feb 2020 22:48:43 +0900 https://t45k.github.io/kyopuro/abc155/ <p>無念の三冠.</p> <h2 id="a---poor"> A - Poor <a class="heading-link" href="#a---poor"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>重複を調べる問題.<br> 愚直に比較しても良いけど,Setを使うのが早そう.<br> JavaだとIntStreamからの各値にmapしてdistinctするとちょっとかっこいいかも.</p> <h2 id="b---papers-please"> B - Papers, Please <a class="heading-link" href="#b---papers-please"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>fizzbuzzみたいな問題.<br> これもIntStreamからのfilterでallMatchすると多少カッコよく書ける.</p> <h2 id="c---poll"> C - Poll <a class="heading-link" href="#c---poll"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>連想配列を使って数え上げる典型的な問題.<br> StringのListのソート方法をド忘れして時間を無駄に使ってしまった(正しくは<code>Collections#sort</code>). C#だと文字列ソートが遅いらしく発狂している人がちらほらいた.</p> <h2 id="d---pairs"> D - Pairs <a class="heading-link" href="#d---pairs"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>E問題より難しいD問題. 以下の要素が重なりあってきつい.</p> <h3 id="決め打ち二分探索"> 決め打ち二分探索 <a class="heading-link" href="#%e6%b1%ba%e3%82%81%e6%89%93%e3%81%a1%e4%ba%8c%e5%88%86%e6%8e%a2%e7%b4%a2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <p>決め打ち二分探索とは,単調性がある問題に対して,その問題を満たす最小の数字を探す二分探索法を指す. 単調性とは,ある数 <code>x</code> に対してその問題が成り立つならば,<code>x</code> 以降の数字に対しても成り立つような性質を指す.<br>  実装的な視点で言うと,まず最初に単調性を満たし,真偽値を返す関数 <code>isOk(...)</code> を用意する. D問題だと<strong>ある値 <code>x</code> と <code>K</code> が与えられた時に,積が <code>x</code> 以下となるペアの個数が <code>K</code> 以上の場合は真</strong>のようになる.<br>  次に,二分探索の対象を用意する.このとき,始点は <code>isOk</code> が偽となり,かつ終点は真となるような範囲を用意する. 今回だと,例えば出力が正となるような場合分けをした時,0は必ず偽なので <code>0 ~ 10^18</code> のようになる.<br>  そして二分探索する. 二分探索では通常範囲を指定するが,この時始点は <code>isOk</code> が偽,終点は真となることを意識する. 通常の二分探索と同じく対象範囲の真ん中の値(<code>(始点 + 終点) / 2</code>)をとり,それの真偽を判定する. 真の場合は始点から真ん中の値までを,偽の場合は真ん中の値から終点までを再起的に計算する. この操作で,常に始点は偽,終点は真となる. 最終的に始点と終点が連続した値になるため,その終点を解として出力する.<br>  要約すると,<code>isOk()</code> を満たす範囲の下界を求める操作だと言える.</p> ABC154の解説 https://t45k.github.io/kyopuro/abc154/ Sun, 09 Feb 2020 22:40:15 +0900 https://t45k.github.io/kyopuro/abc154/ <p>A~Dまで.<a href="https://github.com/t45k/kyopuro/tree/master/AtCoder/ABC/abc154" class="external-link" target="_blank" rel="noopener">コード</a></p> <h2 id="a---remaining-balls"> A - Remaining Balls <a class="heading-link" href="#a---remaining-balls"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Uで分岐</p> <h2 id="b---i-miss-you"> B - I miss you&hellip; <a class="heading-link" href="#b---i-miss-you"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>入力の文字列の長さの回数&rsquo;x&rsquo;を出力</p> <h2 id="c---distinct-or-not"> C - Distinct or Not <a class="heading-link" href="#c---distinct-or-not"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>連想配列を使って数字が出現したかを確認</p> <h2 id="d---dice-in-line"> D - Dice in Line <a class="heading-link" href="#d---dice-in-line"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>毎回期待値計算をすると遅いので,1000(&gt;= pi)までの累積和を計算しておく. あとは連続したKの要素の期待値の合計をそれぞれ求めるだけ.</p> <h2 id="e---almost-everywhere-zero"> E - Almost Everywhere Zero <a class="heading-link" href="#e---almost-everywhere-zero"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>桁DP<br> 0でない(= 1 ~ 9)の数字がK回出る回数を数える. 桁を上から決定していき数え上げる. 桁の決定の仕方は,<strong>その桁を決める前の時点でNより小さいことが確定しているかどうか</strong>で変わる.<br> 確定している場合を<code>dp[|N|][K + 1]</code>と表現した時に,桁iでの状態遷移は以下のようになる</p> <table> <thead> <tr> <th style="text-align: left">桁i-1での状態</th> <th style="text-align: left">桁iでの状態</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">確定している</td> <td style="text-align: left">0を選択する: <code>dp[i][k] += dp[i - 1][k]</code><br>0以外を選択する: <code>dp[i][k] += dp[i - 1][k - 1] * 9</code></td> </tr> <tr> <td style="text-align: left">確定していない</td> <td style="text-align: left">桁iが0の時: Nより小さくすることはできないので何もしない<br>桁iが0でない時: <strong>1 ~ (桁iの数字 - 1)までを選択することで確定している状態に持っていくことができる</strong>ので,桁i-1までに0以外の数字が出現した回数をjとすると<code>dp[i][j + 1] += (桁iの数字 - 1)</code></td> </tr> </tbody> </table> <p>桁を上から見て行った時に,0でない数字がK回出た時点で,それ以降の数字の決め方はNより小さいことが確定することに注意.<br> 最終的な出力は<code>dp[|N| - 1][K] + ((N自身が条件を満たす)? 1 : 0)</code></p> ICSE2020の面白そうな論文をピックアップしてみた https://t45k.github.io/blog/icse2020_abst/ Sat, 01 Feb 2020 18:59:35 +0900 https://t45k.github.io/blog/icse2020_abst/ <p>ICSEはInternational Conference of Software Engineeringの略です. ソフトウェア工学の国際学会の中で一番ランクが高い会議です. 会議自体は5月に行われるのですが,再録された論文一覧とアブストが公開されているので, 面白そうな論文をピックアップしてみました.</p> <h2 id="is-rust-used-safely-by-software-developers"> Is Rust Used Safely by Software Developers? <a class="heading-link" href="#is-rust-used-safely-by-software-developers"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>RustはC,C++に取って代わることを目指した,メモリ安全性や実行速度を売りにしているプログラミング言語です. その特徴から,ソフトウェア開発界隈からの注目度が高まりつつあります.<br> この論文では,メモリ安全性を放棄する代わりにパフォーマンスを上げる <strong>Unsafe Rust</strong> についての調査を行っています.</p> <h2 id="securing-unsafe-rust-programs-with-xrust"> Securing UnSafe Rust Programs with XRust <a class="heading-link" href="#securing-unsafe-rust-programs-with-xrust"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>これもRustの論文です.<br> XRustという,Unsafe Rustを通常のRustに移行する手法を提案しています.<br> ICSEに(Unsafe)Rustに関する論文が2本採択されていることから,ソフトウェア開発におけるRustの盛り上がり具合が分かります.</p> <h2 id="big-code--big-vocabulary-open-vocabulary-models-for-source-code"> Big Code != Big Vocabulary: Open-Vocabulary Models for Source code <a class="heading-link" href="#big-code--big-vocabulary-open-vocabulary-models-for-source-code"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>キャッチーなタイトルだったのでピックアップしてみました.<br> 変数名などのユーザー定義の識別子があるため,ソースコードは自然言語に比べて,大規模になるとコーパスが巨大になってしまいます. この論文では,コーパスがスケールするように,新しい言語モデルを提案しています.</p> <h2 id="dlfix-context-based-code-transformation-learning-for-automated-program-repair"> DLFix: Context-based Code Transformation Learning for Automated Program Repair <a class="heading-link" href="#dlfix-context-based-code-transformation-learning-for-automated-program-repair"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>最近のソフトウェア工学の大きなトピックの一つであるAPRの論文.<br> 機械学習ベースのAPRは過去のバグ修正の学習に制限があるのに対して,DLFixでは学習のレイヤを2層に分けることでうまくこの制限を回避したらしいです.</p> ABC153の解説 https://t45k.github.io/kyopuro/abc153/ Sun, 26 Jan 2020 22:32:42 +0900 https://t45k.github.io/kyopuro/abc153/ <p>けもフレチックでした.</p> <p>A~Eまで</p> <h2 id="a---serval-vs-monster"> A - Serval vs Monster <a class="heading-link" href="#a---serval-vs-monster"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>(H + A - 1) / A するだけ</p> <h2 id="b---common-raccoon-vs-monster"> B - Common Raccoon vs Monster <a class="heading-link" href="#b---common-raccoon-vs-monster"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>必殺技の総和をとって大小比較</p> <h2 id="c---fennec-vs-monster"> C - Fennec vs Monster <a class="heading-link" href="#c---fennec-vs-monster"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>体力が高い順にモンスターに必殺技を使い,残ったモンスターには通常攻撃</p> <h2 id="d---caracal-vs-monster"> D - Caracal vs Monster <a class="heading-link" href="#d---caracal-vs-monster"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>等比数列の和</p> <h2 id="e---crested-ibis-vs-monster"> E - Crested Ibis vs Monster <a class="heading-link" href="#e---crested-ibis-vs-monster"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>DP</p> <p>ソースコード<br> <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC153" class="external-link" target="_blank" rel="noopener">https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC153</a></p> 研究室のパソコンがmacbook proになった話 https://t45k.github.io/blog/mbp/ Tue, 21 Jan 2020 18:11:41 +0900 https://t45k.github.io/blog/mbp/ <p>組織特有の,年末に予算を使い切る目的で,新しいmacbook proを貸してもらえることになった. モデルはMid2019の13インチモデル. 研究室内で大した業績を上げていない自分にしてはとても良いものを貸してもらえたと思う.</p> <p>以下,使ってみた感想</p> <h2 id="良いとこ"> 良いとこ <a class="heading-link" href="#%e8%89%af%e3%81%84%e3%81%a8%e3%81%93"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li>速い</li> </ul> <p>今まで2015年モデルのmacbook airを借りていた. mbpと比べるとマシンパワーが段違いであり,作業にかかる時間が大幅に短縮された.</p> <ul> <li>画面が綺麗</li> </ul> <p>マジで全然違う. 4年でここまで変わるのかって感じ.</p> <h2 id="良くないとこ"> 良くないとこ <a class="heading-link" href="#%e8%89%af%e3%81%8f%e3%81%aa%e3%81%84%e3%81%a8%e3%81%93"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li>日本語入力がもっさりしてる</li> </ul> <p>mbaでは起きていなかった現象. 英語入力から日本語入力に変更した直後が,なぜか入力してから画面に表示されるまで0.5秒くらいかかる. ググったら結構記事がヒットしたので,何かしらの解決法はあると思う.</p> <ul> <li>キーボードがヤバイ</li> </ul> <p>使う前からバタフライキーボードがやばいことは理解していたが,使ってみるとやっぱりやばかった. 普段RealForceや青軸のゲーミングキーボード等のしっかりと押し込むタイプのキーボードを使っているので違和感が凄い.</p> <p>多分ボタンの押し方にコツが必要なのだと感じた. バタフライキーボードは指先で押すと指先を痛めやすい(インターンでmbpを借りていたときはマジで一日の終わりは指先が痛かった)ので,指の腹で押すのが大事だと思う. 今でも&rsquo;return&rsquo;を押す右小指が痛くなってきた. 普段からmbpを使っている友達曰く,なぞるように押すのが良いらしいので慣れるしかないかなぁって気持ち.</p> <p>また,バタフライキーボードは薄さにわりに押す際に力が必要なので,小指などで押す&rsquo;A&rsquo;や&rsquo;P&rsquo;などが押せてないことが頻発した.</p> <p>エスケープが使いづらいのも地味に辛い.</p> <h2 id="まとめ"> まとめ <a class="heading-link" href="#%e3%81%be%e3%81%a8%e3%82%81"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>研究室ではRealForceに接続して使うのでバタフライキーボードはまだマシだと思う.</p> ABC152の解説 https://t45k.github.io/kyopuro/abc152/ Mon, 20 Jan 2020 00:27:48 +0900 https://t45k.github.io/kyopuro/abc152/ <p>A~E問題まで.</p> <h2 id="a---ac-or-wa"> A - AC or WA <a class="heading-link" href="#a---ac-or-wa"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>if文で分岐するだけ</p> <h2 id="b---comparing-strings"> B - Comparing Strings <a class="heading-link" href="#b---comparing-strings"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>辞書順なので,どれだけ長くても答えは必ず2数の小さい方の値で構成される. 2数の大きい方の値の回数だけ,小さい方の値を出力する.</p> <h2 id="c---low-elements"> C - Low Elements <a class="heading-link" href="#c---low-elements"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>数字を順番に見て行った時に,今見ている数字が今まで見てきた中で最小の値以下であればカウントして,最小の値を更新.</p> <h2 id="d---handstand-2"> D - Handstand 2 <a class="heading-link" href="#d---handstand-2"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>与えられた数の範囲内で,数字の先頭と末尾だけを見た際に同じ数を数え上げていく. 例えば334は34,398は38という感じ. あとは組み合わせの数同士(例えば34なら43と,38なら83と)を掛け合わせるだけ.</p> <h2 id="e---flatten"> E - Flatten <a class="heading-link" href="#e---flatten"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>modの逆元を知らないと厳しい問題.<a href="https://qiita.com/drken/items/3b4fdf0a78e7a138cd9a#3-1-mod-p-%E3%81%AE%E4%B8%96%E7%95%8C%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%89%B2%E3%82%8A%E7%AE%97%E3%81%A8%E3%81%AF" class="external-link" target="_blank" rel="noopener">参考</a><br> この手の問題はユークリッドの互除法でGCDを求めてからLCMを求めるパターンがよくあるが,今回はオーバーフローの可能性があるため,素因数分解してからmod付きLCMを求める. LCMがmod計算してあるので,単純に各値で割るのではなく,modの逆元を計算した上で各値をLCMにかける必要がある.</p> <p>ソースコード<br> <a href="https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC152" class="external-link" target="_blank" rel="noopener">https://github.com/T45K/kyopuro/tree/master/AtCoder/ABC/ABC152</a></p> 自己紹介 https://t45k.github.io/about/ Tue, 14 Jan 2020 22:32:06 +0900 https://t45k.github.io/about/ <h1 id="こんにちは"> こんにちは <a class="heading-link" href="#%e3%81%93%e3%82%93%e3%81%ab%e3%81%a1%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h1> <p>中川 将(なかがわ たすく)。 大阪のバックエンドエンジニア。</p> <img src="https://t45k.github.io/img/about.jpg" height="50%" width="50%" > <h1 id="好き"> 好き <a class="heading-link" href="#%e5%a5%bd%e3%81%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h1> <ul> <li>Java、Kotlin、IntelliJ、Jenkins</li> <li>車輪が 2 つ付いてるもの <ul> <li>バイクは Kawasaki Ninja 250SL</li> <li>チャリンコは SPECIALIZED TARMAC</li> </ul> </li> <li>競プロ <ul> <li>AtCoder 水色</li> <li>(ほぼ引退)</li> </ul> </li> <li>酒 <ul> <li>ビールだと一番搾りとヒューガルデンとブルックリンラガー</li> <li>日本酒</li> </ul> </li> <li>DJ Technorch と Masayoshi Minoshima</li> </ul> <h1 id="嫌い"> 嫌い <a class="heading-link" href="#%e5%ab%8c%e3%81%84"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h1> <ul> <li>JavaScript</li> <li>クソコード</li> </ul> <h1 id="コーディングポリシー"> コーディングポリシー <a class="heading-link" href="#%e3%82%b3%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0%e3%83%9d%e3%83%aa%e3%82%b7%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h1> <ul> <li>イミュータブル</li> <li>非 null</li> <li>メソッドチェーン</li> </ul> <h2 id="登壇"> 登壇 <a class="heading-link" href="#%e7%99%bb%e5%a3%87"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <h3 id="カンファレンス"> カンファレンス <a class="heading-link" href="#%e3%82%ab%e3%83%b3%e3%83%95%e3%82%a1%e3%83%ac%e3%83%b3%e3%82%b9"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li><a href="https://eventregist.com/e/luIcqEmpqPI2" class="external-link" target="_blank" rel="noopener">JJUG CCC 2023 Spring</a></li> <li><a href="https://fortee.jp/kotlin-fest-2024/proposal/accepted" class="external-link" target="_blank" rel="noopener">Kotlin Fest 2024</a></li> </ul> <h3 id="勉強会"> 勉強会 <a class="heading-link" href="#%e5%8b%89%e5%bc%b7%e4%bc%9a"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h3> <ul> <li><a href="https://server-side-kotlin-meetup.connpass.com/event/291686/" class="external-link" target="_blank" rel="noopener">Server-Side Kotlin Meetup vol.10</a></li> <li><a href="https://hatena.connpass.com/event/314401/" class="external-link" target="_blank" rel="noopener">Kyoto Tech Talk #4</a></li> </ul> <h1 id="呟き"> 呟き <a class="heading-link" href="#%e5%91%9f%e3%81%8d"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h1> <style type="text/css"> .box{ overflow:auto; width:500px; height:1000px; padding:1px; color:#000000; background-color:#000000; line-height:1.5em; } </style> <div class="box"> <a class="twitter-timeline" href="https://twitter.com/getupmax?ref_src=twsrc%5Etfw"></a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </div> APSEC2019に参加した話 https://t45k.github.io/blog/apsec_2019/ Thu, 05 Dec 2019 20:19:32 +0900 https://t45k.github.io/blog/apsec_2019/ <p>12/3~5にマレーシアで開催されたAPSECに参加してきました.</p> <h2 id="apsecとは"> APSECとは <a class="heading-link" href="#apsec%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>Asia-Pacific Software Engineering Conferenceの略です. 要するにソフトウェア工学の国際会議です. 会議ランクについては詳しくは知らないのですがそこまで高くないと思います. 投稿前に先生が,「APSECは塩漬けのネタを投稿するのにちょうど良い」と語っていたのが印象的でした.</p> <h2 id="マレーシアとは"> マレーシアとは <a class="heading-link" href="#%e3%83%9e%e3%83%ac%e3%83%bc%e3%82%b7%e3%82%a2%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>こんな国です.</p> <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">マレーシア<br>+ 物価が安い<br>+ 時差が1時間<br>+ 英語が通じる<br><br>+- 暑い<br><br>- 酒を飲める場所がかなり限られる<br>- 用を足した後に紙を使わない文化</p>&mdash; task (@getupmax) <a href="https://twitter.com/getupmax/status/1202822137611862017?ref_src=twsrc%5Etfw">December 6, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <h2 id="感想"> 感想 <a class="heading-link" href="#%e6%84%9f%e6%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <img src="https://t45k.github.io/img/blog/apsec.jpg" height="50%" width="50%"> <p>投稿前はあまり気乗りしなかったし,正直通るとも思ってませんでしたが,結果的には国際学会で発表できて良かったなと感じました. 質疑対応がかなりグダッてしまったので英語力(特にリスニング)を鍛えるのが重要だと思いました.</p> LINE DEVELOPER DAY2019に参加した話 https://t45k.github.io/blog/devday/ Thu, 21 Nov 2019 20:16:05 +0900 https://t45k.github.io/blog/devday/ <p>11/20,21に開催されたLINE DEV DAYに参加してきました.</p> <figure><img src="https://t45k.github.io/img/blog/devday.JPG" width="50%" height="50%"> </figure> <h2 id="dev-dayとは"> DEV DAYとは <a class="heading-link" href="#dev-day%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>LINEが開催している社内の技術などを公開するエンジニア向けのイベントです. 今年は二日に分けて開催し,エンジニアだけでなくデザインやプロダクト的な話も盛り込んだそうです.</p> <h2 id="参加したきっかけ"> 参加したきっかけ <a class="heading-link" href="#%e5%8f%82%e5%8a%a0%e3%81%97%e3%81%9f%e3%81%8d%e3%81%a3%e3%81%8b%e3%81%91"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p><a href="../line/" >LINEのインターン</a>に参加した時のメンターさんがLINE SDKのリードテックになられたらしく,DEV DAYでの登壇の際にインターン中に作ったプロダクトを紹介するかもみたいな話を小耳に挟んだのがきっかけです. また,LINEは学生向けに金銭的援助を行っており,インターン生は(交通費として)無条件で3万円もらえるというのも結構魅力的でした.</p> <h2 id="感想"> 感想 <a class="heading-link" href="#%e6%84%9f%e6%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>20日は違う会社の採用面接に参加していたため,21日だけ参加しました. 思ったより規模が大きく,たくさんの人が参加していたのが印象的でした. 感想ですが,実は当日頭痛が酷く,話を聞く余裕がなかったというのが正直なところです. 例のメンターさんの発表で,唐突にライブコーディングが始まったのだけはっきり覚えています. また,国際学会前というのもあり,慌ただしく帰ることになってしまいました.</p> <p>今年はゆっくり聞く時間がなかったので,来年機会があればもう少し余裕を持って参加したいなと感じました.</p> インターン総括 https://t45k.github.io/blog/intern/ Sat, 14 Sep 2019 18:26:04 +0900 https://t45k.github.io/blog/intern/ <p>2019年,M1の夏休みに行ってきたインターンの所感を書きます.</p> <h2 id="参加したインターン"> 参加したインターン <a class="heading-link" href="#%e5%8f%82%e5%8a%a0%e3%81%97%e3%81%9f%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li><a href="../aws/" >AWS</a></li> <li><a href="../line/" >LINE KYOTO</a></li> <li><a href="../rakuten/" >楽天</a></li> </ul> <h2 id="参加しなかったインターン"> 参加しなかったインターン <a class="heading-link" href="#%e5%8f%82%e5%8a%a0%e3%81%97%e3%81%aa%e3%81%8b%e3%81%a3%e3%81%9f%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li><a href="../ntt/" >NTT DATA</a></li> </ul> <h2 id="参加できなかったインターン"> 参加できなかったインターン <a class="heading-link" href="#%e5%8f%82%e5%8a%a0%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8b%e3%81%a3%e3%81%9f%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li><a href="../nssol/" >NSSOL</a></li> <li><a href="../cookpad/" >cookpad</a></li> </ul> <h2 id="インターン全体の所感"> インターン全体の所感 <a class="heading-link" href="#%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3%e5%85%a8%e4%bd%93%e3%81%ae%e6%89%80%e6%84%9f"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <ul> <li> <p>意識高い学生が多い</p> <ul> <li>学部の時は普段からゴリゴリ開発してるような友人はあまりいなかったため,意識の高い学生がこんなにもいることに驚きました</li> <li>彼らと就活で戦うことを考えるとすでに辛い</li> </ul> </li> <li> <p>結構B3,B4で参加してる人も多い</p> <ul> <li>意識高い</li> <li>当時の僕はインターンなんて考えたことなかったので</li> </ul> </li> <li> <p>実力も高い</p> <ul> <li>AtCoder青とかがゴロゴロいる</li> </ul> </li> </ul> <p>また,自分のスキルアップ(特にweb周りの知識)に繋がったのでよかったです.</p> <p>反省点としては,フロントなどの今までの自分が全くやったことがないような分野に挑戦することがなかったことが挙げられます. 自分の知らない分野を一から勉強した上できちんとしたものを作ることを,期限が短いインターン中にやり切るのは難易度が高いと感じました. こういうことは普段から興味を持って勉強した方が良いのだと考えさせられました.</p> 楽天のインターンに参加した話 https://t45k.github.io/blog/rakuten/ Fri, 13 Sep 2019 18:21:32 +0900 https://t45k.github.io/blog/rakuten/ <figure><img src="https://t45k.github.io/img/blog/rakuten_morning.JPG" width="50%" height="50%"> </figure> <p>9/9~13の間,大阪で開催された楽天様のインターンに参加してきました. 写真はインターン中に頂いた無料朝食です.</p> <h2 id="楽天とは"> 楽天とは <a class="heading-link" href="#%e6%a5%bd%e5%a4%a9%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>説明不要だと思います. 日本発のメガベンチャーで,ECの楽天市場などが有名です. 会社としては,外国人を積極的に採用しており,社内公用語が英語であることが特徴です.</p> <h2 id="選考フロー"> 選考フロー <a class="heading-link" href="#%e9%81%b8%e8%80%83%e3%83%95%e3%83%ad%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>選考は面接だけでした. 面接の内容もそこまで突っ込んだ話はしなかったです. 面接官の社員さんと趣味が合い,ずっとバイクの話をしていました.</p> <p>面接に通過した後,Springを使うための簡単な事前課題が出されました.</p> <h2 id="インターン"> インターン <a class="heading-link" href="#%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>外国人向けサービスを作ってみようという題目でハッカソンを行いました. 学生4人 + メンターの社員さん2名で開発を行っていくという方式でした. 今までメンターの社員さんは困ったり質問があったら訊きにいく程度の存在だったので,ここまでがっつり開発に参加してくれるのは新鮮でした. 他のインターンでは作るものが指定されていたので,アイデアソンから始めるというのは初めての出来事でした(余談ですが,アイデアが他の班と完全に被っていました).</p> <p>開発を始めたのは2日目の朝からでしたが,班のメンバーにはgitを使ったことなかったり,Javaを書いたりしたことがない人もいたため,午前中はそこら辺の知識の共有から始めました(これのおかげで,その後スムーズに開発することができました). 仕様などを決める際にも,社員さんと相談しながら決めました. AWSの時はまったく理解できなくて着いていけなくなった経験から,分からないことは質問して理解してから先に進むようにしました. 開発自体はスムーズに進み,プロダクト自体も個人的には満足いくものが作れました. 技術的な面では,空いている時間でCIやDockerなどのモダンな技術を導入できました. しかしプレゼンがグダリすぎてしまい,コンペでは最下位という結果でした. プロダクト自体には満足していたので,結構悔しかったです. ただ開発は楽しかったし,会社としての楽天も食堂が無料など良い点が多くインターンには非常に満足しました.</p> <h2 id="追記"> 追記 <a class="heading-link" href="#%e8%bf%bd%e8%a8%98"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>インターン中のパフォーマンスが評価されて,M1の10月ごろに採用面接をしていただけました. 合計3回の面接を経て,内定を頂けました.</p> LINE KYOTOのインターンに参加した話 https://t45k.github.io/blog/line/ Fri, 30 Aug 2019 18:13:39 +0900 https://t45k.github.io/blog/line/ <figure><img src="https://t45k.github.io/img/blog/line.JPG" width="50%" height="50%"> </figure> <p>8/26~30の間,京都で開催されたLINE KYOTOのインターンに参加してきました.</p> <h2 id="line-kyotoとは"> LINE KYOTOとは <a class="heading-link" href="#line-kyoto%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>LINEが何なのかは説明不要だと思うので割愛します. LINE KYOTOは開発部しか持っていない,純粋な開発拠点であることが特徴の一つです. また,京都という土地柄,外国人が多く所属しているのも特徴です(社員さんの半分以上が外国籍の方でした).</p> <h2 id="選考フロー"> 選考フロー <a class="heading-link" href="#%e9%81%b8%e8%80%83%e3%83%95%e3%83%ad%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>選考は技術試験と面接です. 技術試験はいわゆるプロコンみたいな問題で,普段から勉強しておくと多少有利かもしれません. 面接は,今まで自分がやってきたことを5枚程度のスライドにまとめて,その内容も踏まえて面接を行うというものでした. 僕はこれまで大規模な開発などを経験したことがなかったので,これまでやってきた研究について話しました. 結構倍率は高いようでしたが何とか通りました.</p> <h2 id="インターン"> インターン <a class="heading-link" href="#%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>LINEが開発しているLIFF SDKを用いて,LINE上で動くサービスを開発してみようという内容でハッカソンを行いました. 3人で一つの班を組み,4つのテーマから1つ選択するという形式で,僕たちの班はUNOを選択しました. 僕達が参加した一週間前にも同じインターンがあり,その時UNOを選択した班は結局完成しなかったと散々脅されましたが,結果的に4班中3班がUNOを選択していました.</p> <p>僕達の班はフロントの描画担当の子がKotlinで書くということなので,フロントからサーバまですべてKotlinで書くことにしました. 僕は楽天のインターンの事前課題でSpringを触っていたのでサーバを書くことにしました. また,3人班のもう一人の子が超絶優秀で,最初に仕様とDB設計を行い,サーバとフロントの手伝いをしつつ,サーバとフロントと外部APIを繋げてちゃんと動くようにするという一番難しい部分を担ってくれたおかげで,僕たちの班はちゃんと動くものを作ることができました. 結果的に他の2班は完成させることができず,とても達成感と満足感を得ることができました.</p> <p>社員さん達もそれぞれの分野に精通した人が揃っていて,問題が発生してもすぐに解決できることが多かったです. 残業禁止で定時には全員帰られるというのもとても魅力的でした.</p> <p>インターン中の様子は以下の以下のLINE公式ブログにも取り上げられています. <a href="https://engineering.linecorp.com/ja/blog/kyoto-intern2019/" class="external-link" target="_blank" rel="noopener">https://engineering.linecorp.com/ja/blog/kyoto-intern2019/</a></p> <h2 id="追記"> 追記 <a class="heading-link" href="#%e8%bf%bd%e8%a8%98"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>せっかくインターンに参加したので,本選考も受けることにしました. 本選考は技術テストが1回,技術面接が1回,最終面接でした. 最終面接にて無事不採用となりました.</p> AWSのインターンに参加した話 https://t45k.github.io/blog/aws/ Tue, 20 Aug 2019 18:07:41 +0900 https://t45k.github.io/blog/aws/ <p>8/19~13の間,東京で開催されたAmazon Web Serviceのインターンに参加してきました.</p> <h2 id="awsとは"> AWSとは <a class="heading-link" href="#aws%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>AWSとは,Amazon Web Serviceの略です. AWSはAmazonのクラウド事業を担当している会社です. Amazonのマーケットプレイスを筆頭に,様々な会社がAWSのクラウドを利用しています(クラウド事業ではシェア1位です). 今,世界で最も勢いのあるIT会社の一つだと言えます.</p> <h2 id="選考フロー"> 選考フロー <a class="heading-link" href="#%e9%81%b8%e8%80%83%e3%83%95%e3%83%ad%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>HP上には技術試験 + 面接と書いてあったのですが,なぜか面接が行われませんでした. 技術試験では実際にEC2インスタンスが与えられ,そこの上でAPIサーバを立てるという内容でした. 今までサーバ開発をしたことがなかったので,簡単にサーバが書けると噂のPHPを急いで勉強して何とか提出にこぎつけました. 問題的には明らかにDBを使わせようとしていましたが,そこまで手が回らなかったのでjsonファイルを読み書きするという手段をとりました. 結果的に通ったので良かったです.</p> <h2 id="インターン"> インターン <a class="heading-link" href="#%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>実際に存在するサービスを模倣してアーキテクチャを設計するという題目で,5日間グループワークを行いました. 仕事内容的には魅力的だったのですが,いかんせん僕にネットワークの知識がなさすぎて2日目くらいから早くも着いていけなくなりました. 東京まで来て何してるんだろうって結構辛い気持ちになりました. ただしっかり勉強した上で望めば本当に楽しいのだろうなと感じました.</p> <h2 id="追記"> 追記 <a class="heading-link" href="#%e8%bf%bd%e8%a8%98"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>このインターンは採用直結型だったので,インターン後そのまま本選考に応募しました. 技術試験,技術面接,最終面接を経て,12/24に無事不採用となりました.</p> cookpadのインターンに参加できなかった話 https://t45k.github.io/blog/cookpad/ Thu, 01 Aug 2019 18:32:27 +0900 https://t45k.github.io/blog/cookpad/ <p>cookpadのインターンに参加できませんでした.</p> <h2 id="cookpadとは"> cookpadとは <a class="heading-link" href="#cookpad%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>料理のレシピを提供するサービスで有名な会社です. あまり知られていないのですが(僕が知らなかっただけかもしれませんが),ITに力を入れており,技術力があるエンジニアが多く所属しています.</p> <h2 id="選考フロー"> 選考フロー <a class="heading-link" href="#%e9%81%b8%e8%80%83%e3%83%95%e3%83%ad%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>技術試験 + 面接です.</p> <p>技術試験はプロコンのようにテストケースが用意されているわけではなく,仕様のみが与えられてそれに一致するようなコードを書くという問題でした. 仕様を満たすようにコードは書いたつもりでしたが落ちてしまいました.</p> <p>原因として考えられるのが,問題中APIを叩く部分があって,通常であれば言語仕様に則ってPOSTなどをすると思うのですが,当時はAPIって何?って状態だったので,直接コマンドからcurlを呼び出すように書きました. その辺から技術不足が見抜かれたのかなぁって感じです.</p> <p>結構悔しかったです.</p> NSSOLのインターンに参加できなかった話 https://t45k.github.io/blog/nssol/ Thu, 01 Aug 2019 18:32:21 +0900 https://t45k.github.io/blog/nssol/ <p>NSSOL様のインターンに参加できませんでした.</p> <p>NSSOLに行った研究室の先輩方は多く,結構興味を持っていました. 東京までの旅費や宿泊費を出してくれる上に,毎日飲み会があると聞いていたので参加できることを楽しみにしていました.</p> <h2 id="nssolとは"> NSSOLとは <a class="heading-link" href="#nssol%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>日本製鐵のシステム部門が独立してできた会社です. 母体が大きな会社であり,NSSOLも国内のSIerの中ではそれなりに大きく有名な会社です.</p> <h2 id="選考フロー"> 選考フロー <a class="heading-link" href="#%e9%81%b8%e8%80%83%e3%83%95%e3%83%ad%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ES + SPI + 面接でした.</p> <p>SPIはテストセンターまで受けに行かなければならず面倒でした. 面接は顔合わせ程度のものだと聞いていたのでここで落とされるとは思っていませんでした. ただ面接自体は,普段からやっていて癖になっている自虐が多く出てしまい落ちることも納得でした. こういうジャパニーズトラディショナルカンパニーには面接でありのままの自分を見せるよりも多少は偽った方が良いのかなと思いました.</p> NTT DATAのインターンに参加しなかった話 https://t45k.github.io/blog/ntt/ Thu, 01 Aug 2019 18:32:15 +0900 https://t45k.github.io/blog/ntt/ <p>NTT DATAのインターンに参加しませんでした.</p> <h2 id="ntt-dataとは"> NTT DATAとは <a class="heading-link" href="#ntt-data%e3%81%a8%e3%81%af"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>国内情報系最大手のNTTのSI部門会社です. やはり最大手らしく,日本全国から有能な人材が集まることで有名です.</p> <h2 id="選考フロー"> 選考フロー <a class="heading-link" href="#%e9%81%b8%e8%80%83%e3%83%95%e3%83%ad%e3%83%bc"> <i class="fa-solid fa-link" aria-hidden="true" title="見出しへのリンク"></i> <span class="sr-only">見出しへのリンク</span> </a> </h2> <p>ES + SPI + 動画提出でした.</p> <p>テストセンターに行かなくても自分のパソコン上でSPIを受けれたのが個人的に楽でした. 動画はインターンに対する意気込みを語れとのことでした. これで採用か不採用かが決まるのも変な気がしましたが,とりあえずほぼ一発どりで提出したら通ってびっくりました.</p> <p>このインターンに参加すると合計4週間インターンに行くことになってしまうので辞退しました.</p> https://t45k.github.io/kyopuro/doc/ Mon, 01 Jan 0001 00:00:00 +0000 https://t45k.github.io/kyopuro/doc/ <!DOCTYPE HTML> <!-- NewPage --> <html lang="ja"> <head> <!-- Generated by javadoc (11.0.11) on Sun Nov 07 23:56:29 JST 2021 --> <title>生成されたドキュメント(タイトルなし)</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript">window.location.replace('library/package-summary.html')</script> <noscript> <meta http-equiv="Refresh" content="0;library/package-summary.html"> </noscript> <link rel="canonical" href="library/package-summary.html"> <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style"> </head> <body> <main role="main"> <noscript> <p>ブラウザのJavaScriptが無効になっています。</p> </noscript> <p><a href="library/package-summary.html">library/package-summary.html</a></p> </main> </body> </html>