2022-01-01から1年間の記事一覧

2022年の振り返り

今年の簡単な振り返りです。 競技プログラミング 今年はAtCoder Algorithmのratedに24回出場。レートは昨年末の1565から今年末は1585に変動しました。 月に一回くらいしか出てない感覚だったので思ったより出ていて驚きでした。しかしコンテストに出る以外の…

C++のbitsetに関するメモ

競技プログラミングで使いたいと思いつつずっと未履修だったbitsetの使い方を勉強しました。 基本操作 以下ではすべて以下が書かれているものとします。 #include <bitset> #include <iostream> using namespace std; 初期化は、文字列を与えるか、整数を与えるかで行えます。 </iostream></bitset>…

nkfの使い方のメモ

ファイルの文字コードと改行コードを調べる nkf --guessを使います。 $ nkf --guess a.cpp UTF-8 (CRLF) UTF-8 (BOM付)の場合は以下のように表示されます。 $ nkf --guess a.cpp UTF-8 (BOM) (CRLF) 文字コードや改行コードを変換する 例えば改行コードをCRL…

lessとlvの使い方の比較

これまで私はずっとlvというテキストビューワーを癖で使い続けてきました。 lvはShift_JISやeuc_jpのファイルも文字化けなしで閲覧できるメリットがありますが、 最近はそもそもutf-8以外のファイルを扱うことがほぼなくなってきて、このメリットが薄くなっ…

Pythonのインデント系エラーと戦う

Pythonスクリプトを書いてflake8にかけると、インデント量や改行タイミングの微妙な違反によって E125 continuation line with same indent as next logical line E129 visually indented line with same indent as next logical line といったエラーが出ま…

NumPyで2つのベクトル配列に対して順に内積を計算

2つの同型のベクトル配列a, bがあったとします。shapeは、ベクトルの次元をD、ベクトルの数をNとして(N, D)だとします。 0番目からN-1番目まで順に内積を取っていき長さNの結果を得ることを考えます。専用の命令があるのかと思ったらどうやらないようで、 ht…

Pythonスクリプトのテンプレートを考えてみた

Pythonの書き捨てスクリプトを書く速度を上げられるように、Pythonスクリプトのテンプレートを考えてみました。 経験上、どんなスクリプトでも以下を心がけると良いことが多いです。 コードは全部メイン関数の中に入れて、グローバル変数は許容しない 出力は…

bashスクリプトでset -uしているときの unbound variable を回避する

bashスクリプトの定番テクニックで、set -uを冒頭に書いておくことで、未定義の変数をうっかり使った時点でスクリプトを終了させるようにする、というものがあります( 参考 )。しかし、PATHやPYTHONPATHにパスを追加するときに困ることがあります。例えば…

std::setやstd::multisetで末尾の要素を削除する

C++

std::setやstd::multisetで末尾の要素を削除するには、https://www.geeksforgeeks.org/how-to-delete-last-element-from-a-set-in-c/ で紹介されているテクニックを使います。例えばsをstd::setのオブジェクトとした場合、std::prev(s.end()) が末尾の要素を…

NumPyでベクトルの長さを1に正規化

NumPyでベクトルの長さを1に正規化するには、np.linalg.normを使います。 ベクトルの例 例えば、要素数3のベクトルの長さ(より正確には、ユークリッド距離。すなわちL2ノルム)を1に正規化するには以下のようにします。 vec = np.array([3.0, 4.0, 5.0]) un…

random.randint()とnp.random.randint()の定義の違い

Python 3の random.randint() と NumPy の np.random.randint() には次のような微妙だが重大な違いがあります。 random.randint(a, b) a以上b以下の整数を1個選んで返します。以下のコードで、random.randint(3, 7)が3以上7以下の整数をランダムに生成するこ…

NumPyのブロードキャストのルール

NumPyのブロードキャストのルールについて曖昧にしか理解していなかったので調べました。わかってしまえば簡単です。 2つのarrayの間でブロードキャストができるかどうかは、2つのarrayのshapeによってのみ決まります。アルゴリズムは以下です。 もし2つのa…