/* * 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 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); while (getc(stdin) != '\n'); 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; }