2004年10月27日

プログラミング 最速VSきれい イメージ図

まさかのパズル: プログラムで解く〜一口メモにおいて、1口といいながら、文字がいっぱい多くて大変なので、イメージ図にしてみました。以下は「最速」狙いのプログラミングと「単純でわかりやすくてきれい」なプログラミングは結構なところまで、道行はいっしょだよということを言ってます。

左端からスタートします。目的地が「最速の山」の旅人も目的地が「きれいな山」の旅人も途中までは同じ道を行きます。別れるのはだいぶ行ってからです。場合によっては別れる前に旅人は目的を果たしてしまいます。

saisokukirei.jpg

posted by いわいまさか at 11:36| Comment(0) | TrackBack(0) | プログラミングもの | このブログの読者になる | 更新情報をチェックする

2004年10月26日

プログラムで解く〜一口メモ

>このことは人間の思考ルーチンである、「もし、このセルがXだったら・・・と仮定し
>て」以降の盤面で矛盾があればこれはダメだ、とする方法に相当しているのですね。
 そうですね。

以下はこの話題に関連して日頃から思ってることの一口メモ程度の説明

A「単純作業を速くこなす」  
 コンピュータは基本的に「単純作業を速くこなす」のが得意なので、そのことに結びつけてやるのがとりあえず簡単でs。コンピュータは「その方法ださいよ、こうやった方がスマートだ」とか文句もいわずに黙々と作業をこなします。

B「凝ったアルゴリズムを使わない方がいい」
 人間が考えた凝ったアルゴリズムを使うとバグが入りやすくなります。また、返って遅いなんて場合もままあります。

C「再帰」(話的には横道的な話題)
 実際は再帰プログラムを生の関数で組むとスタックをたくさん消費するので、動かなくなったり、謎のバグを読んだりします。再帰部分を「次何調べんのリスト?」に展開するのがいいです。調べることを「次何調べんのリスト?」に追加していきます。調べてるうちにまた調べるものがでてくれば「次何調べんのリスト?」に追加します。

D「速くしようとすると」
 探索空間が大きくて、速くしよう(あるいはどうにか解に辿りつこう)とするとBのところを覆して、新規のアルゴリズム、あるいは、システムを追加する必要がでてきます。よくあるアルゴリズム的な話はこのあたりのことを論議しています。

E「とりあえずは単純であれば」
 とりあえずは、単純でバグが無いきれいなソースのわかりやすくて速いプログラムを目標にするのがいいです。Dに着手する前にできてしまう事は多いです。Dに行く前は単純なプログラムと速いプログラムは同じものです。

F「おれは自由にやりたいて人にもB、Eはオススメ」
 プログラムで自由に作って楽しむからいいんだという人もとりあえずDの入り口までは軽くいけるようになってるとラッキーだと思います。パチスロで言うと「目押しはできるよね」みたいなことかも知れません。
posted by いわいまさか at 12:44| Comment(2) | TrackBack(1) | プログラミングもの | このブログの読者になる | 更新情報をチェックする

9x9数独のプログラムで解くときの基本線

まさかのパズル: FLASH版お絵描き19を作ろう。のコメントで数独のプログラムでの解き方の話が出てきたので、改めて記事にしました。

9x9の数独の場合。
問題が答えの唯一の問題である場合。
つまり、普通に出回ってる問題の場合。
こんな感じでも待ってられる時間で解けたと思います。
void 再帰(BANMEN banmen,int xy)
{
if(xy==81だったら){
最後までいったので正解;
}else{
for(数字=1;数字<=9;数字++){
if(入れる(banmen,xy,数字)==OK){
再帰(xy+1,banmen);
外す(banmen,xy,数字);
}
}
}
}

xyは1を足すにつれテキストを書くような順番(以下テキ順)で9x9盤面をなめる座標を表す値
id=0->(0,0)
id=3->(3,0)
id=80->(8,8)
id=81->おわり
再帰的に入れられたら入れてというのをやっていきます。入れるときには縦・横・領域を見に行ってつじつまがあってるかどうか見ます。つじつまがあってるかどうか調べるのには、「その数字使ってますかメモ」を各ライン・領域でとっといて確認、更新します。

idをなめる順番はテキ順でなくてもいいので寺沢さんのヒントキューの順番にうまくすげかえれば、寺沢さんのアルゴでも最後まで解けます。で、いわい案より速く解けます。
posted by いわいまさか at 09:01| Comment(2) | TrackBack(1) | プログラミングもの | このブログの読者になる | 更新情報をチェックする

2004年10月21日

FLASH版お絵描き19を作ろう。

FLASH版お絵描き19を作ろうと思ってます。別にそんなこと書かなくても、できてから出せばいいんですけど、自分の意思確認です。表明しときます。

FLASH作ったことないのでそのあたりのことも兼ねてます。インターネットにHPにのっけておけることがデカイです。

posted by いわいまさか at 01:32| Comment(4) | TrackBack(0) | プログラミングもの | このブログの読者になる | 更新情報をチェックする

2004年10月06日

スピログラフシミュレート

Javaでスピログラフを真似てみました。スピログラフを真似たソフトはインターネットに転がってますので、そちらをあたってください。これをやったのは、Javaでやってみるのと自分でやってみるのがテーマだったので。思い返すと描画が遅いのがいただけなかった。

スピログラフ
posted by いわいまさか at 07:34| Comment(0) | TrackBack(0) | プログラミングもの | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。