Emacs: 複数の行頭に文字を挿入する方法
- まずリージョンを選択
C-SPACE -> カーソル移動
(文書全体を選択する場合は C-x h)
- 各行の先頭にスペースを挿入する場合は
C-x C-i
- 各行の先頭に特定の文字列を挿入する場合は
C-x r t
Emacs: 複数の行頭に文字を挿入する方法
GNU Octave のインストール方法
Machine Learning | Coursera の Week 2 の課題のため、Octave をインストールする。
Octave とは、フリーの数値解析ソフトウェア(プログラミング言語)。
行列の計算やグラフ描画(gnuplotと連携して可視化)が簡単にできることが特徴。
こちらからインストーラをダウンロードして実行。
Octave Forge - Browse /Octave Windows binaries at SourceForge.net
Coursera の手順に書かれていたのは Octave-3.2.4_i686-pc-mingw32_gcc-4.4.0_setup.exe だった。
インストーラの Choose Components の画面で、"image" パッケージを追加するとよい。
こちらから Mac 用のディスクイメージをダウンロードしてマウント。
Octave Forge - Browse /Octave MacOSX Binary at SourceForge.net
最初、最新版(3.7.7)を入れたらグラフ表示でプログラムが落ちてしまう状態になったので
古いバージョン(3.4.0)をインストール。
alias octave="/Applications/Octave.app/Contents/Resources/bin/octave --persist --eval \"PS1('>> ')\""
octave-3.4.0:1> x=-5:5 x = -5 -4 -3 -2 -1 0 1 2 3 4 5 octave-3.4.0:2> y=2*x y = -10 -8 -6 -4 -2 0 2 4 6 8 10 octave-3.4.0:3> plot(x,y)
とりあえずグラフが描画できた。
二部グラフの最大マッチング
[(0, 1), (1, 0)] [(0, 1), (1, 0), (2, 2)] [(1, 0)] [(0, 1), (1, 0), (2, 2), (3, 4), (4, 3)]
Scala で FizzBuzz ショートコーディング
@lyrical_logical さんの素晴らしい資料からほぼ丸パクリ。
FizzBuzz golf in Scala - Google ドライブ
max を使う事で 1文字短縮でき、66 Bytes で書けた。
関数型言語 Elixir (エリクサー) を触ってみた
Erlang VM 上で動作する新しい関数型言語 Elixir (エリクサー) 。
FFファンならずともテンションの上がるネーミングだが
Ruby ライクなシンタックスで、動的型付けのカジュアルFPを目指しているようだ。
とりあえず環境を整えて、Hello world するまでの記録。
1 Introduction - Elixir に従って作業すればOK。
Erlang (R16B 以上) のインストール
パッケージをここからダウンロードして実行
Download Erlang OTP | Erlang Solutions
とりあえず、Mac にインストール。
手っ取り早くインストールするなら HomeBrew で。
$ brew install elixir
最新版を入れるなら、以下の手順。
$ cd <インストール先> $ git clone https://github.com/elixir-lang/elixir.git $ cd elixir $ make test $ bin/elixir -v # Elixir のバージョンが表示されればOK $ sudo make install
/usr/local/bin 配下にコマンドへのリンクが作成された。
モダンな言語なので当然(?)、REPL が標準で付いている。
$ iex Erlang R16B02 (erts-5.10.3) [source-b44b726] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] Interactive Elixir (0.10.4-dev) - press Ctrl+C to exit (type h() ENTER for help) iex(1)>
iex(1)> "Hello Elixir!" "Hello Elixir!" iex(2)> "こんにちは エリクサー" "こんにちは エリクサー" iex(3)> 'こんにちは エリクサー' [12371, 12435, 12395, 12385, 12399, 12288, 12456, 12522, 12463, 12469, 12540]
ダブルクオートで囲むと UTF-8 でエンコードされたバイナリとして、
シングルクオートだと 1文字ずつの数値のリストとして認識される。
手探り状態で書いてみた。もっと改善できるはず。
f = fn x when rem(x, 15) == 0 -> "FizzBuzz" x when rem(x, 3) == 0 -> "Fizz" x when rem(x, 5) == 0 -> "Buzz" x -> to_string(x) end 1..20 |> Enum.map(f) |> Enum.map(&1 <> "\n") |> IO.write
文字列の連結(<>)が分からずに小一時間悩んだ。
iex:58: partial application without capture is deprecated 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz
警告が出たけど、解決策がすぐには分からない。
Erlang も Ruby も慣れていない私にはかなり異次元の文法に見える。
とはいえ、Erlang の強力な機能を利用したプログラムを手軽に実装できるなら魅力的だ。
日本人は最後までエリクサーを使わないという定説もあるけど、やっぱりそれはもったいない。
組合せ最適化: アルゴリズム 1.2 マージソートアルゴリズム
B.コルテ/J.フィーゲン 著「組合せ最適化 理論とアルゴリズム 第2版」の例を Python で実装してみる。
[-2, -1, 0, 1, 2, 3, 4, 5, 90] [-2, -1, 0, 1, 2, 3, 4, 5, 90] [-2, -1, 0, 1, 2, 3, 4, 5, 90] ['ac', 'b', 'bb', 'bc', 'c', 'ca'] ['ac', 'b', 'bb', 'bc', 'c', 'ca'] ['ac', 'b', 'bb', 'bc', 'c', 'ca'] [0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9] [0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9] [0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]identity が出てくるのが面白い。
組合せ最適化: アルゴリズム 1.1 パス列挙アルゴリズム
B.コルテ/J.フィーゲン 著「組合せ最適化 理論とアルゴリズム 第2版」の例を Python で実装してみる。
[0, 1, 2, 3] [0, 1, 3, 2] [0, 2, 1, 3] [0, 2, 3, 1] [0, 3, 1, 2] [0, 3, 2, 1] [1, 0, 2, 3] [1, 0, 3, 2] [1, 2, 0, 3] [1, 2, 3, 0] [1, 3, 0, 2] [1, 3, 2, 0] [2, 0, 1, 3] [2, 0, 3, 1] [2, 1, 0, 3] [2, 1, 3, 0] [2, 3, 0, 1] [2, 3, 1, 0] [3, 0, 1, 2] [3, 0, 2, 1] [3, 1, 0, 2] [3, 1, 2, 0] [3, 2, 0, 1] [3, 2, 1, 0] 120 (0, 1, 2, 3) (0, 1, 3, 2) (0, 2, 1, 3) (0, 2, 3, 1) (0, 3, 1, 2) (0, 3, 2, 1) (1, 0, 2, 3) (1, 0, 3, 2) (1, 2, 0, 3) (1, 2, 3, 0) (1, 3, 0, 2) (1, 3, 2, 0) (2, 0, 1, 3) (2, 0, 3, 1) (2, 1, 0, 3) (2, 1, 3, 0) (2, 3, 0, 1) (2, 3, 1, 0) (3, 0, 1, 2) (3, 0, 2, 1) (3, 1, 0, 2) (3, 1, 2, 0) (3, 2, 0, 1) (3, 2, 1, 0) (13, [(5, 2), (3, 3), (1, 1), (1, 4), (4, 8), (2, 10)])