def greater_or_equal_index(data, a, start, end): while start != end: center = (start + end) // 2 if data[center] >= a: end = center # ちょうど中央か, 中央より左にある. else: start = center+1 #中央より右にある return end # data[end] >= a を満たしている. def greater_index(data, b, start, end): while start != end: center = (start + end) // 2 if data[center] > b: end = center # ちょうど中央か, 中央より左にある. else: start = center+1 #中央より右にある return end # data[end] > b を満たしている. def between(data, a, b): i0 = greater_or_equal_index(data, a, 0, len(data)) i1 = greater_index(data, b, i0, len(data)) return i1 - i0
start = center+1 #中央より右にあるを
start = center #中央より右にあるに置き換えると,start = 0, end = 1, data[0] < 0 の時に,whileの繰り返しが終了しないことがわかります.注意が必要です.
center = (start + end) // 2の代わりに,
center = start + (start - end) // 2のような書き方をする必要があります.start, endが共に32ビットの符号付き整数で表せる最大の数に近い時に(start + end)が正しく表現できないためです.
mkdir ~/algo18のようにします.そして,ターミナルを開くたびに
cd ~/algo18 jupyter notebookと入力してJupyter Notebookを動かしてください.詳しくは,はいぱーワークブック「14.4 コマンドを使ったファイル操作」を参照してください.
cd ~/algo18を済ませてから,
python vote.py 選択肢番号のように使います.
Jupyter Notebookを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」の15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.
cd ~/algo18と入力してください.これらの機能を使うと,Jupyter Notebookを抜けずにvoteできます.
ターミナルの基本的な使い方は,はいぱーワークブックの15.2 ターミナルの基本的な使い方を,より高度な使い方は,15.4 ターミナルの便利な使い方を参照してください.
cdというコマンドと「~」の意味は,はいぱーワークブックの14.4 コマンドを使ったファイル操作の14.4.1 ディレクトリを読むと分かります.