AtCoder Beginner Contest 51 C問題
最短経路はいくつかありうるが、 - 1回目はx, yの座標差分だけ移動 - 2回目は1回目を迂回するように、x, yの座標差+2の距離ずつ移動する ようにすればよい。
迂回の仕方はいろいろあるが、1パターンだけでいいので以下の経路でコーディングする。
use proconio::input; fn main() { input! { sx: i32, sy: i32, tx: i32, ty: i32, }; let dx = (tx - sx) as usize; let dy = (ty - sy) as usize; // 1 print!("{}", "U".repeat(dy)); print!("{}", "R".repeat(dx)); print!("{}", "D".repeat(dy)); print!("{}", "L".repeat(dx)); // 2 print!("L"); print!("{}", "U".repeat(dy + 1)); print!("{}", "R".repeat(dx + 1)); print!("DR"); print!("{}", "D".repeat(dy + 1)); print!("{}", "L".repeat(dx + 1)); println!("U"); }
Submission #30898620 - AtCoder Beginner Contest 051
.repeat
の存在を初めて知ったので覚えておく。- Rustはusize型と数値型の変換が面倒なので良い書き方を覚えたい。
Webエンジニア3年目、デザインパターンの本を久々に読み返す
ブログを少しカジュアルに書いてみようと思って書いてみる(めっちゃ久々…
最近、オブジェクト指向言語を使ってるのにオブジェクト指向を深く理解していない・使いこなせていないんじゃないかと思うことがあって、とりあえず前に買ったデザインパターン本を引っ張り出してきてみた。
この本は一度メジャーそうなパターンだけ2、3年前くらいに通読したことがあって、そのときはあんまり実際のWebアプリケーションを開発した経験も浅かったのでいまいちピンと来ていない感があった。当時は道具だけ与えられて作りたい料理がないみたいな感じだったので、今読んでみたら発見があるのかなと思った。
結論として、前よりは有用性を実感できるデザインパターンの数も増えたなと思った。
以下のパターンはエンジニア生活で実際に出会ったもの。
- Iterator
- Adapter
- Template Method
- Factory Method
- Singleton
- Prototype
- Builder
- Facade
- Observer
- Command
とはいえこれ以外のデザインパターンに対してはそこまで理解していないし、実際にそれが使える場面になったときに引き出せるのか自信がない。必要なときに出てこない道具っていうのは意味ない気がしてきた(今更)
理解しておきたいデザインパターン
名前はよく聞くけどちゃんと説明できないので以下は要旨は理解しておきたいと思った。 - Bridge - Strategy - State
デザインパターン不要論(?)
Googleでデザインパターンを検索すると以下のように古いとか使わないとかサジェストされる。 確かにQiitaとかZennとか見ててもデザインパターンの話は出てこない。 「古い 」のほうの検索結果を見てみるとこういう記事が出てきて、書いてあることは納得することが多かった。ライブラリやフレームワークの中にいるんだという話
GoFはどこへ消えた? - カレーなる辛口Javaな加齢日記
私が業務コードで見たことのあるデザインパターンもだいたい言語の機能、フレームワーク、ライブラリの一部に組み込まれていて、それに乗っかってコーディングしてる感覚が強かった。(SingletonはScalaのコンパニオンオブジェクトで、Commandはフロントの状態管理ライブラリでstateに対するActionの型とかが近い感覚)
オブジェクト指向をもっと理解したい
デザインパターン本に関してはたまたま本棚で目についたから読み直したという感じなので、もともとのオブジェクト指向を理解したいという目的に対してはその一部でしかない。 以前同僚が以下の本について話していた記憶があるのだが、値段に圧倒され手を出せてはいない(けど手に入れれば色々網羅できそう)
Classi Angular Night #2 参加記
去る2019年3月27日(水)に、Classi Angular Night #2に参加してきました!
classi-angular-night.connpass.com
・Classiさんのイベントレポ: www.wantedly.com
・Togetter: togetter.com
というわけで、自身の復習も兼ねて参加記です。
(Angular始めて3ヶ月(というかJSフレームワーク業務で使うのもこれが初めて…)なので理解が間違っているところもあると思いますので、なにか気づいたことがあればご指摘お願いしますm( )m)
1. Angular Way をまっすぐ歩くために
・発表者:Classi 笠原さん
・資料:Angular Way をまっすぐ歩くために / classi-angular-night-number-2 - Speaker Deck
コンポーネント設計周りは、他社さんがどのようにやっているのか気になっていたので非常に興味深く聞かせていただきました。
普段開発している中でほぼほぼ内容同じだけど微妙に違う(追加画面と編集画面とか)コンポーネントの共通化ってどうしているんだろう?と思うことがあったのでとても参考になりました。
何気なく使っていたasync pipeのメリットや、TSLintのおすすめ設定も目から鱗でした!
async pipe使うとunsubscribeを気にしなくていい #classi_angular_night
— おふとんキングダム (@oftonkingdom) March 27, 2019
2. テストカバレッジ100%のプロジェクトで体感した、テストのメリット
・発表者:Classi 原さん
・資料: テストカバレッジ100%のプロジェクトで学んだ、 ユニットテストの書き方 - Speaker Deck
発表の最初に「みなさん、テスト書いてますかー?」と質問されていましたが、確か半分行かないくらいだったかな?(私も書いたことないです。。)
とても印象的だったのが、「テストを書きやすくするために考えることが、設計の見直しのチャンスになる」とおっしゃっていたことです。(ほんとその通りですよね。)
テストカバレッジ100%のメモ帳を見ながら、Angularのテストの勉強したいなーと思いました。
3. Angular初心者からのネクストステップ
・発表者:lacoさん
・資料:20190327 - Classi Angular Night #2 - Google スライド
Angularチュートリアルが終わったら何やればいいの?←まさに今の私!だったので、今後の学習の方向性が見えてとてもよかったです。
チュートリアルで知ったことをもとにDocumentationを読んでいく→初心者脱出 #classi_angular_night
— おふとんキングダム (@oftonkingdom) March 27, 2019
Angularに限らず、様々な技術の勉強にも横展開できる内容でした。
守→破→離のどこに自分がいるのか常に考えながら、ステップアップしていきたい…!(Angular After Tutorial - Angular After Tutorial やります)
4. NgRxは入れるだけでいいのか? 発生する懸念と考えられるアーキテクチャ
・発表者:奥野賢太郎さん
・資料:NgRxは入れるだけでいいのか? 発生する懸念と考えられるアーキテクチャ / NgRx Architecture - Speaker Deck
まずアーキテクチャを考える必要性について。巨大なクラスを分離するためにServiceを闇雲に増やしていくのではなく、何のためのServiceかなのか意識することが大切というお話。(そしてそれは結局、テストをしやすくするため、につながる!)
Componentスパゲッティ化→service化→Angularのservice増えすぎ問題→スパゲッティが大きくなるだけ #classi_angular_night
— おふとんキングダム (@oftonkingdom) March 27, 2019
その上でNgRxについてでした。NgRxは入れるだけでなく、アーキテクチャを考えることが重要!
Effectsの多用は避ける、など具体的なプラクティスも述べられていて参考になりましたー。
自社プロダクトにおいても、NgRxを以前から用いておりましたが、コードが長くなりがちだったりしているのみんなどうしているんだろう?と思っていました。
まとめ
Angular関連の勉強会は初めて参加しましたが、他社さんの事例を聞くことができてとても良かったです。(初心者の方も結構いて安心しました!)
また、個人的に懇親会などで感じたこととして、初心者すぎて自分が発信できる内容が少ないな。。。と。
今回の勉強会をきっかけにAngularのステップアップをしていけたらな、と思います。
2018年 買ってよかったもの
こんにちは!
2018年もあと10日ほどで終わってしまうので、振り返りを兼ねて買ってよかったものをシェアします。定番品ばかりですが。
こういう記事を読むのが好きなので自分でも書いてみました(他人がどんないいお買い物してるかって気になる)
- 1. Anker SoundCore2
- 2. HUAWEI P20 lite
- 3. SHURE イヤホン SEシリーズ SE215
- 4. Kindle Paperwhite
- 5. バンカーリング
- 6. 電動コーヒーミル
- 7. ドレッサー
- 来年ほしいもの
1. Anker SoundCore2
Anker SoundCore 2 (12W Bluetooth4.2 スピーカー 24時間連続再生)【強化された低音 / IPX5防水規格 / デュアルドライバー / マイク内蔵】(ブラック)
- 出版社/メーカー: Anker
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
夏のプライムデーに勢いで買った初のBluetoothスピーカー。コンパクトかつ防水対応、車に置いて使うのも割といけます。
家族と貸し借りもしているんですが、返してもらって再生した途端、家族のスマホで再生する音楽(DA PUMPのUSA)が流れてきてしまう(ペアリング解除忘れ)という事件も発生しました。みなさん気をつけてください。
やっぱりスピーカーを通した音は違うね。
2. HUAWEI P20 lite
Huawei 5.84インチ P20 lite SIMフリースマートフォン クラインブルー【日本正規代理店品】
- 出版社/メーカー: HUAWEI
- 発売日: 2018/06/15
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
話題のファーウェイですが…製品としてよかったのでレビューしたくて。
この商品は本当にコスパがいいです。2〜3万円でこの性能はちょっと意味がわからない。iPhoneから乗り換えましたが、今のところこれといったストレスは感じていません。
何の変哲もない川を、何も考えずに撮ってみてこの美しさ。
インスタ映えカメラと言われているだけあり、発色が鮮やかな感じがします。
買って1ヶ月くらい経ちましたが、他にもネットのレビューで見るような以下の特徴は実感しています。
3. SHURE イヤホン SEシリーズ SE215
SHURE イヤホン SEシリーズ SE215 カナル型 高遮音性 Special Edition トランススルーセントブルー SE215SPE-A 【国内正規品】
- 出版社/メーカー: Shure Incorporated
- 発売日: 2012/11/28
- メディア: エレクトロニクス
- クリック: 4回
- この商品を含むブログ (25件) を見る
メインで使っているBluetoothイヤホンのサブとして。
ロングセラーのものだけあって安定感があります。さすがに3万円以上のイヤホンほどの快適な音質ではないですが、華やかな音がする気がする。SHURE掛けして耳に押し込めば遮音性も抜群です。
ちなみにメイン機のBose Quiet Control 30もノイズキャンセリング性能が非常に高く、推したいところですが、壊れやすいみたいです。(1回交換済み)
Bose QuietControl 30 wireless headphones ワイヤレスノイズキャンセリングイヤホン
- 出版社/メーカー: BOSE
- 発売日: 2016/10/28
- メディア: エレクトロニクス
- この商品を含むブログ (3件) を見る
4. Kindle Paperwhite
Kindle Paperwhite、電子書籍リーダー(第7世代)、Wi-Fi 、4GB、ブラック
- 出版社/メーカー: Amazon
- 発売日: 2015/06/30
- メディア: エレクトロニクス
- この商品を含むブログ (17件) を見る
白黒で構わないような、読み物系の書籍やマンガならこれでかなり快適な電子書籍ライフを送れます。外出先でもその時の気分で読みたいものを読めます。
Kindleに対応している本なら文字サイズが変更できますし、メモ、ハイライトなどの機能は特に自己啓発書を読んでいるときによいです。ブラウザがついているのでKindleから本を買うこともできます。
質感がほぼほぼ紙です。こんな感じでオシャレな壁紙がランダムで表示されます。
ただ、サイズ的に小さいので大判の本は厳しい。最近は特に技術書などは、紙で買っていますね。
5. バンカーリング
- 出版社/メーカー: i&PLUS
- メディア: エレクトロニクス
- この商品を含むブログを見る
地味ですが。iPad miniにつけてます。寝転がってとか、電車内でとか、動画見るときのスタンドとして使ったりだとか、何かと便利。
6. 電動コーヒーミル
- 出版社/メーカー: Kalita (カリタ)
- メディア: ホーム&キッチン
- 購入: 2人 クリック: 17回
- この商品を含むブログ (12件) を見る
こんな感じの小さいのがあると、豆挽いてお湯沸かしてドリップしてみたいなのが気軽にできて、コーヒー生活が捗ります。
7. ドレッサー
ドレッサー&スツール 化粧台 LIEBE ブラウン IR-DR-001
- 出版社/メーカー: アイリスプラザ
- メディア: ホーム&キッチン
- この商品を含むブログを見る
これで部屋に化粧専用エリアを作りました!
机が散らかる問題が解決できました。
来年ほしいもの
VRヘッドセット
やっぱりOculus Goかなー
Oculus Go オキュラス 単体型VRヘッドセット スマホPC不要 2560x1440 Snapdragon 821 (64GB) [並行輸入品]
- 出版社/メーカー: Oculus
- メディア: CD-ROM
- この商品を含むブログを見る
4Kディスプレイ
意外と5万円くらいで買えるんですね〜。オススメあったら教えてください。
- 出版社/メーカー: 日本エイサー
- 発売日: 2018/06/08
- メディア: Personal Computers
- この商品を含むブログを見る
オーディオプレイヤー
WALKMANを考えていましたが、Astell & Kernなどのプレイヤーも気になっています。
こういうハイエンドモデルをパッと買える大人になりたいですね!食器洗浄機
ずっとほしいと思っていたのですが、ビル・ゲイツは皿を洗ってるらしいと知って迷っている。
レコードプレイヤー
こういう感じで好きなミュージシャンの音源がレコードで発売することがたまによくあるんですが、
デビュー20周年記念!スーパーカーのオリジナルアルバムがアナログで再リリース|HMV&BOOKS online
レコード再生環境がなくてちょっとさみしい思いをしてきたので。
DENON アナログレコードプレーヤー USB録音機能/フルオート ブラック DP-200USB-K
- 出版社/メーカー: デノン
- 発売日: 2008/11/17
- メディア: エレクトロニクス
- 購入: 1人 クリック: 9回
- この商品を含むブログ (2件) を見る
AtCoder Beginner Contest #034 C問題
久々のAtCoder復習記事です。
久々と言いつつなんだかんだいってC問題は結構埋まってきてます。
https://kenkoooo.com/atcoder/?user=oftonkingdom&rivals=&kind=category
今回解いた問題は全く知らなかった知識(フェルマーの小定理)が出てきたので備忘のために書きます。(記述はあんまり厳密じゃないです!ごめんなさい!)
参考:
AtCoder Beginner Contest 034 解説
フェルマーの小定理について
フェルマーの小定理とは、が素数のとき、以下が成り立つことである。
ここから、以下が言える。
これはつまり、が素数ならば、ある数をで割った余りは、をで割った余りに等しいということ。
combinationを計算するときに活かせるフェルマーの小定理
今後活かせるタイミングは、combinationを計算した結果を素数(1000000007など)で割った結果を求めろと言われたとき。
mod pの世界では、数で割るということはをかけることに等しい。
今回の問題はを1000000007で割った余りが答え。
まず分子については、1000000007で割った値をループを回してかけていけばよい。
分母についてはフェルマーの小定理の変形バージョンにより、各数の乗をで割った余りを、ループを回してかけあわせていけばよい。
提出コード
すごく参考になる記事
けんちょんさん本当にいつもありがとうございます…!
SIer→Web系企業への転職活動(いち女性エンジニアとして)
この記事は
#しがないラジオ 2 Advent Calendar 2018 - Adventar
の4日目の記事です。
こんにちは。
このようなAdvent Calendarに参加するのは今回が初めて(緊張)なのですが、
来年からWeb系企業で働き始めるというタイミングなので、私の転職活動の話が誰かの役に立ってくれればうれしいな、と思って書きます。
タイトルに「女性エンジニア」を入れたのは、SIer退職エントリは世の中に数あれど、女性エンジニアの記事ってあまり見たことがなく(明記されていないだけかもしれませんが)、
もし同じような境遇の女性エンジニアの方がいらっしゃったら、こういう奴もいるので、よかったら参考にしてくださいという一心で入れています。
(といいつつ、あまり女性ならではのコンテンツは入れられなかったです。すません。)
自己紹介
大学までは情報系の研究してて、SIerに就職した人間です。
インターネットに育てられ、インターネットとかフリーソフトが大好きで、よくいるHTML・CSS・JavaScriptでホームページ作ってる子供時代で、Webサービスの可能性に興味はすごくありました。
SIerでの業務内容は、よくある典型的なSIerって感じです。
なんで転職したのか
転職を考えた理由はいろいろありますが、これもまた、世の中のSIer退職エントリの部分集合って感じです。
その中でも大きなものは以下の3つです。
まず1については、自分の中で技術への関心が強く、アグレッシブに技術を使って問題解決したいと思うようになったからです。
しかしながら会社における一般的なキャリアパスはプロジェクトマネージャーが目標であり、非常に若いうちから開発を離れてリーダーになることが求められました。
もちろん技術に全く触れなくなるわけではないのですが、自分の手を動かしてモノを作ることのほうが好きで、やりたいことだと気づいた*1ので、方向転換するなら早いほうがいい(自分にとっても、会社にとっても)だろうと考えました。
2については、私のいたところが大企業で、そこそこに働いていればまあまあお給料がもらえるという環境だったのが大きいです。
そんな環境でしたが、なんとなく「ここにいるべきなのだろうか?」という疑問がありました。もっと自分で課題を発見して解決できる人材になるべきじゃないか?一応まだまだ若くて、頭も回るはずなので、もっと鍛えられる環境に行ってみるべきじゃないか?みたいな危機感ですね。
そして、会社に依存せず、動きたいときに動ける、転職先に困らない人間になりたいと思いました。
ここらへんの話は、散々話題になっている以下の本に感銘を受けました。
このまま今の会社にいていいのか?と一度でも思ったら読む 転職の思考法
- 作者: 北野唯我
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2018/06/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
3については、話題になったNTT退職エントリなどでも挙がっていた、メモリ容量少ない問題などもありましたが、
例えば、開発において、社内で作られているツールが微妙に使いづらい…というシーンで、もしコードを書いてプルリクできたらどんなにいいだろう…?私が作りたい!とか考えてしまいました。
他にも好きなエディタを使えなかったり、新しいツールを導入できなかったり、などなど、技術のアップデートがしづらい環境、は私にとっては結構ストレスでした。(効率厨なので)
転職活動について
ごくごく一般的なエンジニア転職の手順を踏みました。
転職エージェントと面談→企業と面接→内定 です。
技術力不足で落とされまくることもあってつらかった。
ただ、足りないものはどうしようもなくて、できる限りのことをして、最大限見せて、それを買ってくれる会社を見つけるしかないのだなあ、と思いました。
全体を通して反省点を挙げるとするなら以下です。
- さっさと目に見えるポートフォリオ作ればよかった
- 求人に応募しすぎて、1つ1つに割くリソースが小さくなってしまった
- エンジニアコミュニティに積極的に参加しておけばよかった
1については、いろいろなところで言われていることなのでもはや当たり前かもしれませんが、モノがあるのとないのとで本当に違います。面接でも、より自信を持って話せるようになった気がします。
内定いただけたのは、アプリを作って、恥を忍んでGitHubのURLを職務経歴書に載せたのが大きいと思います。
2については、そのままですが…エージェントに紹介されるがままに受けると大変なことになるという教訓です。
よっぽど一刻も早く会社をやめたいという状況でもない限り、厳選して受けたほうがいいですよね…。
あと、本当にいいエージェントもいるので、諦めずにたくさんのエージェントと会ってみるというのも、重要かもですね。
3については…なんとなくエンジニア勉強会とか、強い人がいっぱいいそうで怖かったのですが、
ちゃんと探せば初心者向けとか、同じように転職を考えている人の集まりとか、いろいろあるし、
視野が狭くならないように勇気を出して参加しておけばよかったと思います。
女性エンジニアとして
最近はTwitterなどでよく観測されるようになってきましたが、まだまだITエンジニアとして女性が働くって知られていないですよね。
私も、今の会社ではIT好きを公言してきましたが、え?女性なのにIT技術好きなの?というのが理解されてない感もありました。(実際どうかはわからない)
ただ、ITが好き!楽しい!と思った女性の方は本当に周りの目を気にせず、自分が活躍できる環境を探し、飛び込んだほうがいいと思いました。
私は新卒就活時は、周りが大手企業に行く人ばかりだったのもありますが、Web系のベンチャーで働く女性エンジニア、というイメージがなかったので、今考えると就職先で検討すらしませんでした。
漠然と、いやプロマネよりエンジニアのほうが気質的に合ってそう…?と思いながらも。。
なので、自分の直感を大切に、内なる声に耳を傾け、選択肢を広く持つというのは本当に大事なことだと思いました。
ちなみに少し脱線しますが、私は、もともとは理系科目もそんなに得意ではなかったのですが、ITが「好き」だったので、どうやったら得意になれるのか試行錯誤して理系学部に進学し、いろいろあってなんとかここまで来ました。諦めなくてよかった〜。
しがないラジオについて
実は私がしがないラジオを知ったのは、内定をもらってからでした笑
技術書典に出されていた「SIer完全脱出マニュアル」、BOOTHで+1000円で購入させていただきました…!内定後の意思決定時にとても助かりました。
このような活動をされている方がいるのをもっと早く知っていればなあ…という一心です。
SIerで働くことに違和感を感じている人が、Podcastで耳から、同じ考えの人の生の声を聞ける、これってかなり心理的に違いますよね。
リアルにWeb系の知り合いがいなかったとしても、非常に心強いと思います。
これからも頑張っていただきたいです(陰ながら応援しています)。
まとめ
まだ、Webエンジニアとして働き始めたわけでもないので、転職After Storyは書けないのですが、
落ち着いたタイミングでこのブログに書きたいと思います。(すでに次の会社のエンジニアの皆さんとお話させてもらって、「しがない」予感がすごいですが!)
ここまで読んでいただきありがとうございました。世のエンジニアに幸あれ。
*1:思い返すと幼少期から起床即レゴブロック弄ってました
ABC 084 Special Trains
問題
前に解いたときにACできなかったのでリベンジです
考察
ある駅iに着いたとき,開通式開始後からかかった時間がとすると,
- >= なら,間隔で走っている電車が来るまで待つ.待ち時間は, % = 0なら「0」, % ≠ 0なら「-%」である.
- < なら,まだiからの電車は走り始めていないので,待ち時間はである.
以上の待ち時間に,次の駅までかかる時間を加えたものを足していけば,求める答えとなる.
計算量的にもO(N2)で間に合う.
コード
https://beta.atcoder.jp/contests/abc084/submissions/2874094
反省
時間測ってませんでしたがリベンジ後1発AC
- 改めて解いてみると過去の自分がなんでできなかったのかわからない.成長したということか.
- 基本的に解説通りだったし特に言うことはない