課題

最初に言語設定を「日本語 (Mozc)」にしておきます. 画面右上の『ja』を押すと選択できます.
次に以下の手順でEmacsで新規ファイルを開いて,左のプログラムをそのまま入力して保存して下さい.
- Emacsの起動
-
画面左上の[Activities]を押すと画面下にDockが表示されます.
次にDockの一番右のアイコン(Show Applications)を選ぶとアプリケーション一覧が表示されます.
そこからEmacs(GUI)を起動できます.
Emacsが起動したら,ファイルを新規作成します. ファイル名は次のルールのもとで適宜決めてください. - ファイル名のルール
-
1. 英数字,「.」,「_」,「-」を組み合わせたファイル名にする.1文字めは英数字にする.
2. ファイル名は「.rb」で終わる(.rbはRubyのファイルを表す拡張子です).
3. ファイル名には空白文字,日本語を入れない.
- Emacsでの新規ファイル作成
-
1. [File]→[Visit New File]
2. ファイルを開く画面が表示される
3. Name欄にファイル名を入力
4. [OK]を押す.
「.rb」で終わるファイル名を付けた場合,最初の12行(先頭から「=end」の行まで)が自動的に入力された状態でファイルが開かれます. なおこのようにファイルの先頭に自動的に取り込まれる内容はカスタマイズできます(Emacsの設定のカスタマイズ).
なお以下の説明ではファイル名を「cautomaton.rb」としています.
プログラムの入力に関して,いくつか注意点を示します.
- 大文字と小文字は区別して入力して下さい.
- このプログラムでは日本語を使うのは「=begin〜=end」の間だけです.
日本語と英語の入力を切り替えるには次のようにします.
「英語/日本語」モードの切替
[半角/全角] - 「=end」以降の各行では[Tab]キーを押すと,行の先頭のスペースが自動的に入ります.
- 「'」(シングルクォート)は[Shift]+[7]で入力する記号です(日本語キーボードの場合).
シングルクォートによく似た文字として「`」(バッククォート)があります. 本科目のプログラムではバッククォートは使いません. - 「__nca」は,アンダースコア(_)2つから始まっています.
- 「 | 」(パイプ,縦棒)は[Shift]+[¥]で入力する記号です(日本語キーボードの場合).
- 「.」(ピリオド)と「,」(コンマ)を区別して下さい.
- 「0」(ゼロ)にはフォントによって斜線が入る場合と入らない場合があります. どちらも同じ「0」です.左のプログラムでは「0」に斜線が入っています.
- プログラムの先頭の部分(=begin...=end)に「所属」「氏名」「学生番号」と, また課題を完成させた後に課題の「難易度」を5段階で自己評価して記入してください. あわせて「感想など」には課題についての感想などを任意で記入してください. 「感想」は必須ではありません.
プログラムをすべて入力できたらファイルを保存してください([File]→[Save]). 入力の途中でも適宜ファイルを保存しておくとよいでしょう. ファイルが完成して保存できたら[Activities]を押してDockを開いて, Terminal(端末)を起動します(モニタ(PCの画面)のアイコン). 端末画面が現れたら,以下のようにプログラムを実行して下さい. なお「$」は端末画面に最初から出ているプロンプトを表しています(「ruby」から入力します).またプログラムのファイル名「cautomaton.rb」は自分がつけたファイルの名前に置き換えてください.
プログラムが正しく記述されていて,上のとおり実行を指示できていれば,次のような図形が表示されるはずです.このようになるかどうか確認してみてください.

課題では,以下の「今回のプログラムによる画像の生成」にしたがって, プログラムを実行することによって,さまざまな図形が生成できることを確認してください. その上でプログラムの実行例の情報をいくつか,次に示すようにプログラムの先頭に書き加えてください. 面白いパターンの画像を作ることができたら,是非その実行例を入れてください.
=begin
所属: 都学部0回生
氏名: 左京太郎
学生番号: 0123456789
難易度(5段階評価): 3
感想など(任意)
プログラムの実行例:
ruby cautomaton.rb -x 0x2b -n 5 -r 600 450
ruby cautomaton.rb -x 0x609 -b 3 800 600
=end
今回のプログラムによる画像の生成
今回のプログラムではセルオートマトンという仕組みを使って, さまざまな画像を生成するようになっています(課題をこなすために仕組みを理解する必要はありません).
プログラムを実行する際には,作成する図形領域の範囲を決めるデータを指定する必要があります. 実行すると画像が表示されます. 場合によってはほとんど何も表示されないかもしれませんが, その場合は一旦プログラムを終了して,再度実行してみてください(以下を参照のこと).
ここで指定している二つの数値で図形全体の縦横のサイズが決まります. 最初の数値が横方向,2番めの数値が縦方向のサイズを決めています. 画像を確認したら,次のいずれかでプログラムを終了します.
- ウインドウのタイトルバーの[×]ボタンを押す
- ウインドウの上にカーソルをおいて[q]か[ESC]キーを押す
(プログラムを終了した後に)再度プログラムを実行すると,(おそらく)さきほどとは異なる図形が表示されるでしょう. これは表示される図形を決める重要なパラメタが勝手に選ばれているためです. よいパラメタが選ばれなかった場合には,ほとんど何も表示されないこともあります.
さてプログラムを実行すると端末に次のような情報が表示されます.
ここで表示されたデータをそのままプログラムに指定して実行すると,いつでも同じ図形を再現できます.
提出するファイルの先頭の「実行例」には,これらのパラメータ(-b, -n, -x)とその値をすべて含めて,次のような形で示してください.
プログラムの実行例: ruby cautomaton.rb -b 2 -n 3 -x 0xa5 512 512 ruby cautomaton.rb -b 3 -n 5 -x 0x1229e 600 400
端末画面に表示されたデータをファイルに取り込む方法についてはこのページの「パラメタのファイルへの取り込み」で説明しています.
これらのパラメタ(-b, -n, -x)を自分で独自に指定して,プログラムを実行することもできます.
-b k | kは2以上の整数とする.指定しない場合はk=2となる. |
---|---|
-n s | sは3以上の奇数とする.指定しない場合はs=3となる. |
-x 0x???? | 0xにつづいて16進表記で値を指定する.指定しない場合はランダムに決定する. |
「-x」は(指定しないでおいて)ランダムに決定することにして, 「-b」「-n」の両方,あるいはどちらか一方を指定して,実行してみるとよいでしょう. 次に「-b」と「-n」を設定する場合の目安を示します.
- -b: 2〜9が適当です
- -n: 3,5ぐらいが適当です.大きい値にするほど処理に時間がかかります
「-x」は一度作成した図を再現するときに指定するものだと考えればよいでしょう. すでに述べたように,課題として提出する「実行例」については,すべてのパラメタ(-b, -n, -x)の値を含めるようにしてください.
なお実行するときに「-r」を追加指定することもできます. 「-r」を指定した場合には,パラメタ(-b,-n,-x)の値が同じでも(おそらく)毎回異なった図形が表示されます.
$ ruby cautomaton.rb -b 4 -n 3 -x 0x2c4a9 -r 600 400
ここで描画している図形の生成方法については「セルオートマトン」で簡単に説明しています.
パラメタのファイルへの取り込み
端末画面に表示されたデータは次のようにしてコピーして貼り付けられます.
- コピーしたい部分をマウスの左ボタンでドラッグする(ドラッグした部分は反転表示される).その後,右クリックのメニューで「Copy」を選ぶ
- Emacsで開いているファイルで,貼り付けたい場所にカーソルを動かしておいてから, [Edit]→[Paste]で貼り付ける(ショートカットは[Ctrl]+[y]).
貼り付けたら再度保存した上で, ファイルをPandAで提出してください.
[参考]セルオートマトン
セルオートマトンとは整列した均質な「セル(cell)」で構成されるシステムです. セルにはそれぞれ状態が定められていて,k通りの状態をとります(kは「-b」で指定する値). 各セルの状態は1ステップごとに変化していくようになっています. 各セルの状態の変化は,そのセル自身を中心としたs個のセルの状態と(sは「-n」で指定する値),それらの状態にもとづいて次の状態を定めるルールによって決められるようになっています(なお左端のセルと右端のセルがつながっているものとして扱っています). 今回のプログラムでは「-x」で与える16進表記の数でルールが決まるようになっています.
今回のプログラムでは,一列に並んだn個セルのtステップの間の時間変化を上から下に並べていった図形を生成します(セルが横にn個,縦にt列並ぶ). プログラムで最後に指定する二つの値がnとtです. またセルの状態によって画像上でのセルの明るさを変えるようになっています.
なお「-r」を追加指定すると,各セルの初期状態をランダムに決めます. 「-r」が指定されていない場合には,中央のセルが状態1で他のセルはすべて状態0からスタートするようになっています.