diff options
author | Jan Klemkow <j.klemkow@wemelug.de> | 2012-11-05 14:28:57 +0100 |
---|---|---|
committer | Jan Klemkow <j.klemkow@wemelug.de> | 2012-11-05 14:28:57 +0100 |
commit | 09759eb88c5e8da40777b2caa3e803dd7b03fdb1 (patch) | |
tree | e3a5d577de292c44b76597e947304be5d9ef4e6a | |
parent | 744d5016677878ee3e2af5c2fd84768456f6ac5e (diff) | |
download | wbs-09759eb88c5e8da40777b2caa3e803dd7b03fdb1.tar.gz wbs-09759eb88c5e8da40777b2caa3e803dd7b03fdb1.tar.bz2 wbs-09759eb88c5e8da40777b2caa3e803dd7b03fdb1.zip |
Add tit4tat c implemantation.
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | tit4tat.c | 59 |
2 files changed, 61 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cade429 --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +tit4tat: tit4tat.c + gcc -std=c99 -Wall -o $@ $< diff --git a/tit4tat.c b/tit4tat.c new file mode 100644 index 0000000..fa3fe50 --- /dev/null +++ b/tit4tat.c @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2012 Jan Klemkow <j.klemkow@wemelug.de> + * Copyright (c) 2012 Benjamin Franzke <benjaminfranzke@googlemail.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> + +enum {COORPERATION, DEFECTION}; + +int pay(int a, int b) +{ + if (a == COORPERATION && b == DEFECTION) return 1; + if (a == DEFECTION && b == DEFECTION) return 2; + if (a == COORPERATION && b == COORPERATION) return 3; + if (a == DEFECTION && b == COORPERATION) return 4; + + exit(EXIT_FAILURE); +} + +int main(int argc, char **argv) +{ + int a_payment = 0, b_payment = 0; + int a, b, a_old = -1; + + for (;;) { + /* human input */ + a = getc(stdin); + fpurge(stdin); + a = (a == 'c') ? COORPERATION : DEFECTION; + + /* computer rules */ + b = (a_old == -1) ? COORPERATION : a_old; + + a_payment += pay(a, b); + b_payment += pay(b, a); + + printf("A: %d Euro\tB: %d Euro\t\t\tA: %d\tB: %d\n", + pay(a, b), pay(b, a), a_payment, b_payment); + + /* save the last human decision */ + a_old = a; + } + + return EXIT_SUCCESS; +} |