HOME » PHP » PHPのお勉強 : アルゴリズム

PHPのお勉強 : アルゴリズム

今回はアルゴリズムについてお勉強しました。

アルゴリズム

アルゴリズムとは、何らかの問題を解くための手順。プログラミングをする前に、どのようにスクリプトで表現するのかを考え、そのロジック、手順を考える必要がある。

スクリプトを作成する上で、必要なスキル
プログラムを作る前に、アルゴリズムについて検討する
わからないことなどを自分で調べることができる

素数を求めるアルゴリズムを考える

1~100まで繰り返して表示する

  1. 1以下の場合は次の値をチェックする
  2. 2の場合は素数なので表示して、次の値をチェックする
  3. 偶数の場合は素数ではないので、次の値をチェックする
  4. 今の値は1と今の値以下の自然数では割れてはいけない
  5. 割れてしまったら素数ではないので、次の値をチェックする
  6. 割れなかった場合は素数なので表示する

ボーリングの得点計算をするアルゴリズムを考える

ピンを倒した数を配列に格納するアルゴリズム

1フレームから10フレームまで繰り返す。
1フレーム、最高3投できるので3回繰り返す。
1投目の場合は10ピンをセットする。

10フレームの場合

  1. ランダムで残りピン数の間で数値を求める
  2. 現在の投球箇所にピン数をセットする
  3. 残りピン数から今求めたピン数を引く
  4. 残りピン数が0だったら10本を再度セットする
  5. 2投目でストライクかスペアを出していない場合は10フレーム終了

10フレームではない場合

  1. 3投目の場合は投球繰り返し終了
  2. ランダムで残りピン数の間で数値を求める
  3. 現在の投球箇所にピン数をセットする
  4. 残りピン数から今求めたピン数を引く

※ピンを倒した数を格納する配列は2次元配列で格納する。

ボーリングの得点を求めるアルゴリズム

1フレームから10フレームまで繰り返す。
1フレーム、最高3回分のデータがある可能性があるので、3回繰り返す。

  1. 10フレーム以外は3投目データはないので繰り返し終了
  2. ピン合計数に現在のフレーム、投球数の数を足す
  3. 残りピン数から今足したピン数を引く
  4. 1球目で残りピンが0本で10フレームデータで無い場合はストライク判定する
  5. 2球目で残りピンが0本で10フレームデータで無い場合はスペア判定をする

ストライクかスペアの場合

  1. ストライクの場合は現在の位置から2球分の合計数を足す
  2. スペアの場合は現在の位置から1球分の合計数を足す

そのフレームまでの合計数をフレーム配列に格納する。

今回の作成ファイル

どちらも参考書のまんまなのが悔しかったので、3の倍数だけアホになるスクリプトを自作してみました。今の僕のスキルでは、これが限界。かえって悔しさが増したというオチです。

素数を求めるスクリプトはすぐに理解できたのですが、ボーリングの得点計算は、そもそも得点計算の方法がよくわかってなかったので、そこから出発しました(汗)。

それにしても、アルゴリズムを考えるって難しいなぁ。for文の中にfor文やif文が複雑に入れ子になっているため、スクリプトの流れを追っかけているうちに脳みそが沸騰しそうです…。

コメント&トラックバック

トラックバックURL: http://aquila-lab.net/log/archives/74/trackback

Comment form