ハノイの塔コードをIdeoneで動かしてみた!『プログラミング言語図鑑』

ハノイの塔コードをIdeoneで動かしてみた!『プログラミング言語図鑑』

今回紹介する書籍は、プログラミング言語図鑑(増井敏克)です。

プログラミングは素人なのですが最近勉強を始めたということもあって思わず書店で購入してしまいました笑。

内容

CC++JavaPythonPHPなどを始めとした全67言語が紹介されています。
 
基本的に1言語あたり見開き2ページで紹介されていて、イメージ図と簡単な紹介、そしてその言語でハノイの塔のプログラムを書いた例が記載されています。
また全ての言語で誕生年、言語製作者、用途、分類が記載されていて、簡単ではありますが、タイトルの通り図鑑としての体裁も整っています。
また各言語でのトピックスを紹介する簡単なコラムのようなものもあり、その言語の歴史や名前の由来などの情報が紹介されていて、眺めていて楽しい内容です。
 
加えてプログラミングの基本知識や、Ideone.comというwebでのプログラム実行環境の紹介などがあります。

感想

絵が多めなので、ぱっと見で言語の雰囲気がわかりとても読みやすく感じました。
プログラミング素人の私が知っていたのは10言語程度で、ほとんどが初見であったため、「へー、こんなのもあるのかー、ふむふむ。」という感じて楽しく読めました。

 印象的に残った言語

特に印象的だったのは、『Whitespace』という言語です。言語の構成要素は『空白』『タブ』『改行』の視覚的に文字が入力されることが一切ないもののみとなっており、出来上がりのソースコードはその名前のとおり”真っ白”となります笑。というのもこれは、データの隠蔽技術である『ステガノグラフィー』として利用されているためであり、決して”おふざけ”ではないのです。
 
そのほかにも難解言語『Brainfuck』など、この先自分が使用することは絶対にないであろう面白い言語が紹介されており、たいへん興味深い内容でした。

 評価

200ページ
おすすめ度:★★★☆☆
難易度:★☆☆☆☆
新しい出会い:★★★★★
 

ハノイの塔プログラムを実際に動かしてみた

プログラム例として、紹介されていたハノイの塔を実際に試してみました。
 
ハノイの塔とは下図の様に、一本の軸に円盤が大きい順に重なった初期状態から、円盤を一枚ずつ移動させ、小さな円盤の上に大きな円盤が乗らないようにするという条件を守りながら、最初とは別の軸へ初期状態の円盤の重なりをそっくりそのまま移すというゲームです。
 
 
今回はC++の紹介コードを実行してみることにしました。
付録のソースコードは以下の様なものです。
 
#include <iostream>
using namespace std;
 
/* ハノイの塔 */
void hanoi(int n, char *from, char *to, char *via){
    if (n > 1){
        hanoi(n - 1, from, via, to);
        cout << from << " -> " << to << endl;
        hanoi(n - 1, via, to, from);
    } else {
        cout << from << " -> " << to << endl;
    }
}
 
int main() {
    int n;
    cin >> n;
    hanoi(n, "a", "b", "c");
 
    return 0;
}
これをWeb上でソースコードの実行が可能なIdeone.comというサイトを使用して試してみました。
新しい言語を始めようとすると、まず使用環境を整えることに苦労してしまいますが、このWebサイトを使えば、何の準備もなくいきなりソースコードを実行することができるので、初学者向けの練習などに使えて非常に便利です。

実際にIdeone.comの開発画面へコードを打ち込んだ様子が以下の図です。

ideoe打ち込み画面
今回は円盤が3枚の場合で考え、Inputとして、”3”を入力し、コードを実行しました。結果が以下の通りです。
写真中の”stdout”という箇所に結果が表示されています。
 
結果、見事上記の様な手順でハノイの塔が解けることがわかりました。
3枚の場合の手順数はとなります。

 再帰アルゴリズムについて

このハノイの塔は、プログラミングの初歩を学ぶ良い機会となりました。ハノイの塔のプログラムには『再帰アルゴリズム』という基本的で重要なアルゴリズムが使われています。これは簡単に言うと、プログラムが自分自身を呼び出して再帰し、演算を繰り返すというようなアルゴリズムになっています。ソースコードは簡潔でいかにも単純なプログラムの様にも見えますが、実は少々入り組んでいてコードを見ただけでその仕組みを理解することは初心者には厳しいかも知れません(と言っている私も初心者ですが笑)。ただこの仕組みを一度理解しておくことは、基礎的な学習という意味で、プロクラミングをする人にとっては非常に重要なことだと思います。
 
webが使える環境であれば簡単に試せるのでみなさんも是非お試しを!  
 
プログラミング言語図鑑

プログラミング言語図鑑