From 47bf7b2aad5e2e3a8fc0f9e9918de76401acdbe7 Mon Sep 17 00:00:00 2001 From: anon <anon@anon.anon> Date: Mon, 1 Jul 2024 23:40:15 +0200 Subject: [PATCH] -- --- miscellaneous/game_theory/.gitignore | 4 + miscellaneous/game_theory/.notgit/HEAD | 1 + miscellaneous/game_theory/.notgit/config | 11 ++ miscellaneous/game_theory/.notgit/description | 1 + miscellaneous/game_theory/.notgit/gitui | 15 ++ .../.notgit/hooks/applypatch-msg.sample | 15 ++ .../.notgit/hooks/commit-msg.sample | 24 +++ .../.notgit/hooks/fsmonitor-watchman.sample | 174 ++++++++++++++++++ .../.notgit/hooks/post-update.sample | 8 + .../.notgit/hooks/pre-applypatch.sample | 14 ++ .../.notgit/hooks/pre-commit.sample | 49 +++++ .../.notgit/hooks/pre-merge-commit.sample | 13 ++ .../game_theory/.notgit/hooks/pre-push.sample | 53 ++++++ .../.notgit/hooks/pre-rebase.sample | 169 +++++++++++++++++ .../.notgit/hooks/pre-receive.sample | 24 +++ .../.notgit/hooks/prepare-commit-msg.sample | 42 +++++ .../.notgit/hooks/push-to-checkout.sample | 78 ++++++++ .../.notgit/hooks/sendemail-validate.sample | 77 ++++++++ .../game_theory/.notgit/hooks/update.sample | 128 +++++++++++++ miscellaneous/game_theory/.notgit/index | Bin 0 -> 504 bytes .../game_theory/.notgit/info/exclude | 6 + miscellaneous/game_theory/.notgit/logs/HEAD | 4 + .../.notgit/logs/refs/heads/master | 4 + .../.notgit/logs/refs/remotes/origin/master | 2 + .../0c/a8dbb67ae88ba0a44e5e0b9f4a32e0f3eb7605 | Bin 0 -> 154 bytes .../0d/b64ca2f5e06b8074c2dd445cbbd6986cb9e337 | Bin 0 -> 150 bytes .../36/2d7f214d0f1067e4e50d83d3fef9604c6732df | Bin 0 -> 143 bytes .../44/8a0d2d5103b3466cb42b96ac7dd8b490434678 | 3 + .../45/507b846a445ae689b1ec138423adc92eaa9aa4 | Bin 0 -> 648 bytes .../4a/766ad60b3d3fef52e98c9bf3207d7ffd576a50 | Bin 0 -> 233 bytes .../52/08bd7a9e640ad49d0bb391f08b77244fb5f06e | 2 + .../5f/30466c883f7e24c936302527644956a384a672 | Bin 0 -> 121 bytes .../76/3e3cf4711a67558edcc1acda99bd6707f300ae | Bin 0 -> 58 bytes .../7e/67616d6f9db0ea7997d343859bf09b53589e4b | 1 + .../82/e79c486584799299e118dc5c46fbaa6360ca62 | Bin 0 -> 118 bytes .../91/90a0f97e1543b0b315f8100c08880dfdb5a9d8 | Bin 0 -> 668 bytes .../a6/06ce514fd748090259e07dc4f166668ac288c1 | Bin 0 -> 812 bytes .../bb/900a1b32d47163430c94918816646d5ed2a61f | Bin 0 -> 121 bytes .../bc/0f30b49248d80625d9f61501e5004bec1443e8 | Bin 0 -> 121 bytes .../d3/71ebb71667dea1dd1b63a8b249eef28ae3d417 | 2 + .../d4/0fb7950aa36cc0d0d59d5afc53624390fde28e | Bin 0 -> 76 bytes .../df/30b6acd40fc54f39642183c4bc3750d237245b | Bin 0 -> 118 bytes .../e2/6d6bd5d8e9164c37a781b2157a41d533e8d3cf | Bin 0 -> 229 bytes .../e3/d89504170179bdfc7d44b8dc4a6691609be854 | Bin 0 -> 663 bytes .../fc/f11c479e77f85d051a1738d0b6a7a2c447ddba | Bin 0 -> 118 bytes .../game_theory/.notgit/refs/heads/master | 1 + .../.notgit/refs/remotes/origin/master | 1 + miscellaneous/game_theory/Makefile | 5 + miscellaneous/game_theory/README.md | 27 +++ miscellaneous/game_theory/source/Anon.hpp | 29 +++ miscellaneous/game_theory/source/Anon2.hpp | 27 +++ miscellaneous/game_theory/source/Doomer.hpp | 20 ++ miscellaneous/game_theory/source/Player.hpp | 31 ++++ .../game_theory/source/Profiteer.hpp | 15 ++ .../game_theory/source/RandomPlayer.hpp | 17 ++ miscellaneous/game_theory/source/Roomer.hpp | 16 ++ miscellaneous/game_theory/source/Segv.hpp | 17 ++ miscellaneous/game_theory/source/main.cpp | 86 +++++++++ 58 files changed, 1216 insertions(+) create mode 100644 miscellaneous/game_theory/.gitignore create mode 100644 miscellaneous/game_theory/.notgit/HEAD create mode 100644 miscellaneous/game_theory/.notgit/config create mode 100644 miscellaneous/game_theory/.notgit/description create mode 100644 miscellaneous/game_theory/.notgit/gitui create mode 100755 miscellaneous/game_theory/.notgit/hooks/applypatch-msg.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/commit-msg.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/fsmonitor-watchman.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/post-update.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/pre-applypatch.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/pre-commit.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/pre-merge-commit.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/pre-push.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/pre-rebase.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/pre-receive.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/prepare-commit-msg.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/push-to-checkout.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/sendemail-validate.sample create mode 100755 miscellaneous/game_theory/.notgit/hooks/update.sample create mode 100644 miscellaneous/game_theory/.notgit/index create mode 100644 miscellaneous/game_theory/.notgit/info/exclude create mode 100644 miscellaneous/game_theory/.notgit/logs/HEAD create mode 100644 miscellaneous/game_theory/.notgit/logs/refs/heads/master create mode 100644 miscellaneous/game_theory/.notgit/logs/refs/remotes/origin/master create mode 100644 miscellaneous/game_theory/.notgit/objects/0c/a8dbb67ae88ba0a44e5e0b9f4a32e0f3eb7605 create mode 100644 miscellaneous/game_theory/.notgit/objects/0d/b64ca2f5e06b8074c2dd445cbbd6986cb9e337 create mode 100644 miscellaneous/game_theory/.notgit/objects/36/2d7f214d0f1067e4e50d83d3fef9604c6732df create mode 100644 miscellaneous/game_theory/.notgit/objects/44/8a0d2d5103b3466cb42b96ac7dd8b490434678 create mode 100644 miscellaneous/game_theory/.notgit/objects/45/507b846a445ae689b1ec138423adc92eaa9aa4 create mode 100644 miscellaneous/game_theory/.notgit/objects/4a/766ad60b3d3fef52e98c9bf3207d7ffd576a50 create mode 100644 miscellaneous/game_theory/.notgit/objects/52/08bd7a9e640ad49d0bb391f08b77244fb5f06e create mode 100644 miscellaneous/game_theory/.notgit/objects/5f/30466c883f7e24c936302527644956a384a672 create mode 100644 miscellaneous/game_theory/.notgit/objects/76/3e3cf4711a67558edcc1acda99bd6707f300ae create mode 100644 miscellaneous/game_theory/.notgit/objects/7e/67616d6f9db0ea7997d343859bf09b53589e4b create mode 100644 miscellaneous/game_theory/.notgit/objects/82/e79c486584799299e118dc5c46fbaa6360ca62 create mode 100644 miscellaneous/game_theory/.notgit/objects/91/90a0f97e1543b0b315f8100c08880dfdb5a9d8 create mode 100644 miscellaneous/game_theory/.notgit/objects/a6/06ce514fd748090259e07dc4f166668ac288c1 create mode 100644 miscellaneous/game_theory/.notgit/objects/bb/900a1b32d47163430c94918816646d5ed2a61f create mode 100644 miscellaneous/game_theory/.notgit/objects/bc/0f30b49248d80625d9f61501e5004bec1443e8 create mode 100644 miscellaneous/game_theory/.notgit/objects/d3/71ebb71667dea1dd1b63a8b249eef28ae3d417 create mode 100644 miscellaneous/game_theory/.notgit/objects/d4/0fb7950aa36cc0d0d59d5afc53624390fde28e create mode 100644 miscellaneous/game_theory/.notgit/objects/df/30b6acd40fc54f39642183c4bc3750d237245b create mode 100644 miscellaneous/game_theory/.notgit/objects/e2/6d6bd5d8e9164c37a781b2157a41d533e8d3cf create mode 100644 miscellaneous/game_theory/.notgit/objects/e3/d89504170179bdfc7d44b8dc4a6691609be854 create mode 100644 miscellaneous/game_theory/.notgit/objects/fc/f11c479e77f85d051a1738d0b6a7a2c447ddba create mode 100644 miscellaneous/game_theory/.notgit/refs/heads/master create mode 100644 miscellaneous/game_theory/.notgit/refs/remotes/origin/master create mode 100644 miscellaneous/game_theory/Makefile create mode 100644 miscellaneous/game_theory/README.md create mode 100644 miscellaneous/game_theory/source/Anon.hpp create mode 100644 miscellaneous/game_theory/source/Anon2.hpp create mode 100644 miscellaneous/game_theory/source/Doomer.hpp create mode 100644 miscellaneous/game_theory/source/Player.hpp create mode 100644 miscellaneous/game_theory/source/Profiteer.hpp create mode 100644 miscellaneous/game_theory/source/RandomPlayer.hpp create mode 100644 miscellaneous/game_theory/source/Roomer.hpp create mode 100644 miscellaneous/game_theory/source/Segv.hpp create mode 100644 miscellaneous/game_theory/source/main.cpp diff --git a/miscellaneous/game_theory/.gitignore b/miscellaneous/game_theory/.gitignore new file mode 100644 index 0000000..763e3cf --- /dev/null +++ b/miscellaneous/game_theory/.gitignore @@ -0,0 +1,4 @@ +*.out +*.o +.gdb_history +game_theory_tournament diff --git a/miscellaneous/game_theory/.notgit/HEAD b/miscellaneous/game_theory/.notgit/HEAD new file mode 100644 index 0000000..cb089cd --- /dev/null +++ b/miscellaneous/game_theory/.notgit/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/miscellaneous/game_theory/.notgit/config b/miscellaneous/game_theory/.notgit/config new file mode 100644 index 0000000..12ce00a --- /dev/null +++ b/miscellaneous/game_theory/.notgit/config @@ -0,0 +1,11 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true +[remote "origin"] + url = https://git.lain.church/anon/game_theory_tournament.git + fetch = +refs/heads/*:refs/remotes/origin/* +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/miscellaneous/game_theory/.notgit/description b/miscellaneous/game_theory/.notgit/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/miscellaneous/game_theory/.notgit/gitui b/miscellaneous/game_theory/.notgit/gitui new file mode 100644 index 0000000..0920a74 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/gitui @@ -0,0 +1,15 @@ +( + tab: 0, + diff: ( + ignore_whitespace: false, + context: 3, + interhunk_lines: 0, + ), + status_show_untracked: None, + commit_msgs: [ + "init", + "doomer observation", + "helpful comments", + "+readme", + ], +) \ No newline at end of file diff --git a/miscellaneous/game_theory/.notgit/hooks/applypatch-msg.sample b/miscellaneous/game_theory/.notgit/hooks/applypatch-msg.sample new file mode 100755 index 0000000..a5d7b84 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/miscellaneous/game_theory/.notgit/hooks/commit-msg.sample b/miscellaneous/game_theory/.notgit/hooks/commit-msg.sample new file mode 100755 index 0000000..b58d118 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/miscellaneous/game_theory/.notgit/hooks/fsmonitor-watchman.sample b/miscellaneous/game_theory/.notgit/hooks/fsmonitor-watchman.sample new file mode 100755 index 0000000..23e856f --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/fsmonitor-watchman.sample @@ -0,0 +1,174 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $retry = 1; + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; <CHLD_OUT>}; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + $retry--; + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $output->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + $last_update_token = $o->{clock}; + + eval { launch_watchman() }; + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/miscellaneous/game_theory/.notgit/hooks/post-update.sample b/miscellaneous/game_theory/.notgit/hooks/post-update.sample new file mode 100755 index 0000000..ec17ec1 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/miscellaneous/game_theory/.notgit/hooks/pre-applypatch.sample b/miscellaneous/game_theory/.notgit/hooks/pre-applypatch.sample new file mode 100755 index 0000000..4142082 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/miscellaneous/game_theory/.notgit/hooks/pre-commit.sample b/miscellaneous/game_theory/.notgit/hooks/pre-commit.sample new file mode 100755 index 0000000..29ed5ee --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/miscellaneous/game_theory/.notgit/hooks/pre-merge-commit.sample b/miscellaneous/game_theory/.notgit/hooks/pre-merge-commit.sample new file mode 100755 index 0000000..399eab1 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/miscellaneous/game_theory/.notgit/hooks/pre-push.sample b/miscellaneous/game_theory/.notgit/hooks/pre-push.sample new file mode 100755 index 0000000..4ce688d --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# <local ref> <local oid> <remote ref> <remote oid> +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0') + +while read local_ref local_oid remote_ref remote_oid +do + if test "$local_oid" = "$zero" + then + # Handle delete + : + else + if test "$remote_oid" = "$zero" + then + # New branch, examine all commits + range="$local_oid" + else + # Update to existing branch, examine new commits + range="$remote_oid..$local_oid" + fi + + # Check for WIP commit + commit=$(git rev-list -n 1 --grep '^WIP' "$range") + if test -n "$commit" + then + echo >&2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/miscellaneous/game_theory/.notgit/hooks/pre-rebase.sample b/miscellaneous/game_theory/.notgit/hooks/pre-rebase.sample new file mode 100755 index 0000000..6cbef5c --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/miscellaneous/game_theory/.notgit/hooks/pre-receive.sample b/miscellaneous/game_theory/.notgit/hooks/pre-receive.sample new file mode 100755 index 0000000..a1fd29e --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/miscellaneous/game_theory/.notgit/hooks/prepare-commit-msg.sample b/miscellaneous/game_theory/.notgit/hooks/prepare-commit-msg.sample new file mode 100755 index 0000000..10fa14c --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/miscellaneous/game_theory/.notgit/hooks/push-to-checkout.sample b/miscellaneous/game_theory/.notgit/hooks/push-to-checkout.sample new file mode 100755 index 0000000..af5a0c0 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin </dev/null) +fi + +if ! git diff-index --quiet --cached --ignore-submodules $head -- +then + die "Working directory has staged changes" +fi + +if ! git read-tree -u -m "$commit" +then + die "Could not update working tree to new HEAD" +fi diff --git a/miscellaneous/game_theory/.notgit/hooks/sendemail-validate.sample b/miscellaneous/game_theory/.notgit/hooks/sendemail-validate.sample new file mode 100755 index 0000000..640bcf8 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/sendemail-validate.sample @@ -0,0 +1,77 @@ +#!/bin/sh + +# An example hook script to validate a patch (and/or patch series) before +# sending it via email. +# +# The hook should exit with non-zero status after issuing an appropriate +# message if it wants to prevent the email(s) from being sent. +# +# To enable this hook, rename this file to "sendemail-validate". +# +# By default, it will only check that the patch(es) can be applied on top of +# the default upstream branch without conflicts in a secondary worktree. After +# validation (successful or not) of the last patch of a series, the worktree +# will be deleted. +# +# The following config variables can be set to change the default remote and +# remote ref that are used to apply the patches against: +# +# sendemail.validateRemote (default: origin) +# sendemail.validateRemoteRef (default: HEAD) +# +# Replace the TODO placeholders with appropriate checks according to your +# needs. + +validate_cover_letter () { + file="$1" + # TODO: Replace with appropriate checks (e.g. spell checking). + true +} + +validate_patch () { + file="$1" + # Ensure that the patch applies without conflicts. + git am -3 "$file" || return + # TODO: Replace with appropriate checks for this patch + # (e.g. checkpatch.pl). + true +} + +validate_series () { + # TODO: Replace with appropriate checks for the whole series + # (e.g. quick build, coding style checks, etc.). + true +} + +# main ------------------------------------------------------------------------- + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1 +then + remote=$(git config --default origin --get sendemail.validateRemote) && + ref=$(git config --default HEAD --get sendemail.validateRemoteRef) && + worktree=$(mktemp --tmpdir -d sendemail-validate.XXXXXXX) && + git worktree add -fd --checkout "$worktree" "refs/remotes/$remote/$ref" && + git config --replace-all sendemail.validateWorktree "$worktree" +else + worktree=$(git config --get sendemail.validateWorktree) +fi || { + echo "sendemail-validate: error: failed to prepare worktree" >&2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/miscellaneous/game_theory/.notgit/hooks/update.sample b/miscellaneous/game_theory/.notgit/hooks/update.sample new file mode 100755 index 0000000..c4d426b --- /dev/null +++ b/miscellaneous/game_theory/.notgit/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 <ref> <oldrev> <newrev>)" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 <ref> <oldrev> <newrev>" >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0') +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/miscellaneous/game_theory/.notgit/index b/miscellaneous/game_theory/.notgit/index new file mode 100644 index 0000000000000000000000000000000000000000..9283802a875d642301df822f9b9ac6ca58f9f750 GIT binary patch literal 504 zcmZ?q402{*U|<4bwzRs7pA9B3oQ2UqF$RW|4F(JhjY}99m|s9JgI<}P&6h%{^w7RL z2iM%1xi_8tGs8LtF1_^3lFanH{GwE_J|F=!=OkO#j2JLo9VQDFPuU=aW?tkK{_Rt_ z7UvweaCL6fpWr0t34b5;F>v@MW~ZiQ<^WAgtGBe#ei%6&OkWZYhnlkz)g0!Db?J$@ z`ExhCs+@k=xpnr3*})O>ycsxyTpe9}UG;KPfaVxmaXQAI0MkaY9Z+*tpqaz((#5MA z$h_GtXN&f<HMKXkOmKFqU=S?MFD*(=)ep!?tV}J^%P1%S`ERNIu42oyy7O<uqZs0$ z=82)2#~A5VmUWHW*8Y9a%bwYv6>97MhGzvZh(pZ_O3X{i&qXp7<X;OJ9iQxaFm0>p z05umFe#r5_zI++mxj_Hx9-K^(4{DEmOiSxJ)Nzo3A8KxHVrHIRGSHO_4C)tTRIVMk TDUoO3zG=Nj&)!AL4_pTT#5t>! literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/info/exclude b/miscellaneous/game_theory/.notgit/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/miscellaneous/game_theory/.notgit/logs/HEAD b/miscellaneous/game_theory/.notgit/logs/HEAD new file mode 100644 index 0000000..a027306 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/logs/HEAD @@ -0,0 +1,4 @@ +0000000000000000000000000000000000000000 d371ebb71667dea1dd1b63a8b249eef28ae3d417 anon <anon@anon.anon> 1719587337 +0200 commit (initial): init +d371ebb71667dea1dd1b63a8b249eef28ae3d417 0db64ca2f5e06b8074c2dd445cbbd6986cb9e337 anon <anon@anon.anon> 1719613775 +0200 commit: doomer observation +0db64ca2f5e06b8074c2dd445cbbd6986cb9e337 5208bd7a9e640ad49d0bb391f08b77244fb5f06e anon <anon@anon.anon> 1719613787 +0200 commit: helpful comments +5208bd7a9e640ad49d0bb391f08b77244fb5f06e 362d7f214d0f1067e4e50d83d3fef9604c6732df anon <anon@anon.anon> 1719613793 +0200 commit: +readme diff --git a/miscellaneous/game_theory/.notgit/logs/refs/heads/master b/miscellaneous/game_theory/.notgit/logs/refs/heads/master new file mode 100644 index 0000000..a027306 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/logs/refs/heads/master @@ -0,0 +1,4 @@ +0000000000000000000000000000000000000000 d371ebb71667dea1dd1b63a8b249eef28ae3d417 anon <anon@anon.anon> 1719587337 +0200 commit (initial): init +d371ebb71667dea1dd1b63a8b249eef28ae3d417 0db64ca2f5e06b8074c2dd445cbbd6986cb9e337 anon <anon@anon.anon> 1719613775 +0200 commit: doomer observation +0db64ca2f5e06b8074c2dd445cbbd6986cb9e337 5208bd7a9e640ad49d0bb391f08b77244fb5f06e anon <anon@anon.anon> 1719613787 +0200 commit: helpful comments +5208bd7a9e640ad49d0bb391f08b77244fb5f06e 362d7f214d0f1067e4e50d83d3fef9604c6732df anon <anon@anon.anon> 1719613793 +0200 commit: +readme diff --git a/miscellaneous/game_theory/.notgit/logs/refs/remotes/origin/master b/miscellaneous/game_theory/.notgit/logs/refs/remotes/origin/master new file mode 100644 index 0000000..1e2e31c --- /dev/null +++ b/miscellaneous/game_theory/.notgit/logs/refs/remotes/origin/master @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 d371ebb71667dea1dd1b63a8b249eef28ae3d417 anon <anon@anon.anon> 1719587655 +0200 update by push +d371ebb71667dea1dd1b63a8b249eef28ae3d417 362d7f214d0f1067e4e50d83d3fef9604c6732df anon <anon@anon.anon> 1719613807 +0200 update by push diff --git a/miscellaneous/game_theory/.notgit/objects/0c/a8dbb67ae88ba0a44e5e0b9f4a32e0f3eb7605 b/miscellaneous/game_theory/.notgit/objects/0c/a8dbb67ae88ba0a44e5e0b9f4a32e0f3eb7605 new file mode 100644 index 0000000000000000000000000000000000000000..b1d9ae9ce3df2b2e052896fcac547ca281fea481 GIT binary patch literal 154 zcmV;L0A>Gp0V^p=O;s>7F<~$?FfcPQQP4}zEXhpI%P&f0D6_NqQYe)k+IQ#Rnp-pX zrn7%$SO-<*o0y%NmYI{vaD{*SRIbH22QFNl8}%nR$$7%xM}1H=L9UK2zOH(?DGYV# ziMjc6H@vExe%ZNo_J`TQ5%auF41hqPIKQ+gIhEnhM;Z5d<v(IsrNk{RY+JtQi2L1L I0J?TQ>Vc3;+yDRo literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/0d/b64ca2f5e06b8074c2dd445cbbd6986cb9e337 b/miscellaneous/game_theory/.notgit/objects/0d/b64ca2f5e06b8074c2dd445cbbd6986cb9e337 new file mode 100644 index 0000000000000000000000000000000000000000..0690a26aae9d49fdc341f6751b7d18d3f2cfd40e GIT binary patch literal 150 zcmV;H0BQet0gcW<4gw(zg<;p6g1w2M6k14(@hSy6(Zzrn(evwg0yp34f61$3UGLL+ zmk)DOwQ)fgh-yl>u=-Fl5;`9}QwTYdU<yL)%|kZr(>7$#QW%K1sX%K`2qhICvg+cK zD7FA><TY<&v(iVm=iTehY3E{rArl~Tv`6QiGxc|C>fZy?##q1kC{NwqGVi0C4@DI~ E;a!AB;Q#;t literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/36/2d7f214d0f1067e4e50d83d3fef9604c6732df b/miscellaneous/game_theory/.notgit/objects/36/2d7f214d0f1067e4e50d83d3fef9604c6732df new file mode 100644 index 0000000000000000000000000000000000000000..666aaf211bc0a5cc1e1d5bad89f3cb731029039b GIT binary patch literal 143 zcmV;A0C4|!0gcX03IZ_<hGEw|MfQTEZTb@s@hZtQMHe$8rQTo16S#R6FMRMV`?@|S zc&?{8%m5duO*I#>T2)YpEEy_yk{AqoG%XpEd&#hELJC;56=BPS(uf<XM)v)iO9@0> xQ^#yh-t(~!kZs@KdU!v$9NfSc&)LVq5zZJ8-SWFN?eBp*50kc<`vAReJ-`>VL2Cd2 literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/44/8a0d2d5103b3466cb42b96ac7dd8b490434678 b/miscellaneous/game_theory/.notgit/objects/44/8a0d2d5103b3466cb42b96ac7dd8b490434678 new file mode 100644 index 0000000..19d44c5 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/objects/44/8a0d2d5103b3466cb42b96ac7dd8b490434678 @@ -0,0 +1,3 @@ +x�R�j�0��_q �6R袥����6�l�2{l��`.��;R�^���H���J�nn��F�157X�>|�?��b$+e��Q���T�&��<������a9��/�__f����� +ʚ2L����=�v�jWZUw��d�' +;��[e�G�2-d-��>�T!��i=��O�_[��߾��4��~�)y�m�~���RY����0�<=@̄Q�W,����A0���{kH�B$��Uu�*���,뿟d��}"�5���������t�ds��I�^dy>����Ҕ��:��iF�pB�6�%x�J�<����Cd����.Dϓ�pO�3�P�<��Al��Nzˉ��w�Du8�f���K� ��@��%�:bS���_P�( \ No newline at end of file diff --git a/miscellaneous/game_theory/.notgit/objects/45/507b846a445ae689b1ec138423adc92eaa9aa4 b/miscellaneous/game_theory/.notgit/objects/45/507b846a445ae689b1ec138423adc92eaa9aa4 new file mode 100644 index 0000000000000000000000000000000000000000..2ae86635fd8002a1402d01898f1376f6f4166d86 GIT binary patch literal 648 zcmV;30(bp*0j*R`kJ>O0?K!_<lnNA<50RkuuzXY%-AXGVSW&hY7DXX3#A>jkI4o)_ z{(HxEoCFZJ<^aje^UQnC9&Z!A1^08``|y#nFgZp9Mk0?Ay6wdi>mo+^Whkcyav6Ci zVa~IORjspMlHfPVdU2ZCwdgWn5kJ&()=^Nl2NoQNNQ007k{DW+t~k<2c$h${>IqDR zoQWJL%VD{AoqzME_`8BJc>O+RDN86L);p&Wq#2_8j2~I#WF!c4%9)=-=60a|>9ydm z1^DR7VH{-eU_N-lGd~Zu30ZHji3UpWdb(J=JT1Sjo@Cs9>kkI&fp@Sws#JlPf1f>1 zR~x7hu0foUtVAi2JI4lSh=r=sKh$2|nB74x6^qQ>Tm`&MYiOOXq@!Jha^qp4C`I+x zq0)hxEvf5E&yjiRb|>=H!8Vd{9psfDuL4!N3JOK74x}27g%pPFz$yETp>!0QO#_8- zEp9eS`6gL$++YFiF$^>{m5@xX6K5caAaK)AZ_rIY9lqbrz1OZt6z!_ha_#sDeZ7=! zT7E&l;SuH6TAb>NKIz0+Zn>a)Mj|)_lsSg2$Z*IUIi$|~bvA1mv*i|&O!U&Di2ZF4 z{&E;OL46_}iB%T<cc?16;~6+|a4D+q5Akng=DH{7AA%CP;9|VpHew{3a#@VaD6}Oc zzFCT~%VkQ4ya8~y8UlX)z^PKxR2Z?Qo9;y3J9sR$-gR6=3L9hv`Ixj?Ku-Q17nxzu zhzg@h+`*JWLajeU5w$yP2;r>))89-|!Ia`9U}(j1{tXZLe=fiD8y*xHR_*m27aVgA i%~YN<U9j%Axse*;5gJLPJu9s;N3rNBkKsQx(a%StS2ec) literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/4a/766ad60b3d3fef52e98c9bf3207d7ffd576a50 b/miscellaneous/game_theory/.notgit/objects/4a/766ad60b3d3fef52e98c9bf3207d7ffd576a50 new file mode 100644 index 0000000000000000000000000000000000000000..03df1b4a8b0555904352c5ac561077a3915ffdea GIT binary patch literal 233 zcmV<F02cpv0cDV1Yr-%T#rK>~ai|RHiw|>qv70iAf-qJQ-%HwtH4u}KKMs+8_uaO- zA<IjWbAI>c+*Ha`m_NTfOr)+=Yy^^>;%DJzt+febzw)aOjgr-@T{2cH?mhNgH|99f zSir_g$r{)Dh2g3!=!82souaqLrTJ0d4N2eaoMeOEv0*zI*+7f$@{1TMGAH4jq=*+} z=>8BJeOo%=qY9}LybjXnGQe1Cw9vtq6gLnsI{*3%jczX0S(^XuwE^hUIuWANNF8M* j;t@|%tdJMQZoPj$tmzZ-;&bz{%@4OZx{Un*KUr+V3T}5C literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/52/08bd7a9e640ad49d0bb391f08b77244fb5f06e b/miscellaneous/game_theory/.notgit/objects/52/08bd7a9e640ad49d0bb391f08b77244fb5f06e new file mode 100644 index 0000000..2fb9c96 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/objects/52/08bd7a9e640ad49d0bb391f08b77244fb5f06e @@ -0,0 +1,2 @@ +x��K +1�a�=E��$m&mAī��a�y1v��n��ٖ������Cr������=�c�%r�H��Zm͞]`��%�qP��s��2%�*1H�Q��&�m�H�½���: OQ����є�Vӿ3鼏������@� \ No newline at end of file diff --git a/miscellaneous/game_theory/.notgit/objects/5f/30466c883f7e24c936302527644956a384a672 b/miscellaneous/game_theory/.notgit/objects/5f/30466c883f7e24c936302527644956a384a672 new file mode 100644 index 0000000000000000000000000000000000000000..d1515393ac9fb640a0e23e35eed9fed68f23fea3 GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7FlR6{FfcPQQP4}zEXhpI%P&f0D6_NqQYe)k+IQ#Rnp-pX zrn7%$SO-<*o0y%NmYI{vaD{*SRIbH22QFNl8}%nR$$7%xM|~y+K%h{ZUs{x$%5dLc b+nOu<NBu2R6q}FiF%P(8t`ZFZ23Ri6r}Z|Y literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/76/3e3cf4711a67558edcc1acda99bd6707f300ae b/miscellaneous/game_theory/.notgit/objects/76/3e3cf4711a67558edcc1acda99bd6707f300ae new file mode 100644 index 0000000000000000000000000000000000000000..4e628ffec702c45e941f92b9eb64a67308bed1bb GIT binary patch literal 58 zcmV-A0LA}!0ZYosPf{>3W6;veFD>B$l3aS}DM|4enZ+gfMU`CXiMgrqB^jwec6>>G QX;B`KpI5>K0Ns@m)gOEt3jhEB literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/7e/67616d6f9db0ea7997d343859bf09b53589e4b b/miscellaneous/game_theory/.notgit/objects/7e/67616d6f9db0ea7997d343859bf09b53589e4b new file mode 100644 index 0000000..b3e47d4 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/objects/7e/67616d6f9db0ea7997d343859bf09b53589e4b @@ -0,0 +1 @@ +x���j1���S袛�4 ]�;פ%P�����DG��4~�iZ�?`�J:�w>�Ch�����k����Y;Ac$��0FϽ�J��6��Iz�l�hS��$�v��B���.�dSN�jK7f�(�ʰ ����M�t�����zP�E��w���)��ܘ2u�(@k�f� ���'����~s�jn�о/��O_n��v��G�Tz�Ⱥ�����>�d�~̬��.�:�gV�U�-g�2���H��%O�'��).�8UV�u����ߊ�ey�w�y"����?���1��ϝ�v��?{�#��4�9�E%sf�ͦ����Ih{�GB>H@���zx��P�{�4��f"cD��#�s��/�ݠS�u{>� ]Ia��<�����X�c���`���sz� \ No newline at end of file diff --git a/miscellaneous/game_theory/.notgit/objects/82/e79c486584799299e118dc5c46fbaa6360ca62 b/miscellaneous/game_theory/.notgit/objects/82/e79c486584799299e118dc5c46fbaa6360ca62 new file mode 100644 index 0000000000000000000000000000000000000000..c2a12b5c287c24e5c26499f421ab677442e02fb0 GIT binary patch literal 118 zcmV-+0Ez#20V^p=O;s>7v|unaFfcPQQ3%LMtV}J^%P1&dc$Axc^~OsvAM@pnn?$P| zuNuF&d>*PQC^0W3KNm@@S6S9IZd?2JK`(n|e^#ii{~Mka09Bitn3<=S3^dO*pt>c? YCF)t{#y7$(%4<*Rt(vt20QV6xod@?bC;$Ke literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/91/90a0f97e1543b0b315f8100c08880dfdb5a9d8 b/miscellaneous/game_theory/.notgit/objects/91/90a0f97e1543b0b315f8100c08880dfdb5a9d8 new file mode 100644 index 0000000000000000000000000000000000000000..8d2de0115993afe36059f16d80f798192ab083e7 GIT binary patch literal 668 zcmV;N0%QGn0j*SBZ`v>v-E)4$6%!~e6p^6yp?pje>!e8ts*di3q9`P8V=dT`9g4Pz z|GsNGP7J7T%L63$p8Ii*eeX8sTL^A%!w(-ROY(h6U@Xftr`vuu^-gS*pPEX#Bd3-( zl9XIby(X^pkjKA?=x0UIa;%RrOZm?Ad3#COE3kM+WDzF>u!)i9nT%tDgzG63I-f*W z!kH|AvJxJbPm8b741ZTJfp9QDFJ(Dp#Czj3g+d@I5`526UywK{DQ8g$BItqp8D7C( z5AZRWlPnf+Z9jO<MO4PyoUAuk!~hj|JzFjx?jOIb?v=guJQxnw!*JK?=~NYB@ooNn zw%S002rS}=%_@{`^2KifwB=G~8SI?bXV&UrFHILB*qj-{&DF>|o>51+D&|(hicx{= z&rP)gjx0qGDb2C-BDk5VS0Br$j$Ke#gTe;X@Tyv<a`m7vcub@*^acF7&ID>jq0_NY zm^gNOP+B+D6~_aX(4D~0w5A=ZlXJ%rNG=In6f_5PQO}s)FBiO5u5wi6n%i=&_yKi2 zrEW`pM!n$<={qG3E~8JzaWpC`74|ZV1d;o^^c#U|DO|5PQ*&J;ePtwtT}+v8nM#2J z>Z<|w7f<u~l|3kR{6xsUF13x5Up^xTaHrW<SY7kKLv`90F2GkqPf@wS2>-@*C-f!# zLy*D^1ZeMeEg98K9hPAjg|32R7oli74bw!__Q1hxOZfQ%CsI#hCB&L;Zl-Ey;gvRg z*I8w$WKbE@W8FG{9HLhYvV&w04MwMU2U8PC4F3d4IQwq|$t43@-%erGDa8e1+sf4L zuzje1bFG>;+$-usmpA({-j^IYg}S3Ap{uvuW^H)~?L0M_)l%7OT-7|{*7^qxRN{MI CMm$RZ literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/a6/06ce514fd748090259e07dc4f166668ac288c1 b/miscellaneous/game_theory/.notgit/objects/a6/06ce514fd748090259e07dc4f166668ac288c1 new file mode 100644 index 0000000000000000000000000000000000000000..22e5b08023cb3b7ad2052685d6663214b164aa32 GIT binary patch literal 812 zcmV+{1JnF?0ku`%Z`v>r-gEwn6BAX+?|}NyQkbT$lO|QAV(p}gA`}wSSPgb$CuMBn zf8W`Tg8}t%JV0{(?(Vzqe8)27O9(D6E<b&yEJ}-*z_rZdlrB5T*gLRMerU?+njBi* zNtAOj_V#|Yhcw(0(Mhtb=2)j8i}~6;^9o7XE3j})WEMsQki^jQOvG!0gvJ;$9ZwFu zh%=c3WjRbIPxs#zH~9SsBk1>f=to&f8S&mZjUf|=S_odS*cT*>a?05v2NATueeIva zUk~tOB1cImpkZHl%EclNmnoUeF^K^x@a$$XdAOZ^eY{on+DmURm<{^tT1$s25%=Hk ze%w6HVUGwbVuxfEN|RjqHGsOD=qSCl^Z3GQE#$IiA%gjlp+7$#db^|2QLVCaD`8nt zhSeXNDg_)_vS6VkN9I}39;-(m(<sI+s9%Bld(ghFl0q4)1)0HPAdR6b@T)u{s1${> zGYf^0W4Ddcx+zv18!VwYf`Or?4-}K*gB_4m5;#d{8g!D+m_JSze3Y&{DAVn4%dz4c z)b+4*oAL|l4OdvclVammbYTv#;gt-9OcsL3BF+81!j%^8scEXYFOt4862m&A%(ta> z8?eC<BqYWe!C8eB7qI0;3kMFO5GBMH*ie~3&Y@6}=H-oV;D{21h&eEhV`kzYKof;V zSN}>C)>kXUzkj;BJGXbC+lA-n=PS5<Ct_PpJ5UK>93#nu2x96rYoL><s+M8&<}<PZ zcdhs;q%QuyK#^y=ZL~+RT(;7%mMBl20CDRezj6DdTi`4*Wmq+oyuR9H6fZ<?h(FhM z({&{ML$EPz2+-ba+7_wODz^mPC^Qu$IdMhXp_^7kEk)cnbqT+I;-b+DMvXTSaz^Lv zvD(Bqsih?;Ev2R^g8JBF?Lan*S9G%b!65b+9pVFwk}!-CQ2vmIZ$yIR_{fU&k_g}{ z$P2-wxj{B?d6VpGB}Qa4j8F*YuVDz$sS3(h)nFG?Rli&LQO&!Gg?TC`5HG}3&z@na q*_eNlu)rBP%hWWR_-+gB-ml9msHd@ML#4hQ_>#g7_xnGCtv7xt7>vyT literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/bb/900a1b32d47163430c94918816646d5ed2a61f b/miscellaneous/game_theory/.notgit/objects/bb/900a1b32d47163430c94918816646d5ed2a61f new file mode 100644 index 0000000000000000000000000000000000000000..2431ba5283d4f276a6b94a228e67e3cdd5cdc117 GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7FlR6{FfcPQQP4}zEXhpI%P&f0D6_NqQYe)k+IQ#Rnp-pX zrn7%$SO-<*o0y%NmYI{vaD{*SRIbH22QFNl8}%nR$$7%xM|~y+K%h{ZUs{x$%JAo- bjQhOuAF-@b;uaUSEnjrR{q8OR2{JG*(cCzo literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/bc/0f30b49248d80625d9f61501e5004bec1443e8 b/miscellaneous/game_theory/.notgit/objects/bc/0f30b49248d80625d9f61501e5004bec1443e8 new file mode 100644 index 0000000000000000000000000000000000000000..2bb27c9df5b09c91faa080316b679bf08f3a67aa GIT binary patch literal 121 zcmV-<0EYi~0V^p=O;s>7FlR6{FfcPQQP4}zEXhpI%P&f0D6_NqQYe)k+IQ#Rnp-pX zrn7%$SO-<*o0y%NmYI{vaD{*SRIbH22QFNl8}%nR$$7%xM|~y+K%h{ZUs{x$%Fy(D bjz?-s<)oPpCGNzy{a%%va4HD^5A!g4yZ|^& literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/d3/71ebb71667dea1dd1b63a8b249eef28ae3d417 b/miscellaneous/game_theory/.notgit/objects/d3/71ebb71667dea1dd1b63a8b249eef28ae3d417 new file mode 100644 index 0000000..5f54372 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/objects/d3/71ebb71667dea1dd1b63a8b249eef28ae3d417 @@ -0,0 +1,2 @@ +x��A +� @Ѯ=��eFǨJ��fB]D!L�� �y�ϯ�8�qx�)���p�����[��H��H%f'��K���G�u���&o�@���\�'ZDS���zSsrX-� \ No newline at end of file diff --git a/miscellaneous/game_theory/.notgit/objects/d4/0fb7950aa36cc0d0d59d5afc53624390fde28e b/miscellaneous/game_theory/.notgit/objects/d4/0fb7950aa36cc0d0d59d5afc53624390fde28e new file mode 100644 index 0000000000000000000000000000000000000000..c2dc058ebe95d32f5ece33c2c5cb963429acef87 GIT binary patch literal 76 zcmV-S0JHyi0ZYosPg1b3WXMg-%(LR+OxM;{D9$e}N>0@WiRdL46e#HCE2JmprpA|K iq~;e@#+Lx4^ML%k5-zUfoYX{+Hr=9JTxtL?)FI632PW|V literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/df/30b6acd40fc54f39642183c4bc3750d237245b b/miscellaneous/game_theory/.notgit/objects/df/30b6acd40fc54f39642183c4bc3750d237245b new file mode 100644 index 0000000000000000000000000000000000000000..f3e1fb1b24c29318251b2a82c532aece24a94777 GIT binary patch literal 118 zcmV-+0Ez#20V^p=O;s>7v|unaFfcPQQ3%LMtV}J^%P1&dc$Axc^~OsvAM@pnn?$P| zuNuF&d>*PQC^0W3KNm@@S6S9IZd?2JK`(n|e^#ii{~Mka09Bitn3<=S3^Z@zgatqA YM4dNm7X2Z>!_mR}ck9X<0Q~4OoBy>m9smFU literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/e2/6d6bd5d8e9164c37a781b2157a41d533e8d3cf b/miscellaneous/game_theory/.notgit/objects/e2/6d6bd5d8e9164c37a781b2157a41d533e8d3cf new file mode 100644 index 0000000000000000000000000000000000000000..c444c71d666927c10f52b90b6a7fc7061f65f6da GIT binary patch literal 229 zcmV<B02=>z0gaGNYXUJ4hCSz34D3Z^4~6z16%Qg?T9CSkm!3j4JF9^>3Hh){@xL2) z{Q?hmZu8E}!#i)KO$D!`w_c_is<DA`KK&_{{F7y=Q-n8xg}ueo3R2v{AA?l0#iA^h z(^Zk5+wYJ0*KC!u12_~iC__Aq8IxLg52Y4+bnU5)l~(e-z0!u(V2z^SVFEAXR+NT( z0J#wkhCpJAoxD>nM4@44R1Ji`e4R%9!O6?>y23A%n@6z8+y6KZl-7%le#0I5s6+n_ fYpgYd=`)@Z2x*}UWzao(NYP|SwQATA?1gOArX6ql literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/e3/d89504170179bdfc7d44b8dc4a6691609be854 b/miscellaneous/game_theory/.notgit/objects/e3/d89504170179bdfc7d44b8dc4a6691609be854 new file mode 100644 index 0000000000000000000000000000000000000000..a71ac7db7597bfc024cccf49759b5e113c8260a6 GIT binary patch literal 663 zcmV;I0%-ks0j*TuZ`v>r-gEwnQzoiVC?Y}IL-{dHT_;tlO2z12D2hU2h_%Fy>`=5# z{O>#4aS}j%TOJ^}`+Rrb=eyfvd;|XHQSjj-WpTDo2ux&|WOOq~XU>U@@>5eub8>2V zBXP;a%xTWK&sp@Fh(THuZp*reSi<wR&)G}LcEF;X$RdgfU=d@-F%c&Q3D+|ybUcZ! zm@`=dWhE@;FHhgXJN#Y36oTOpy_98?5$BE51PXzuQ1CrVJVBzkq@0B%2)_^Q&!7u` z9l*y#j?+lMwf*237hxG~GO}7@5(8A=)!lsle82d*yjOPjbvPQWMnUfOb*KvQ^!@SS zZn=gA;akKJi&ZFH<koWmI&!X~4D;6OD|7o;OH+mL*Jp-c-5oo}GwLW;#oTIGF)EP# zxv5s5B}?IlN^`8d@NZ`7)x$KZ;x;I#K|up*cvU4-vHDOLJO<Jjx&^P!Glg1FxVo}X zn6~WpqO@+RDvlQ{p*Mw*DNQ?6CFhPKkW3P|NN6tTBA+q8pU!_TUFE3KHQjQq_yKi2 zrEXJxLA~J?>9<lG+KfIK$I+;)RM^Wj6h!W`(rX09hLCi}NCJ68nP<63fg|Xt5%!*5 z9v{2*D%1rNAqP6xCW?P~j2xgnub#qcf&V*Hhuv}ko*HY4+6>3|H?dPckn|5h3OC@R zz1Op3R5kUn6pvBpDM)&86m6%+G!eBQaP&G7e*VCj)3a6yv7+mnnc7O&w1)30tt^!c zDuQ~fTOS~YaEFKNs2D_p(IMW!)I?&#KSmO*4L64Pl7Y={=d7xf;)<|krD{9aI@G^u xoaPN1MSbY>W&=k1lEYP@y3hn{>uvW{N8UmwON?f<RJKv8oJZVC{{RtC*x{3pNjv}m literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/objects/fc/f11c479e77f85d051a1738d0b6a7a2c447ddba b/miscellaneous/game_theory/.notgit/objects/fc/f11c479e77f85d051a1738d0b6a7a2c447ddba new file mode 100644 index 0000000000000000000000000000000000000000..cadf1345ae718917db9337770ee50c194ec3675e GIT binary patch literal 118 zcmV-+0Ez#20V^p=O;s>7v|unaFfcPQQ3%LMtV}J^%P1&daOvXJ4P@Tzma|2B+M3!M zTP8TWRX|k*CFZ5%=OU@~D$BaYZEOEN=w;9B&kD8mf5Wo^plWjyGxPM4f#xk^I~VAG Y-Gh@U@<Hv9k7;RLhdK@d0Q)sC7EnVsTL1t6 literal 0 HcmV?d00001 diff --git a/miscellaneous/game_theory/.notgit/refs/heads/master b/miscellaneous/game_theory/.notgit/refs/heads/master new file mode 100644 index 0000000..b838a61 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/refs/heads/master @@ -0,0 +1 @@ +362d7f214d0f1067e4e50d83d3fef9604c6732df diff --git a/miscellaneous/game_theory/.notgit/refs/remotes/origin/master b/miscellaneous/game_theory/.notgit/refs/remotes/origin/master new file mode 100644 index 0000000..b838a61 --- /dev/null +++ b/miscellaneous/game_theory/.notgit/refs/remotes/origin/master @@ -0,0 +1 @@ +362d7f214d0f1067e4e50d83d3fef9604c6732df diff --git a/miscellaneous/game_theory/Makefile b/miscellaneous/game_theory/Makefile new file mode 100644 index 0000000..b75ad5f --- /dev/null +++ b/miscellaneous/game_theory/Makefile @@ -0,0 +1,5 @@ +main: + g++ source/main.cpp -o game_theory_tournament -ggdb + +clean: + -rm game_theory_tournament diff --git a/miscellaneous/game_theory/README.md b/miscellaneous/game_theory/README.md new file mode 100644 index 0000000..7e67616 --- /dev/null +++ b/miscellaneous/game_theory/README.md @@ -0,0 +1,27 @@ +# Chad Game Theory Tournament + +All is based on the Prisoner's dilemma. +The tournament consists of consecutive games which consists of matches. +In each match there are 2 players. +Players must make a binary choice between `COOPERATE` and `CONFLICT`. + +Below is a table of all possible out comes: + +| Players | Action | Reward | +| :------: | :-------: | :----: | +| Player 1 | COOPERATE | 3 | +| Player 2 | COOPERATE | 3 | +| :------: | :-------: | :----: | +| Player 1 | COOPERATE | 0 | +| Player 2 | CONFLICT | 5 | +| :------: | :-------: | :----: | +| Player 1 | CONFLICT | 5 | +| Player 2 | COOPERATE | 0 | +| :------: | :-------: | :----: | +| Player 1 | CONFLICT | 1 | +| Player 2 | CONFLICT | 1 | + +The player with the most points by the end of the Tournament wins. + +To play, submit a header file with your subclass implementation of `Player`. +Comments will further aid you. diff --git a/miscellaneous/game_theory/source/Anon.hpp b/miscellaneous/game_theory/source/Anon.hpp new file mode 100644 index 0000000..24f7490 --- /dev/null +++ b/miscellaneous/game_theory/source/Anon.hpp @@ -0,0 +1,29 @@ +#include "Player.hpp" + +#include <stdlib.h> + +class Anon : public Player { + public: + Anon() { + name = "Anon"; + } + + reaction_t past[2]; + + void new_game() override { + past[0] = COOPERATE; + past[1] = COOPERATE; + } + void push_result(reaction_t opponents_last_reaction) override { + past[0] = past[1]; + past[1] = opponents_last_reaction; + } + + reaction_t play() override { + if (rand() % 20 == 0) { + return CONFLICT; + } + + return (past[0] == CONFLICT && past[1] == CONFLICT) ? CONFLICT : COOPERATE; + } +}; diff --git a/miscellaneous/game_theory/source/Anon2.hpp b/miscellaneous/game_theory/source/Anon2.hpp new file mode 100644 index 0000000..87b3a78 --- /dev/null +++ b/miscellaneous/game_theory/source/Anon2.hpp @@ -0,0 +1,27 @@ +#include "Player.hpp" + +#include <stdlib.h> + +class Anon2 : public Player { + public: + Anon2() { + name = "Anon2"; + } + + int cooperation_metter; + + void new_game() override { + cooperation_metter = 0; + } + void push_result(reaction_t opponents_last_reaction) override { + if (opponents_last_reaction == COOPERATE) { + cooperation_metter += 10; + } else { + --cooperation_metter; + } + } + + reaction_t play() override { + return (cooperation_metter > 15) ? (cooperation_metter += 2, COOPERATE) : CONFLICT; + } +}; diff --git a/miscellaneous/game_theory/source/Doomer.hpp b/miscellaneous/game_theory/source/Doomer.hpp new file mode 100644 index 0000000..02a32ab --- /dev/null +++ b/miscellaneous/game_theory/source/Doomer.hpp @@ -0,0 +1,20 @@ +#include "Player.hpp" + +#include <vector> + +class Doomer : public Player { + std::vector<reaction_t> results; + public: + Doomer() { + name = "Doomer"; + } + + void new_game() override { ; } + void push_result(reaction_t opponents_last_reaction) override { + results.push_back(opponents_last_reaction); + } + + reaction_t play() override { + return results.empty() || results.back() == CONFLICT ? CONFLICT : COOPERATE; + } +}; diff --git a/miscellaneous/game_theory/source/Player.hpp b/miscellaneous/game_theory/source/Player.hpp new file mode 100644 index 0000000..448a0d2 --- /dev/null +++ b/miscellaneous/game_theory/source/Player.hpp @@ -0,0 +1,31 @@ +#ifndef PLAYER_H +#define PLAYER_H + +typedef enum { + COOPERATE, + CONFLICT, +} reaction_t; + +class Player { + public: + /* Gathered points during the game are stored internally + */ + long points = 0; + /* This is for logging the game + */ + const char * name; + /* Called before facing a new opponent + */ + virtual void new_game() = 0; + /* Called during a match; + * the return value is your response + */ + virtual reaction_t play() = 0; + /* Called after the match; + * the argument signals what your opponent played; + * you may use/store this information as you wish + */ + virtual void push_result(reaction_t opponents_last_reaction) = 0; +}; + +#endif diff --git a/miscellaneous/game_theory/source/Profiteer.hpp b/miscellaneous/game_theory/source/Profiteer.hpp new file mode 100644 index 0000000..506780e --- /dev/null +++ b/miscellaneous/game_theory/source/Profiteer.hpp @@ -0,0 +1,15 @@ +#include "Player.hpp" + +class Profiteer : public Player { + public: + Profiteer() { + name = "Profiteer"; + } + + void new_game() override { ; } + void push_result(reaction_t opponents_last_reaction) override { ; } + + reaction_t play() override { + return CONFLICT; + } +}; diff --git a/miscellaneous/game_theory/source/RandomPlayer.hpp b/miscellaneous/game_theory/source/RandomPlayer.hpp new file mode 100644 index 0000000..4a766ad --- /dev/null +++ b/miscellaneous/game_theory/source/RandomPlayer.hpp @@ -0,0 +1,17 @@ +#include "Player.hpp" + +#include <stdlib.h> + +class RandomPlayer : public Player { + public: + RandomPlayer() { + name = "Randy"; + } + + void new_game() override { ; } + void push_result(reaction_t opponents_last_reaction) override { ; } + + reaction_t play() override { + return (rand() % 2) ? COOPERATE : CONFLICT; + } +}; diff --git a/miscellaneous/game_theory/source/Roomer.hpp b/miscellaneous/game_theory/source/Roomer.hpp new file mode 100644 index 0000000..e850c3a --- /dev/null +++ b/miscellaneous/game_theory/source/Roomer.hpp @@ -0,0 +1,16 @@ +#include "Player.hpp" + +class Roomer : public Player { + public: + Roomer() { + name = "Roomer"; + } + + void new_game() override { ; } + void push_result(reaction_t opponents_last_reaction) override { ; } + + reaction_t play() override { + int feeling_like_it; + return (reaction_t)(feeling_like_it & (int)CONFLICT); + } +}; diff --git a/miscellaneous/game_theory/source/Segv.hpp b/miscellaneous/game_theory/source/Segv.hpp new file mode 100644 index 0000000..59856f3 --- /dev/null +++ b/miscellaneous/game_theory/source/Segv.hpp @@ -0,0 +1,17 @@ +#include "Player.hpp" + +class Segv : public Player { + public: + Segv() { + name = "SEGV"; + } + + void new_game() override { ; } + void push_result(reaction_t opponents_last_reaction) override { ; } + + reaction_t play() override { + extern int main(); + void * p = (void *)main; + return (reaction_t)((int)(((char *)main)[rand() % 32] % 2) & (int)CONFLICT); + } +}; diff --git a/miscellaneous/game_theory/source/main.cpp b/miscellaneous/game_theory/source/main.cpp new file mode 100644 index 0000000..4c4e1d0 --- /dev/null +++ b/miscellaneous/game_theory/source/main.cpp @@ -0,0 +1,86 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> +#include <vector> + +#include "Player.hpp" +#include "RandomPlayer.hpp" +#include "Doomer.hpp" +#include "Roomer.hpp" +#include "Profiteer.hpp" +#include "Segv.hpp" +#include "Anon.hpp" +#include "Anon2.hpp" + +using namespace std; + +vector<Player *> players; +const int ROUND_COUNT = 200; + +inline +void print_round(reaction_t r1, reaction_t r2) { + const char * const color_table[] = { + [COOPERATE] = "\033[32m", + [CONFLICT] = "\033[31m", + }; + + printf(" %sO\033[0m %sO\033[0m\n", color_table[r1], color_table[r2]); +} + +inline +void play_round(Player * const p1, Player * const p2) { + reaction_t p1_play = p1->play(); + reaction_t p2_play = p2->play(); + + print_round(p1_play, p2_play); + + if (p1_play == COOPERATE && p2_play == COOPERATE) { + p1->points += 3; + p2->points += 3; + } else if (p1_play == CONFLICT && p2_play == CONFLICT) { + p1->points += 1; + p2->points += 1; + } else { + Player * const pw = (p1_play == CONFLICT) ? p1 : p2; + pw->points += 5; + } + + p1->push_result(p2_play); + p2->push_result(p1_play); +} + +signed main() { + /* we seed, rand for you, in case you wish to use it, + * please do not re seed it + */ + srand(time(NULL)); + + // YYY: Every player is added here + players.push_back(new RandomPlayer()); + players.push_back(new Doomer()); + players.push_back(new Roomer()); + players.push_back(new Profiteer()); + players.push_back(new Segv()); + players.push_back(new Anon2()); + // -- + + /* Every players playes with every player exactly once + */ + for (int i = 0; i < players.size() - 1; i++) { + for (int h = i + 1; h < players.size(); h++) { + printf("%s VS %s\n", players[i]->name, players[h]->name); + players[i]->new_game(); + players[h]->new_game(); + /* Each game takes some number of turns + */ + for (int c = 0; c < ROUND_COUNT; c++) { + play_round(players[i], players[h]); + } + } + } + + // Results + for (const auto &p : players) { + printf("%s: %ld\n", p->name, p->points); + } +}