いろんな言語でハノイの塔
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
いろんな言語でハノイの塔 [2025/06/03 05:44] – [Batch (Cmd.exe)] araki | いろんな言語でハノイの塔 [2025/06/03 05:51] (現在) – [Batch (Cmd.exe)] araki | ||
---|---|---|---|
行 131: | 行 131: | ||
これを回避するために'': | これを回避するために'': | ||
- | < | + | < |
@echo off | @echo off | ||
行 206: | 行 206: | ||
=== 実行結果 === | === 実行結果 === | ||
PowerShell版と同じ環境で実行したが、恐ろしく遅い。 | PowerShell版と同じ環境で実行したが、恐ろしく遅い。 | ||
- | < | + | < |
C: | C: | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 241: | 行 241: | ||
'' | '' | ||
本体は'' | 本体は'' | ||
- | < | + | < |
#include < | #include < | ||
#include < | #include < | ||
行 302: | 行 302: | ||
速すぎて計測に意味がない。 | 速すぎて計測に意味がない。 | ||
多分、'' | 多分、'' | ||
- | < | + | < |
araki@chive[117]% time ./hanoic -n 4 | araki@chive[117]% time ./hanoic -n 4 | ||
Disc 1 moved from 1 to 3. | Disc 1 moved from 1 to 3. | ||
行 331: | 行 331: | ||
Boostを使っているのは、コマンドライン引数の処理をしてくれる手頃なライブラリだからというだけで、別にGNU のparseoptなんかを使っても良かったのだが、まあ、そんな感じで、多分このせいでCに比べてやや遅くなっている。 | Boostを使っているのは、コマンドライン引数の処理をしてくれる手頃なライブラリだからというだけで、別にGNU のparseoptなんかを使っても良かったのだが、まあ、そんな感じで、多分このせいでCに比べてやや遅くなっている。 | ||
=== コード === | === コード === | ||
- | < | + | < |
#include < | #include < | ||
#include < | #include < | ||
行 381: | 行 381: | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[131]% time ./hanoicc -n 4 | araki@chive[131]% time ./hanoicc -n 4 | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 412: | 行 412: | ||
でも、なんというか、C言語との食い合わせがいまいちなスタイルで、これが好きになれなかったんですよね。 | でも、なんというか、C言語との食い合わせがいまいちなスタイルで、これが好きになれなかったんですよね。 | ||
- | < | + | < |
#import < | #import < | ||
#import < | #import < | ||
行 487: | 行 487: | ||
そもそも、こういう題材に向いている言語ではないんだよね。 | そもそも、こういう題材に向いている言語ではないんだよね。 | ||
Quick Sortとか書くと Lispっぽくていいんだけれどね。 | Quick Sortとか書くと Lispっぽくていいんだけれどね。 | ||
- | < | + | < |
; | ; | ||
(defun hanoi (n a b c) | (defun hanoi (n a b c) | ||
行 520: | 行 520: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[171]% time clisp hanoi.cl -n 4 | araki@chive[171]% time clisp hanoi.cl -n 4 | ||
行 557: | 行 557: | ||
GNU Prologの場合ブートストラップコードをCで書くことが出来るので、コマンドライン引数の処理なんかはそっちでやっているから、本体だけしかないのでこのようになっている。 | GNU Prologの場合ブートストラップコードをCで書くことが出来るので、コマンドライン引数の処理なんかはそっちでやっているから、本体だけしかないのでこのようになっている。 | ||
参考までにブートストラップのコードも載せておく。 | 参考までにブートストラップのコードも載せておく。 | ||
- | < | + | < |
hanoi(0, | hanoi(0, | ||
行 563: | 行 563: | ||
</ | </ | ||
- | < | + | < |
/* | /* | ||
* Prolog Wrapper | * Prolog Wrapper | ||
行 624: | 行 624: | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[177]% time ./hanoipro -n 4 | araki@chive[177]% time ./hanoipro -n 4 | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 651: | 行 651: | ||
コードにはコメントをつけてあります。 | コードにはコメントをつけてあります。 | ||
引数はなんとなくそんな感じになるように処理していますが、適当なので、あまり追求しないでください。 | 引数はなんとなくそんな感じになるように処理していますが、適当なので、あまり追求しないでください。 | ||
- | < | + | < |
# | # | ||
1000 !=^GETARG | 1000 !=^GETARG | ||
行 705: | 行 705: | ||
=== 実行結果 === | === 実行結果 === | ||
処理系が優秀だからか、あるいは、そもそも、関数呼び出しなどの処理が軽いからなのか、かなり高速だと思います。 | 処理系が優秀だからか、あるいは、そもそも、関数呼び出しなどの処理が軽いからなのか、かなり高速だと思います。 | ||
- | < | + | < |
araki@chive[109]% time ./hanoi.vtl -n 4 | araki@chive[109]% time ./hanoi.vtl -n 4 | ||
Disc 1 moved from 1 to 3. | Disc 1 moved from 1 to 3. | ||
行 741: | 行 741: | ||
'' | '' | ||
あとは、'' | あとは、'' | ||
- | < | + | < |
# | # | ||
行 800: | 行 800: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[125]% time ./hanoi.pl -n 4 | araki@chive[125]% time ./hanoi.pl -n 4 | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 834: | 行 834: | ||
特にひねりもなく、普通に実装してあります。 | 特にひねりもなく、普通に実装してあります。 | ||
特筆するべきこともないかと思います。 | 特筆するべきこともないかと思います。 | ||
- | < | + | < |
# | # | ||
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||
行 869: | 行 869: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[131]% time ./hanoi.rb -n 4 | araki@chive[131]% time ./hanoi.rb -n 4 | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 905: | 行 905: | ||
'' | '' | ||
つまり、クラスライブラリとそれに付随するサンプル、あるいはテストコードをひとまとめにしておくことも出来るのはなかなかに便利だと思います。 | つまり、クラスライブラリとそれに付随するサンプル、あるいはテストコードをひとまとめにしておくことも出来るのはなかなかに便利だと思います。 | ||
- | < | + | < |
# | # | ||
行 939: | 行 939: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[146]% time ./hanoi.py -n 4 | araki@chive[146]% time ./hanoi.py -n 4 | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 973: | 行 973: | ||
このため再帰呼び出しの際に '' | このため再帰呼び出しの際に '' | ||
- | < | + | < |
# | # | ||
行 1004: | 行 1004: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[152]% time ./ | araki@chive[152]% time ./ | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 1028: | 行 1028: | ||
awkは、AT& | awkは、AT& | ||
一行野郎などと言われるように、本来は、単機能を実装したコマンドを、パイプでつないで、複雑な処理を実現するのが主な使い方であり、コードそのものをコマンドラインにタイプしてしまい、わざわざスクリプトファイルにしたりしないことも多い。 | 一行野郎などと言われるように、本来は、単機能を実装したコマンドを、パイプでつないで、複雑な処理を実現するのが主な使い方であり、コードそのものをコマンドラインにタイプしてしまい、わざわざスクリプトファイルにしたりしないことも多い。 | ||
- | < | + | < |
$ cat resul.txt | awk ' | $ cat resul.txt | awk ' | ||
</ | </ | ||
行 1038: | 行 1038: | ||
=== コード === | === コード === | ||
普通の関数型言語の側面もあるので、そのまま、ストレートに実装してある。 | 普通の関数型言語の側面もあるので、そのまま、ストレートに実装してある。 | ||
- | < | + | < |
# | # | ||
function hanoi(n, a, b, c) | function hanoi(n, a, b, c) | ||
行 1067: | 行 1067: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@chive[157]% time ./hanoi.awk -n 4 | araki@chive[157]% time ./hanoi.awk -n 4 | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 | ||
行 1098: | 行 1098: | ||
コマンドラインの引数をとるために flagを、表示の加工用に fmtモジュールを利用している以外は、コード内で完結している。 | コマンドラインの引数をとるために flagを、表示の加工用に fmtモジュールを利用している以外は、コード内で完結している。 | ||
- | < | + | < |
package main | package main | ||
行 1145: | 行 1145: | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@cherry: | araki@cherry: | ||
Disc 1 moved from 1 to 3. | Disc 1 moved from 1 to 3. | ||
行 1181: | 行 1181: | ||
また、ガベージコレクションによる動的なメモリ管理ではなく、静的な管理が中心となる。 | また、ガベージコレクションによる動的なメモリ管理ではなく、静的な管理が中心となる。 | ||
- | < | + | < |
use getopts:: | use getopts:: | ||
use std:: | use std:: | ||
行 1230: | 行 1230: | ||
</ | </ | ||
=== 実行結果 === | === 実行結果 === | ||
- | < | + | < |
araki@cherry: | araki@cherry: | ||
Disc 1 moved from 1 to 3 | Disc 1 moved from 1 to 3 |
いろんな言語でハノイの塔.1748929475.txt.gz · 最終更新: by araki