祖父が読売新聞の日曜版に掲載されるパズルを必死にといているのですが、ちょっと興味を持ってしまって、C言語で回答をつくれないものか、きのう、試していたのです。データを取り込んでワンパターン処理したところで、次の処理のプログラムで挫折しました。ビットをごりごりさわってたら、肩コッタ。
ご存知の方は多々おられると思いますが、中島みゆきのアルバムに10 WINGS
なるものがあります。時代
で一躍有名となった中島みゆきですが、1990年代の中島みゆきは大好きです。この10 WINGS
は二隻の舟
ではじまります。ときはすべてをつれていくものらしぃ~
という、うたいはじめの曲です。小生はこのアルバムの中のMaybe
がこれまた大好きです。そもそもMaybe
が好きなのですが、Maybeは名詞で使うと可能性
を意味しますが、副詞で使うと、この曲で使われている通りもしかしたら
となります。こんな小生は好きだらけです(T-T)。
トータルで聞くと全体的に曲は長いのですが、ゆったりとした曲調を歌う声量には感動させられます。
今、気づいたけど、嘘みたいな I Love Yo
ってなにYO
あっ文字数制限か
#include stdio.h #include stdlib.h #include strings.h struct sequ { char mt; int h; int v; }; struct bbb { int *bh; int *bv; int *bm; int *bw; char * mt; char * mtd; char * mtw; }; int ipt(struct bbb bbbp, struct sequ sq); void pmt(char * mt, char * mtd); int ibm(int *bm, int h, int v, char mt); struct sequ n_prc( struct bbb bbbp); struct sequ wh_prc( struct bbb bbbp); int main (int argc, char *argv[]) { int i, j, k; FILE * file; char mt[9][9]; char mtd[9][9]; char mtw[9][9]; int bh[9]; /* - */ int bv[9]; /* | */ int bm[3][3]; int bw[9]; char str[255]; char * sp, mtp; struct bbb bbbp; struct sequ sq; bbbp.bh = bh; bbbp.bv = bv; bbbp.bm = bm; bbbp.bw = bw; bbbp.mt = mt; bbbp.mtd = mtd; bbbp.mtw = mtw; printf (" initn"); for ( j=0; j<9; j++ ) {
= '0' && *sp <= '9') {
mt[j][k] = atoi(sp); mtd[j][k] = 1; mtw[j][k] = 1; bw[j] |= 0x01 << k;
if ( mt[j][k] != 0 ) { if ( ( bh[j] & 0x01 << (mt[j][k] -1)) == 0 ) {
bh[j] |= 0x01 << (mt[j][k] - 1);
} else { printf(" ERROR n"); } if ( ( bv[k] & 0x01 << (mt[j][k] -1)) == 0 ) {
bv[k] |= 0x01 << (mt[j][k] - 1);
} else { printf(" ERROR n"); } if (ibm( bm, j, k, mt[j][k] ) == 1 ) printf(" ERROR n"); } } else if ( *sp == ',' ) { k++; } sp++; } j++; } fclose(file); printf(" bits - bh- n"); for ( j=0; j<9; j++)
bbbp.bv[sq.h] |= 0x01 << sq.mt-1;
ibm(bbbp.bm, sq.h, sq.v, sq.mt); bbbp.bw[sq.v] |= 0x01 << sq.h;
bbbp.mt[sq.v*9+sq.h] = sq.mt; bbbp.mtd[sq.v*9+sq.h] = 1; return (0); } void pmt(char *mt, char * mtd) { int j, k; char * mtp, * mtdp; for ( j=0, mtp = mt, mtdp = mtd; j<9; j++ ) {
bm[j] |= 0x01 << (mt - 1);
return (0); } else { return (1); } } struct sequ n_prc( struct bbb bbbp ) { int i, j, k, m, n; struct sequ sq; int bh; int bv; int mm; int mv; int mw; /* int mh; */ int * bvp; int * bhp; int * bwp; int * bvps; int * bhps; sq.mt = 0; sq.h = 0; sq.v = 0; for ( i=0; i<9; i++ ) {
> i & 0x01) == 1 ) bh |= 0x01 << j;
if ( (*bhp >> i & 0x01) == 1 ) bv |= 0x01 << j;
bvp++; bhp++; } for ( j=0; j<3; j++) {
> j * 3 + m & 0x01) * 0x07) << m * 3;
} for ( k=0; k<3; k++) {
> k*3 & 0x07) << m * 3;
} mm = 0; for ( m=0; m<3; m++ ){
> k * 3 & 0x07) << m * 3) | mv | mw;
} /* printf("num %d: mm[%d] %xn", i+1, j*3+k, mm );*/ for ( m=0,n=0; m<9; m++) {
> m & 0x01) == 0) { n++; } } if ( n == 1 && (bbbp.bm[j*3+k] & 0x01 << i) == 0 ) {
for ( m=0,n=0; m<9; m++) {
> m & 0x01) == 0) { n = m; } } sq.mt = i+1; sq.h = k*3 + n%3; sq.v = j*3 + (n-n%3)/3;; printf("BINGOn"); printf("mt %d, h %d, v %dn", sq.mt, sq.h, sq.v); return sq; } } } } return sq; } struct sequ wh_prc( struct bbb bbbp ) { int i, m, n, j. k; struct sequ sq; sq.mt = 0; sq.h = 0; sq.v = 0; for ( i=0; i<9; i++ ) {
> i & 0x01) == 1 ) bh |= 0x01 << j;
if ( (*bhp >> i & 0x01) == 1 ) bv |= 0x01 << j;
bvp++; bhp++; } for ( j=0; j<3; j++) {
> j * 3 + m & 0x01) * 0x07) << m * 3;
} for ( k=0; k<3; k++) {
> k*3 & 0x07) << m * 3;
} mm = 0; for ( m=0; m<3; m++ ){
> k * 3 & 0x07) << m * 3) | mv | mw;
} /* printf("num %d: mm[%d] %xn", i+1, j*3+k, mm );*/ } } } return sq; }