diff --git a/packages/cowbull/src/Makefile b/packages/cowbull/src/Makefile new file mode 100644 index 0000000..9ecb73b --- /dev/null +++ b/packages/cowbull/src/Makefile @@ -0,0 +1 @@ +cowd: diff --git a/packages/cowbull/src/cowd.c b/packages/cowbull/src/cowd.c new file mode 100644 index 0000000..14dfed7 --- /dev/null +++ b/packages/cowbull/src/cowd.c @@ -0,0 +1,60 @@ +#include +#include + +void +mungle(char *str, int len) +{ + int i; + + for (i = 0; i < len; i += 1) { + str[i] ^= 0xff; + } +} + +int +main(int argc, char *argv[]) +{ + long answer = 0; + int i; + + { + struct timeval tv; + + gettimeofday(&tv, NULL); + srandom(tv.tv_usec); + } + + for (i = 0; i < 4; i += 1) { + answer = (answer << 4) | ((random() % 6) + 1); + } + + while (1) { + char line[20]; + long guess; + int ret = 0; + + if (NULL == fgets(line, sizeof(line), stdin)) { + break; + } + + guess = strtol(line, NULL, 16); + + for (i = 0; i < 4; i += 1) { + int g = (guess >> (i*4)) & 0xf; + int a = (answer >> (i*4)) & 0xf; + + if ((g < 1) || (g > 7)) { + ret = 0; + break; + } else if (g == a) { + ret += 0x10; + } else if (g & a) { + ret += 0x01; + } + } + + printf("%02x\n", ret); + } + + return 0; +}