golang 始めたてメモ

大学の授業で AWS の API を触る機会があり, その際に golang を使うようなので (API 一覧には, C++ 版もあるようなので, 個人的には C++ が良かった), 特に意義のないコードを取り敢えずいくつか書いてみている. ある程度文法がわかったら, まずはともかくクイックソートを書いてみたわけだが…


C++ で Data.Tuple.Extra っぽいもの

  • 2018/06/15 01:50
  • C++

ふと, C++ でもこんなような記述, 普通に出来るべきなんじゃないかなぁと思った.

Prelude> :m +Data.Tuple.Extra
Prelude Data.Tuple.Extra> uncurry (+) $ first (*2) $ dupe 42
126
Prelude Data.Tuple.Extra> uncurry (+) $ (+42) &&& (*2) $ 42
168

取り敢えず, 似たような構文で同じような処理となるように作ってみた.


QFTのメモ

お題自由な学校のレポート課題1内で, ショアのアルゴリズムを説明するために QFT の概要について示したのだが, 折角なのでその内容の一部を抜粋し, こちらのブログのほうにも載せておくことにした. ショアのアルゴリズムについては, 調べればいくらでも出てくるし, 学会誌, 書籍等で分かり易く述べられていることも多いので, 本エントリで特別取り上げることはしないが, その大体は以下のアクティビティ図の手順の通りである2.

ショアのアルゴリズムのアクティビティ図

シンプルなブリッジのソフトウェア実装

以前の投稿, ARPパケットに対する挙動からネットワーク上の盗聴者を特定するにて, 実験を行うにあたりリンクレイヤー上のパケットの受信と送信を行なった. このパケットを別のネットワークインタフェースから送出するようにすればブリッジになるし, MAC アドレステーブルと照合して転送すれば L2 スイッチにもなるとのことで, 一応 Linux 上で動くものを作ってみた.

2 枚の NIC が必要であるが, Virtual Box の仮想アダプタを利用すれば良い. 実装の本質的な部分は, 異なるディスクリプタへの書き込みのみである. これを応用して, 複数個のネットワークインタフェースにも対応してみたい.


フィボナッチ数列の一般項の導出

フィボナッチ数列を以下の漸化式で定義する.

フィボナッチ数列

fn+2=fn+1+fn (n0)f_{n+2} = f_{n+1} + f_n\ (n\geq 0)

ここで, 初項と第二項をそれぞれ a1=1,a2=1a_1=1, a_2=1 とする. 各項を fn+2c2fn+1cfn1f_{n+2}\rightarrow c^2、f_{n+1}\rightarrow c、f_n\rightarrow 1 と置き換えると c2=c+1(1)c^2=c+1\tag{1} が得られる. この解は c=1±52c=\dfrac{1\pm{\sqrt{5}}}{2} となる. ここで, ψ=152,ϕ=1+52\psi = \dfrac{1-\sqrt{5}}{2}, \phi = \dfrac{1+\sqrt{5}}{2} と置く. フィボナッチ数列の漸化式の特性方程式の解は (1)(1) の解より ψ,ϕ\psi, \phi であるから fn+2=fn+1+fn{fn+2ψfn+1=ϕ(fn+1ψfn)fn+2ϕfn+1=ψ(fn+1ϕfn)f_{n+2}=f_{n+1}+f_{n}\Leftrightarrow\begin{cases}f_{n+2}-\psi f_{n+1}=\phi(f_{n+1}-\psi f_n) \\ f_{n+2}-\phi f_{n+1}=\psi(f_{n+1}-\phi f_n)\end{cases} と変形できる. いま bn=fn+1ψfn,cn=fn+1ϕfnb_n=f_{n+1}-\psi f_n, c_n=f_{n+1}-\phi f_n と置くと次の漸化式が得られる.