RSS

 

RSS


 8を何個か使って、四則演算、ケタくっつけ(8、88、・・・)で来年の年号の2008を作るのはどうかなと思ってプログラミング。prologで。

///////////////////////
shisoku(A,B,C,F1,F2,F):- C is A+B,F=F1+F2.
shisoku(A,B,C,F1,F2,F):- C is A-B,F=F1-F2.
shisoku(A,B,C,F1,F2,F):- C is A*B,F=F1*F2.
shisoku(A,B,C,F1,F2,F):- 0.0001>B,!,fail.(コードとしてNG)
shisoku(A,B,C,F1,F2,F):- C is A/B,F=F1/F2.

hachi(A,B,F):-wakeru(A,A1,A2),hachi(A1,B1,F1),hachi(A2,B2,F2),shisoku(B1,B2,B,F1,F2,F).
hachi(A,B,B):-narabi(A,B).

narabi(A,B):- A>=2,A1 is A-1,narabi(A1,B1),B is B1*10+8.
narabi(1,8).
m(2,1):-!.
m(N,1).
m(N,X):-N1 is N-1,m(N1,X1),X is X1+1.

wakeru(A,B,C):- 1>=A,!,fail.
wakeru(A,A1,A2):-m(A,A1),A2 is A-A1.
///////////////////////

1?-hachi(7,2008,X).  で解無し。

1 ?- hachi(8,2008,X).
X = 88- (8+8)* (8-8* (8+8)) ;
X = 88- (8+8)* (8- (8+8)*8) ;
X = 88+ (8+8)* (8* (8+8)-8)  以下複数解

 問題
 8が8個で2008を作ってみましょう。使えるのは四則演算とケタくっつけ(8、88、888、・・・)。

 というのができるが、手で解くにはこのままでは苦しい。

 あと、ソース内の割り算のゼロ割封じのコードがよろしくない。(コードとしてNG)と表記。そこに限らず、小数の扱いが怪しい。

 8が8個というのはなにやら「めでたい」感じ。
 そして、答えが
 (****)×8 でなく
 (****)+88 になるのが面白いところ。

  工夫すれば問題として立派になるかも。

追加20081227
  もう少し練ってみた。これならば、手でも解ける。そして唯一解。

 問題:

 88  8  8  8  8  88 =2008

 左辺(88が2個、8が4個)に書き足して式が成り立つようにしてください。使える記号は+、-、×、÷、(カッコ)です。


  • コメント (1)
  • トラックバック (0)
トラックバックURL :
http://www.iwai-masaka.jp/tb.cgi/41293

コメント

もう少し、練った問題を本文の後ろに追加しました。

  • Posted by いわいまさか
  • at 2007/12/27 14:50:37