フリーソフトの小道   

コンピュータ・プログラマー養成講座(入門編)
    プログラムコンテストのページ


プログラム・コンテスト 第1種目   〜「素数を見つけるスピード」競技〜

 最高速度記録部門  「素数発見」 「1万未満」部門

 「10,000 までの素数を全て見つけて、ファイルにテキストファイルとして保存する」までの 時間を競うコンテストです。応募者はいるのかな? 応募期限は定めません。 言語は自由です。自分の得意なもので参加ください。プログラム処理の時間は自主的に計って報告ください。 応募者を信頼しています。なお、コンテスト上位になった人のソースリストなどを提出して頂くことがありますので その場合には協力ください。
 コンパイラ部門とインタープリタ部門とに分けます(部門の区別がなければコンパイラが圧倒的有利なのは当然だからです)。 通常、同一ソースのプログラムの場合、インタープリタ方式ではコンパイラ方式の100倍程度遅くなります。 最終的なポイントとして、パソコンの能力の違いや、コンパイラの質の差(優秀なコンパイラはC言語に多い)になります。 また、Windows上でのプログラムはGUI処理の部分に時間を取られる関係で少し不利だと思います。 しかし、前述のような基本性能だけではなく、アルゴリズムの出来が一番大きな部分といえます。 工夫次第で飛躍的にスピードアップできるのですから。  特に、物理研究班の諸君へ一言、「君たちに実力があれば見せてくれ! 君たちの挑戦を待っているよ。」

  プログラミングコンテスト 第1回   コンテスト規定



a

プログラム実行時間の測定方法とは

[方法1] 処理時間の測定はプログラムを作成して、パソコン内部時計で測定することも出来ます。
それぞれのプログラム言語における時間取得などの命令語を調べてみてください。

[方法2] バッチファイルを作成してプログラムの実行速度を測ることも出来ます。
  次に示す2つのファイルを作成します。

  1. バッチファイルの名前は適当な名前(Project.bat など)をつけてください。エディタで全て半角英数字で作成する。
   programname のところは自分が作成した実行したいプログラム名に変えてください。

    以下、コマンドラインオプション読み取りタイプのバッチファイルです。
    time < cr.dat
    programname sosuulist-10000000.txt 10000000
    time < cr.dat

 2. cr.dat ファイルはリターンだけの空行のみのファイルを作ります。
   どちらも、エディタで簡単に作成できます。

 以上の二つのファイルを作りバッチファイルを実行すると、 バッチファイル内に書かれたプログラム programname.exe が起動される。

 なお、プログラム作成においての条件として、
プログラム programname.exe はコマンドラインオプションを読み取り、 設定値として出力ファイル名、限界値を設定するようにプログラムするか、

[方法3] 次のバッチファイルを作成してプログラムの実行速度を測ることも出来ます。
  次に示す3つのファイルを作成します。

  1. バッチファイルの名前は適当な名前(Project.bat など)をつけてください。エディタで全て半角英数字で作成する。
   programname のところは自分が作成した実行したいプログラム名に変えてください。

    time < cr.dat
    programname < cmd.dat
    time < cr.dat

 2. cr.dat ファイルはリターンだけの空行のみのファイルを作ります。
   cmd.dat ファイルは素数ファイル名+リターンと限界値+リターンを含むファイルです(又は逆)。
   どちらも、エディタで簡単に作成できます。

 以上の二つのファイルを作りバッチファイルを実行すると、 バッチファイル内に書かれたプログラム programname.exe が起動される。

[方法4] プログラム内で出力ファイル名、限界値を決めてプログラムを作り、バッチファイルは計時だけにする。

3つの方法があるので自由に選んでください。

※ [方法3、4]の場合、プログラム名のみでよいので、programname より後ろの sosuulist-10000000.txt 10000000 はいらない。

管理人のパソコンで実行した記録は、このバッチファイル方式で測定しています。 そのため、測定された実行時間には、バッチファイルの実行時間、プログラムの起動時間も含めてそれらの合計の時間が計測されます。 このため、そのプログラム実行時間のみではないため、すこし不利な記録になっています。特に短時間で終了するプログラムの場合は非常に不利になります。


 ※「素数発見」種目では 「10万未満」〜「十億未満」 の部も同時開設しています。

 上限値が大きくなるほど、アルゴリズムの質の差が出てきます。どのようなアルゴリズムを使うかによって プログラマの資質、力量を発揮することが出来る部門です。多くの参加をお待ちしていますが(苦笑)。 初歩の人はインタープリターでのプログラミングをお勧めします。 コンパイラーでのプログラミングではある程度知識がないとプログラミング以前の段階(コンパイルエラー)でストップして、 作業が進まなくなります(コンパイルエラーで表示される警告文の意味が理解できない段階ではプログラミング作業が進みません)。

 管理人(志)もこのコンテストに参加します。 (素人と勝負するのは不公平だから参考記録として扱います)。 コンテストに参加される皆さんはプログラミングの素人として、参考記録に追いつけるようにがんばってみてください。

 なお、管理人のパソコンはノートパソコンで、メモリーも128MBと最低レベル、CPUも低級品です。 現在の高性能パソコンは筆者のパソコンより数倍は上の能力を持っているはずです。 マシンパワーに任せて勝負を挑む余地が必ず残っているはずです。 また、工夫したアルゴリズムによるプログラムは多くのメモリーを必要とするものです。 管理人に勝る結果を実現できるチャンスは大いにあります。 負けて元々の意気込みでがんばってください。勇気ある挑戦者を求む!

管理人(志)


 コンテスト記録

「素数発見」競技「最高記録」
全プログラミングコンテストの「記録」総集編


 その他のコンテスト関連ページ

第1回「素数発見」競技 コンテスト規定
第2回「超電卓」競技 コンテスト規定
第3回「分数電卓」競技 コンテスト規定
第4回「文字列並べ替え」競技 コンテスト規定
第5回「文字列置き換え」競技 コンテスト規定
第6回「積み算」競技 コンテスト規定
第7回「円周率」競技 コンテスト規定

フリーのプログラミング言語、開発ツールの入手法

   → サイトトップへ  へ




このページは2003/2/1 に最初に作成されました。