こんにちは、
… (人工知能入門)
fuku です、皆さんいかが
お過ごしでしょうか。
昨日は、暖かかったですね。
今日は 一転、雪が 降っています。
カラフルな 天気なので、
体調には くれぐれも お気をつけ下さい。
ところで。
又、プログラムを
作成しました。^^
〈 裏返しゲーム。〉
3桁の 2進数 数字を
入力し、
パターンに 合わせて
変換、全部 0 0 0
又は、1 1 1 にするという、
手順を 示す PG です。
( 1 を表、 0 を裏と 仮定しました )
パターンが 見つかれば、
found = 1
となり、場所を
i
で、表します。
今回は、パターンは
1 0
で、設定しています。
見つかったら、
0 1
に 変換、
続きの 数字を
変換して、
全部 同じ 数字にします。
( 最短 1手、最長 2手で
出来るみたいです )
参考図書
基本情報技術者予想問題集 [ アイテック ]
文字列の探索… p588
… (人工知能入門)
p21
3枚の コインの パズル
〈 裏表のある コインが3枚、一列に並んでいます。
今、隣り合う2枚のコインを 同時に裏がえす操作だけで、
ある並び方の コインを 全て 表または裏にする方法を 示してください。〉
ちょっと、コードが
冗長ですが、
もしあれでしたら、
改善してみてください。;)
( バグなど ありましたら、
ご連絡下さい )
#include <stdio.h>
#include <string.h>
int i;
int j;
int found;
int n,m;
int x;
char T[4];
char P1[3];
char TS[4];
char PS[4];
char S0[2] = "0";
char S1[2] = "1";
char TK[2];
int ptn();
void hant(int y){
TK[0] = T[2];
if((y == 0) && (strcmp(TK, S0)==0)){
TS[0] = T[0];
TS[1] = S1[0];
TS[2] = S1[0];
printf("Text = %s\n", TS);}
if((y==0) && (strcmp(TK, S1)==0)){
TS[0] = S0[0];
TS[1] = S1[0];
TS[2] = TK[0];
printf("Text = %s\n", TS);
TS[0] = S0[0];
TS[1] = S0[0];
TS[2] = S0[0];
printf("Text = %s\n", TS);}
TK[0] = T[0];
if((y == 1) && (strcmp(TK, S1)==0)){
TS[0] = S0[0];
TS[1] = S0[0];
TS[2] = T[2];
printf("Text = %s\n", TS);}
if((y==1) && (strcmp(TK, S0)==0)){
TS[0] = TK[0];
TS[1] = S0[0];
TS[2] = S1[0];
printf("Text = %s\n", TS);
TS[0] = S1[0];
TS[1] = S1[0];
printf("Text = %s\n", TS);}
}
int main(){
strcpy(P1, "10");
scanf("%s", T);
int x = ptn();
printf("i = %d\n", x);
hant(x);
}
ptn(){
i = 0;
found = -1;
n = 2;
m = 1;
while((found == -1) && (i <= (n - m + 1))){
j = 0;
PS[0] = P1[j];
TS[0] = T[i+j];
while((j <= m) && (strcmp(TS, PS) == 0)){
j = j + 1;
PS[0] = P1[j];
TS[0] = T[i+j];}
if( j > m ){
found = 1;}
else{
i = i + 1;
TS[0] = T[i];}
}
if( found == -1 ){
i = -1;}
printf("found = %d\n", found);
return i;
}