AtCoder 5、6回目

AtCoder Regular Contest 134 (1/29)

初0問クリア。

A: 制約条件をよく読まずに無駄に面倒な条件にして実装に悩む。残り時間を気にして中断。コンテスト終了後に解説で誤解に気付いた。条件はよく読もう。

B: コンテスト終了直後に一応の実装はできたがテストの半分が実行時間超過(TLE)。

AtCoder Beginner Contest 237 (1/30)

初4問クリア。proconioをローカル環境にも入れたことでサンプルを実行しやすくなり効率が上がった。

Eを終了後に実装できたが解いたがテストの半分がTLE。解説によるとダイクストラ法というものを使うらしい。同言語での他回答者の実行時間は200ms程度。

パフォーマンスが854、レートが205。

所感
  • ABCのE以降とARCのB以降は、どうやら現状で思いつく程度の実装では実行時間超過に終わりそうだ。
  • ダイクストラ法はそこそこの練習で身に付きそうな気がする。(ABC235のD問で似た点がある実装をした)

AtCoder 3、4回目

AtCoder Regular Contest 133 (1/22)

順位が2300番台でパフォーマンスが800あたりになった。

参加者5800人程度の半数が0点というのはえぐい。 というかAだけ解けた人の最高順位が2分半で1275位。ARCはABCより大分難しいようだ。(配点ではARCのAがABCのC相当)

A問は解けたがB問で時間切れ。 その後サンプルを解けるコードはできたが提出ではTLE(実行時間制限超過)。

B問の解説テキストを見てそのコードを動かしてみても、各値の意味するところが分からない。 動画ではもう少し噛み砕いた説明をしていたが、自分の頭の中では説明とコードが上手く結びつかなかった。 LIS(Longest Increasing SubSequence)の理解が必要らしい。

AtCoder Beginner Contest 236 (1/23)

パフォーマンス226、低い。ABCを回答でD時間切れ。解けると思うがまだ確実に時間内は無理。後でDを解く。

目指せ3回坊主

進捗メモとその他雑感

転職サイトのスキルチェック

  • 1/13にコードを試す画面でブラウザが頻繁に固まり、解決に悩む。結局firefoxのtelemetry機能で接続先のmozillaサーバに異常があったことが原因らしい。
  • Sクラスの問題に嵌り数日考えたが解けず。計算量爆発を躱すには一般項を求める必要がありそうだが二次元配列の適切なやり方が分からず断念。
  • 1/21に一番簡単な問題を解いて一応Sクラスに昇級。内実が伴っているとは言い難し。

AtCoder

1/15にRustで参加。(実践Rust入門はまだ読破していない) 前回同様にA,Bを解いたところで時間切れ。 難易度的にはDまでは解法が分かる。今後Rustに慣れてどこまで時間を縮められるか。

スキル洗い直し

前職の上長に会い雑談。開発環境をこれからどう整えてゆくかなど。 自身の欠点の再確認と「SETエンジニア」という職種を知ったことが収穫。

後で読んで苦笑するために欠点を記しておく。曰く「後ろから撃つ(正論だけど時間が足りない状況を考慮しない)」「火事だと騒いで水を用意するけど他の人が動くまで掛けない」*1

最近の傾向を知らなかったので、職種はともかく開発現場に要求される職能を学び直す必要があると実感。 QAにもコードを書く能力が欲しいと考えていたのだが最近の流れに反しているのだろうか。 ホワイトボックステストのように、ある程度分離した方が盲点が重なりにくくなるのかもしれない。

*1:「issueを立てるな!」 - Qiita に近いものがあるかもしれない。自ら直さないと身に付かないという意識が強すぎたことと影響範囲を見切れなかった問題があった。

ブログ開始、及び、着手メモ

ブログ開始。プログラム関連のことや適当な与太話を書く予定。

現在の状況:

  • 「実践Rust入門」読みかけ。4章(全12章)まで読了
  • AtCoder登録。1/8に参加。
  • 1/10: pythonを某サイトで少し試す
  • 1/11: はてなブログ開始

実践Rust入門

今のところお勧め本ではない。

3章、非常に読みにくい。その時点で紹介していない語句を頻繁に用いている。

  • 3-1-1での手順通りに実行したところ、並列ソートでpanic発生。しばらく悩んだが Cargo.toml の rayon を 1.0 から 1.5 に更新して解決。
  • 原因詳細は未調査。筆者はmac(Linux)環境と思われる。

バイトニックソートというRustの理解には関係ないアルゴリズムを例にしているため、余計に没入を妨げている。

  • 時間量・空間量という概念しか知らなかったが、並列処理ではサイズ・段数といった概念を用いるらしい。
  • とはいえ現時点では計算量自体をあまり理解していない……
  • 全順序とやらの場合、comparator定義を一回のみにする方法はないのだろうか。mathか何かにa,bの引数を入れ替えた関数を作る関数はないのか?

4章、プリミティブ型。

  • 4-3-4: if let によるパターンマッチ。構文説明なし。(6章が基本構文で、if letは6-8-3) 1/21取り消し: 6-8-2 match式とパターン に説明あり
  • 4-3-4 unsafe と as_bytes_mut() で安全ではないスライスを取得。本書索引に unsafe なし。
    • unsafe ブロックを抜けた後で取得スライスを使っている! コーディングガイドラインを探してみたが、 外へ持ち出すことの言及は見つからず。
    • 領域外を操作すると当然 panic 発生。レビュー漏れになりかねないのでコンパイル指定か何かで持ち出し禁止にできないのか?

AtCoder

Rust学習が間に合わなかったが試しに参加。成績がひどくて笑える。

  • 借用(borrow)を理解していないため、コンパイルエラーで嵌る。
  • 実質安全でも禁止されるパターンがあり、緩めるか議論中らしい。(from stackoverflowのどこか)
  • A,Bは解けたがそこで時間切れ。
  • 感触としては A, B, C は問題なし。Dは普通に失敗。全探索では駄目なので計算量の事前予測と処理軽減を考慮する能力が必要。

python

1/10から挑戦開始。それまでは2,3回コードを読んだことがあるくらい。(rubyなら一度書いたことがあったか?)

  • 某サイトの登録では Rust が使えなかったので python に挑戦。
  • スキルチェックをケアレスミスで失敗したので、がっかりしてレベルアップまで夜更かし。

はてなブログ

1/11から備忘録として開始。

まとめてつけると思い出すのにかなり時間がかかるのでこまめに書かねば。

未着手

  • Rustで自分用ミニツール作成
  • ローカル git 環境作成 or github利用
  • 記事の内容に応じてqiita等に分割するか検討