trコマンド 文字の差し替え
例えば、環境変数$PATHの区切り文字であるコロン(:)を\n
にする。
$ echo $PATH | tr : '\n' /usr/local/bin /System/Cryptexes/App/usr/bin /usr/bin /bin /usr/sbin /sbin /usr/local/go/bin /usr/local/share/dotnet ~/.dotnet/tools /Library/Apple/usr/bin /Library/Frameworks/Mono.framework/Versions/Current/Commands /Users/yossan/.cargo/bin
Result型をunwrapする際に、型パラメーターEがDebugを実装しているか指定する必要があるとき
fn read<T>() -> T where T: FromStr { let mut buffer = String::new(); let mut stdin = stdin().lock(); let _ = stdin.read_line(&mut buffer); T::from_str(&buffer.trim()).unwrap() // エラー <T as FromStr>::Err doesn't implement `Debug` }
原因は、
Result<T, E>型は、unwrapメソッドを呼び出す際は、EがDebug
を実装している必要がある。
pub fn unwrap(self) -> T where E: Debug,
したがって以下のように制約を追記する必要がある。 参照 Is there a safe way of constraining FromStr::Err to implement Debug?
fn read<T>() -> T where T: FromStr, <T as FromStr>::Err: Debug { // 関連型の制約を追記 let mut buffer = String::new(); let mut stdin = stdin().lock(); let _ = stdin.read_line(&mut buffer); T::from_str(&buffer.trim()).unwrap() }
こういう場合は、一旦オプショナルに回避することで、unwrapすればよい。
fn read<T>() -> T where T: FromStr { let mut buffer = String::new(); let mut stdin = stdin().lock(); let _ = stdin.read_line(&mut buffer); T::from_str(&buffer.trim()).ok().unwrap() }
日銀当座預金
日銀の当座預金には3つの役割がある
(1)金融機関が他の金融機関や日本銀行、あるいは国と取引を行う場合の決済手段
(2)金融機関が個人や企業に支払う現金通貨の支払準備
(3)準備預金制度の対象となっている金融機関の準備預金
特に(2)の意味するところは、 銀行は、私達に融資を取り付けると、日銀は銀行にその支払義務を負う。(無利子) ということでもある。
銀行がなぜ日銀から円をもらえるのかというと、日銀の代わりに、市中に円を回す業務を代替しているからだと考えることもできる。
(3)は、マイナス金利とも関わってくる。 日銀はリーマンショック以降、銀行の持つ資産が増えるように、準備預金に円を預けておくだけで金利を発生させていた。 そうすると円を貸し出すより、こちらの方がうま味が発生してしまうようになった。 そこで2017年、マイナス金利が導入された。
参照
日銀当座預金とは
https://www.boj.or.jp/announcements/education/oshiete/kess/i07.htm/
日銀の準備預金制度とマイナス金利の導入
https://www.jsda.or.jp/gakusyu/edu/web_curriculum/images/mailmagazine/Vol.24_20170720.pdf
Git keeps asking me for my ssh key passphrase
Do either:
- To add your private key to it:
ssh-add
This will ask you your passphrase just once, and then you should be allowed to push, provided that you uploaded the public key to Github.
- To add and save your key permanently on macOS:
ssh-add -K
This will persist it after you close and re-open it by storing it in user's keychain.
- To add and save your key permanently on Ubuntu (or equivalent):
再帰関数とメモ化と分割統治法
- 再帰関数
- GCD(m, n) - 2つの整数から最大公約数を求める
- ベースケース
- 可視化
- GCD(m, n) - 2つの整数から最大公約数を求める
再帰関数とメモ化
部分和問題(最適な部分集合を見つける) with 分割統治法
- 再帰関数を使うことで問題を少問題に分割できる
再帰関数
- ベースケース
- 振る舞いの可視化
ユークリッドの互除法
2つの整数m, n(m ≧ n)において、以下の手順を繰り返すことで最大公約数を求めることができる。
- 入力を m, n (m ≧ n) とする。
- n = 0 なら、 mを出力してアルゴリズムを終了する。
- mをnで割った余りを新たに nとし更に 元のnを新たにm とし 2. に戻る。
fn gcd(m: u32, n: u32) -> u32 { return if n == 0 { m } else { gcd(n, m % n) } }
ベースケースと処理の可視化
無限ループしないように、ベースケースを定め、returnする。
再帰関数とメモ化
フィボナッチ数列
部分和問題 with 分割統治法
参考書籍
https://www.amazon.co.jp/問題解決力を鍛える!アルゴリズムとデータ構造-KS情報科学専門書-大槻兼資-ebook/dp/B08PV83L3N
全探索 with 線形探索法
全探索 with 線形探索法
以下の3つの全探索問題を線形探索法を用いて解く方法を見ていく
- 1つの配列から1つの要素を見つける O(N)
- 2つの配列から各々1つの要素を取り出し、最適な組み合わせを見つける O(N2)
- ある集合から最適な部分集合を見つける O(2N)
線形探索法とは (About Linear Search Method)
一つ一つの要素を順に調べていく
問題例
1. 1つの配列から1つの要素を見つける
2. 2つの配列から各々1つの要素を取り出し、最適な組み合わせを見つける O(N2)
3. ある集合から最適な部分集合を見つける O(2N)
部分集合を2進数を使って表す方法
例: {a,b,c}
の部分集合
添字 | 部分集合 | 2進数 |
---|---|---|
0 | {} |
0b000 |
1 | {c} |
0b001 |
2 | {b} |
0b010 |
3 | {b,c} |
0b011 |
4 | {a} |
0b100 |
5 | {a,c} |
0b101 |
6 | {a,b} |
0b110 |
7 | {a,b,c} |
0b111 |
まとめ
全探索においては、「どうすればすべての場合を考慮し尽くせるか」ということが重要となる。
参考書籍
https://www.amazon.co.jp/問題解決力を鍛える!アルゴリズムとデータ構造-KS情報科学専門書-大槻兼資-ebook/dp/B08PV83L3N