#include <stdio.h>
static const char alpha[10][8][8] = {
{ // 0
{ 0, 0, 0, 0, 8, 8, 8, 8 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 }
},
{ // 1
{ 0, 0, 0, 0, 8, 8, 8, 8 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 }
},
{ // 2
{ 0, 0, 0, 0, 8, 8, 8, 8 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 8, 8, 8 }
},
{ // 3
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 0, 0, 0 },
{ 0, 0, 0, 0, 8, 8, 8, 8 }
},
{ // 4
{ 8, 8, 8, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 }
},
{ // 5
{ 8, 8, 8, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 }
},
{ // 6
{ 8, 8, 8, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 8, 8, 8, 8, 0, 0, 0, 0 }
},
{ // 7
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 0, 0, 0, 8, 0, 0, 0, 0 },
{ 8, 8, 8, 8, 0, 0, 0, 0 }
},
{ // 8
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 8, 0, 0, 8, 0, 0 },
{ 0, 0, 8, 0, 0, 8, 0, 0 },
{ 0, 0, 8, 0, 0, 8, 0, 0 },
{ 0, 0, 8, 8, 8, 8, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 }
},
{ // 9
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 8, 8, 8, 8, 0, 0 },
{ 0, 0, 8, 0, 0, 8, 0, 0 },
{ 0, 0, 8, 0, 0, 8, 0, 0 },
{ 0, 0, 8, 0, 0, 8, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 }
}
};
static int dummy1[12];
static char photo[16][64];
static int dummy2[34];
static int seed;
static int dummy3[56];
static void bitblt(int bx, int by, int n)
{
for (int y = 0; y < 8; y++)
for (int x = 0; x < 8; x++)
photo[by + y][bx + x] = alpha[n][y][x];
}
static int pseudo_rand(void)
{
seed = seed * 214013 + 2531011;
return (seed >> 16) & 0x7FFF;
}
extern int recog(char photo[16][64]);
static void shot(int n)
{
for (int y = 0; y < 16; y++)
for (int x = 0; x < 64; x++)
photo[y][x] = 0;
int cursor = 0;
int pos = 1000;
for (int c = 0; c < 4; c++)
{
cursor += pseudo_rand() % 9;
int x = cursor;
int y = pseudo_rand() % 9;
bitblt(x, y, (n / pos) % 10);
cursor += 8;
pos /= 10;
}
for (int y = 0; y < 16; y++)
for (int x = 0; x < 64; x++)
if (pseudo_rand() % 10 == 0)
photo[y][x] = (photo[y][x] == 0) ? 8 : 0;
}
int main(void)
{
seed = 3; // the seed will be changed
printf("---------------\n");
int RESULT = 0;
for (int c = 0; c < 2000; c++)
{
int number = pseudo_rand() % 10000;
shot(number);
if (recog(photo) == number)
RESULT++;
}
printf("RESULT : %d\n", RESULT);
return 0;
}
댓글