インド式算数パズル解答のソースコードを教えてください。
Posted: 2011年2月19日(土) 08:04
C言語、アルゴリズム・プログラミングの質問です。
下記の10×10のパズル(インド式算数パズル)を解くプログラミング(C)の以下のアルゴリズムから成るソースコードを教えてください。よろしくお願いします。
S*8S4=1SW6
+WWWSWWWW+
S*SS2=5SWS
5W+W*WW*WS
*W9WS1SS*9
SW=W=WW/W=
SW1W6WW4W6
3WS+SS9S4S
SWWWWWW1W/
1W8=S+1S/S
縦・横に各式が成立するように、Sに0~9の整数、もしくは +-/*= 、の演算子、等号を入れます。
なお、Wには何も入らず式を分断します。
↓アルゴリズム
式を計算する関数②を作る
計算に成功し、二つの式の結果を比較し一致したらTRUEを返す
計算に成功し、二つの式の結果を比較し一致しなかったらFALSEを返す
計算に失敗したらFALSEを返す
※式の計算には四則演算の優先度を意識すること(掛け算を足し算より先に行う)
式が入る構造体を作る
文字のポインタの配列[10]
関係する式の構造体のポインタのリスト
〔実装〕
1.1 文字の配列[10][10]を作り、パズルを代入
1.2 【式の構造体】に値を代入していく
この時点で、【式の構造体】には《文字のポインタの配列》と《関係する式の構造体のポインタのリスト》を入れる
無限ループにならないように《関係する式の構造体のポインタ》は一意にする
式を見つけたら、関係する式を探し、見つけたら、その式の【式の構造体】を作り、そのポインタを《関係する式の構造体のポインタのリスト》に入れる
そして、関係する式の関係する式を探す。
1.3 一番最初の【式の構造体】を関数①に渡す
1.4 結果がTRUEならパズルの結果を出力する
関数①
2.1 【式の構造体】から数式文字列を読み込む
2.2 ループで全パターンの文字をSに入れる
2.2.1 関数②に数式文字列を送る
2.2.2 結果がTRUEならループで《関係する式の構造体のポインタのリスト》を全て参照する
2.2.2.1 その【式の構造体】を関数①へ送る
2.2.2.2 結果がFALSEなら2.2.2のループを抜ける
2.2.3 2.2.2のループ条件がFALSEなら(ループ条件で終了したなら)TRUEをreturnする
2.3 2.2のループがFALSEならFALSEをreturnする
下記の10×10のパズル(インド式算数パズル)を解くプログラミング(C)の以下のアルゴリズムから成るソースコードを教えてください。よろしくお願いします。
S*8S4=1SW6
+WWWSWWWW+
S*SS2=5SWS
5W+W*WW*WS
*W9WS1SS*9
SW=W=WW/W=
SW1W6WW4W6
3WS+SS9S4S
SWWWWWW1W/
1W8=S+1S/S
縦・横に各式が成立するように、Sに0~9の整数、もしくは +-/*= 、の演算子、等号を入れます。
なお、Wには何も入らず式を分断します。
↓アルゴリズム
式を計算する関数②を作る
計算に成功し、二つの式の結果を比較し一致したらTRUEを返す
計算に成功し、二つの式の結果を比較し一致しなかったらFALSEを返す
計算に失敗したらFALSEを返す
※式の計算には四則演算の優先度を意識すること(掛け算を足し算より先に行う)
式が入る構造体を作る
文字のポインタの配列[10]
関係する式の構造体のポインタのリスト
〔実装〕
1.1 文字の配列[10][10]を作り、パズルを代入
1.2 【式の構造体】に値を代入していく
この時点で、【式の構造体】には《文字のポインタの配列》と《関係する式の構造体のポインタのリスト》を入れる
無限ループにならないように《関係する式の構造体のポインタ》は一意にする
式を見つけたら、関係する式を探し、見つけたら、その式の【式の構造体】を作り、そのポインタを《関係する式の構造体のポインタのリスト》に入れる
そして、関係する式の関係する式を探す。
1.3 一番最初の【式の構造体】を関数①に渡す
1.4 結果がTRUEならパズルの結果を出力する
関数①
2.1 【式の構造体】から数式文字列を読み込む
2.2 ループで全パターンの文字をSに入れる
2.2.1 関数②に数式文字列を送る
2.2.2 結果がTRUEならループで《関係する式の構造体のポインタのリスト》を全て参照する
2.2.2.1 その【式の構造体】を関数①へ送る
2.2.2.2 結果がFALSEなら2.2.2のループを抜ける
2.2.3 2.2.2のループ条件がFALSEなら(ループ条件で終了したなら)TRUEをreturnする
2.3 2.2のループがFALSEならFALSEをreturnする