イバコの生存記録

いまは競プロ(AtCoder)記事がメインです。

プログラミング

73. マンハッタン距離は45度回転…がイマイチ納得できないので証明する

2次元座標系における点 と点 間のマンハッタン距離 は、 と定義されます。簡単に言うと「斜め移動はできず、縦横方向にしか動けない場合の距離」です。 マンハッタン距離上図では、中央の緑マスからのマンハッタン距離を各マスに記しています。また、中央か…

72. AtCoder参加記録(AtCoder Beginner Contest 240)

現状です。7回参加でレート 729 です。レート正常化まであと2回(のはず)。 今回はパフォーマンス 928 でした。ABCDを通して、EはWA、FGExは未解答です。Cで1ペナです。 各問題の感想です。 A 差の絶対値が1か9ならOKです。 B HashSetを使えばOKです。 C 普…

71. AtCoder参加記録(AtCoder Beginner Contest 239)

現状です。6回参加でレート 694 です。レート正常化まであと3回(のはず)。 今回はパフォーマンス 1120 でした(自己ベスト更新!)。ABCDEを通して、FGExは未解答です。Bで1ペナ、Eで2ペナです。 各問題の感想です。 A なんか色々書いてますが、要するに書…

70. ランダムアクセスが O(1) で可能な双方向リスト

双方向リストは、片方向リストと比較して「前後両方のノードへのポインタを持つ」という点が特徴です。C# では LinkedList として実装されています。 双方向リスト 双方向リストは、以下のような特徴を持ちます。 先頭・末尾への要素追加が で可能 (そのノー…

69. (アイデアメモ) ランダムアクセスが O(1) で可能な双方向リスト

