From 09759eb88c5e8da40777b2caa3e803dd7b03fdb1 Mon Sep 17 00:00:00 2001 From: Jan Klemkow Date: Mon, 5 Nov 2012 14:28:57 +0100 Subject: Add tit4tat c implemantation. --- Makefile | 2 ++ tit4tat.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 Makefile create mode 100644 tit4tat.c 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 + * Copyright (c) 2012 Benjamin Franzke + * + * 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 +#include +#include + +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; +} -- cgit