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

stackoverflow.com

Do either:

  1. 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.

  1. 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.

  1. To add and save your key permanently on Ubuntu (or equivalent):

ssh-add ~/.ssh/id_rsa

再帰関数とメモ化と分割統治法

  • 再帰関数
    • GCD(m, n) - 2つの整数から最大公約数を求める
      • ベースケース
      • 可視化
  • 再帰関数とメモ化

  • 部分和問題(最適な部分集合を見つける) with 分割統治法

    • 再帰関数を使うことで問題を少問題に分割できる

再帰関数

  • ベースケース
  • 振る舞いの可視化

ユークリッドの互除法

2つの整数m, n(m ≧ n)において、以下の手順を繰り返すことで最大公約数を求めることができる。

  1. 入力を m, n (m ≧ n) とする。
  2. n = 0 なら、 mを出力してアルゴリズムを終了する。
  3. mをnで割った余りを新たに nとし更に 元のnを新たにm とし 2. に戻る。
fn gcd(m: u32, n: u32) -> u32 {
    return if n == 0 {
        m
    } else {
        gcd(n, m % n)
    }
}

ベースケースと処理の可視化

無限ループしないように、ベースケースを定め、returnする。

f:id:yossan2:20211205183926p:plain

再帰関数とメモ化

フィボナッチ数列

f:id:yossan2:20211205183909p:plain

部分和問題 with 分割統治法

f:id:yossan2:20211205183849p:plain

参考書籍

https://www.amazon.co.jp/問題解決力を鍛える!アルゴリズムとデータ構造-KS情報科学専門書-大槻兼資-ebook/dp/B08PV83L3N

全探索 with 線形探索法

全探索 with 線形探索法

以下の3つの全探索問題を線形探索法を用いて解く方法を見ていく

  1. 1つの配列から1つの要素を見つける O(N)
  2. 2つの配列から各々1つの要素を取り出し、最適な組み合わせを見つける O(N2)
  3. ある集合から最適な部分集合を見つける 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