今日はアイデアのメモ書きです。 双方向リストは追加・削除が で可能なデータ構造です。しかし、ある要素が含まれているかを探そうとすると の計算量になります。 ただ、ちょっと工夫すればこれも に落とせそうな上、(若干扱えるデータの範囲は狭くなります…

68. 「エラトステネスの篩」の計算量はとりあえず O(N log N) で抑えられる

「エラトステネスの篩」は素数列挙に使われる効率的なアルゴリズムです。 「2」から「対象とする最大値」までを「素数候補」とする 残っている数のうち最小値を「素数」と判定して「素数候補」から除外する 2. で素数と判定した倍数を、全て「素数候補」から…

67. C# による遅延評価セグメント木の抽象化実装

競技プログラミングでよく使われる「セグメント木」というデータ構造があります。 これは、配列データに対して2のべき乗区間ごとに「合計値」「最大値」など注目したい演算を適用しておき、任意の区間に対する演算結果を で取得できるものです。 セグメント…

65. AtCoder 参加できなかった記録

今日も ABC に参加しようとしていたのですが、開始10分前くらいに AtCoder が落ちてしまい、結局復旧できないまま中止となってしまいました。 【ABC239】22:00~のコンテストが実施できる見込みが立たないため、本日のコンテストは中止させていただきます。申…

61. AtCoder参加記録(AtCoder Beginner Contest 238)

現状です。5回参加でレート 596 です。ここから正しいレートが出るのかと思っていましたが、9回参加しないとダメみたいです。 今回はパフォーマンス 900 でした。ABCを通して、DでWA、EFGExは未解答です。 各問題の感想です。 A これA問題か…?と疑う難易度…

55. AtCoder参加記録(AtCoder Beginner Contest 237)

現状です。4回参加でレート530です。ここまでが調整期間で、次回からちゃんとしたレートが出るようになるみたいです。 今回はパフォーマンス974でした。ABCDを通して、EFGExは未解答です。 各問題の感想です。 A 恒例のやるだけ問題です。 前回は3分24秒で通…

54. ライブラリのバグを疑ったけど普通に実装ミスだった話

今日は「競プロ典型 90問」の第12問を解いていました。atcoder.jp問題概要としては、 のマス目があり、1マス赤塗りするか、現在の状態で指定されたマスから「赤マスである箇所」だけを通って指定されたマスへ移動できるか、という判定を行うものです。愚直に…

51. 今日は頭が寝ている日

今日はいまいち調子が悪く、あんまり進捗ありませんでした。 とりあえず、昨日積み残していた競プロ典型90問の問9をACしました。 atcoder.jp この問題は全探索による解法は浮かんで、でも だから無理だなぁ、と思いました。ただ、とりあえず書けることが大事…

50. 対数時間 O(logN) って思った以上に速い話

計算量で対数時間 というものをよく見かけると思いますが、これが具体的にどの程度のものか、感覚で理解してみます。 まず大前提として、 の底は(計算機科学においては一般に)2 です。何故 2 なのかというと、分割統治法の考え方で問題サイズを半分にする…

49. 【入茶】AtCoder参加記録(AtCoder Beginner Contest 236)

現状です。3回参加でとりあえず茶色に乗りました(5回参加するまでは低めのレートが出るようです)。 前回はパフォーマンスが1091でしたが、今回は772でだいぶ落ちてしまいました。というのも、前回まで4問解けていたのですが、今回は3問しか解けなかったで…

48. 競プロでも文字列の扱いは少し慎重になった方が良い話

今日は「競プロ典型90問」を解いていました。atcoder.jp 第4問で 行列の出力を求められるのですが、初めは(計算量的に自信があったので)かなり適当に考えて、このような処理を書いていました。 for(var i = 0; i < input.H; i++) { for(var j = 0; j < inp…

47. ラムダ式の再帰を書きたかった話

仕事でコードを書いていて、ふとラムダ式で再帰処理を書きたくなりました。 privateメソッドやローカル関数で定義すれば良いと言えばそうなのですが、その場限りの微妙に複雑な処理なので変数にバインドしたかった感じです。通常のメソッドでは以下のように…

44. 動的計画法(DP)についての話

最近は競技プログラミング用のライブラリをチマチマと作っているのですが、競技プログラミングは「問題に対して適用するアルゴリズムを決めて、ライブラリから引っ張れば良いだけ」…というわけでもありません。 その代表例が動的計画法(DP)の問題だと思っ…

42. 競技プログラミング用のコードテンプレートジェネレータを作成した

今日は AtCoder で使うであろうユーティリティをチマチマと実装していました。ここ一週間ほどユーティリティの充実を続けているのですが、そろそろライブラリが肥大化してきて実際に競技プログラミングで利用するにはやや厳しくなってきました。というのも、…

41. AtCoder参加記録(AtCoder Beginner Contest 235)

前回の記録が出ていたので、とりあえず現状から。 5回参加しないと正確なレーティングが出ないようなので暫定ですが、こんな感じです。パフォーマンスは 983 だったので、このくらいのパフォーマンスを出し続けられれば、およそ緑に着地するはずです。 今回…

39. 安全なパスワード管理アルゴリズムを考えている

プライベートで少し作りたいものが出てきて、その中でパスワードを管理する必要があります。これは、以下の要件をセキュアに満たす必要があります。 ローカルにパスワード集合を保存する パスワード集合は同一のマスターパスワードで平文に復号可能 利用者は…

36. GitHub Actions で自動テストを走らせてみた

競技プログラミングを C# で始めたのですが、調べていくうちに C++ では一般的に使われているデータ構造で C# に存在しないものがあると知りました。 例えば、優先度付きキューは .NET 6(2021年11月リリース)で初めて実装されました。これ以前のフレームワ…

34. AtCoderに初参加した

先日から苦戦していたリモートデスクトップ設定ですが、結局VPNサーバを立てるのは諦めて、普通にリモートデスクトップできるようにしました。ただ、ポート番号そのままは流石に怖いので、最低限のセキュリティとして適当なものに変えておきました。これで様…

15. decimal型VectorをUnityEditorで制御したかった

Unity(2020.3.6f1) の話です。計算精度が欲しかったので decimal 型で独自の Vector クラスを作成しました。 これで困ったのは、UnityEditor の Inspector で編集できないということです。どうも Unity の Inspector は decimal 型をサポートしていないらし…

14. 物理シミュレータに衝突処理を追加した

昨日から作成している物理シミュレータに衝突処理を追加しました。今のところ組み込まれているのは 万有引力 球同士の衝突(反発係数固定) です。 上の動画はとりあえず反発係数1にしているのですが、反発係数0.7にすると以下のように、条件によっては一体…

13. 物理シミュレータを作ってみている

昔から時々宇宙に対する興味が強くなる時期が来るのですが、今はそういう時期なので簡単な物理シミュレータを作ってみています。 描画エンジンは Unity で、計算周りは自前で実装しています。既存のクラスよりもう少し精度が欲しかったので、Vector3double …

5. log4j2脆弱性への個人Minecraftサーバ対応について

本日(2021年12月10日)午前、Javaライブラリ「log4j2」に任意コード実行可能な脆弱性が発見されたというニュースが流れました。 【重要】バニラ、Spigot、Paperなど全Minecraftサーバーでログインに関するライブラリ「log4j2」に任意のリモートコードを実行…

1. 三次元空間上で「良い Bounding Box」を算出する手法について

久々に「純粋なブログ」というものを始めてみました。 最近は無為に時間を過ごすことも多く、仕事でもプログラムを書くことが中心なので、言語野が劣化してきた感覚があります。その対策や、日々何か成長していきたいという思いから「ただのブログ」を立ち上…