Cody

# Problem 653. Steal, Share, or Catch: Tournament of Champions

Solution 323788

Submitted on 26 Sep 2013 by Jan Orwat
• Size: 29
• This is the leading solution.
This solution is locked. To view this solution, you need to provide a solution of the same size or smaller.

### Test Suite

Test Status Code Input and Output
1   Pass
% THIS IS A HACK TO GET CODE ON THE PATH % IGNORE THIS FIRST 'TEST' % % fh=fopen('doug.m','wt'); fprintf(fh, '%s \n', 'function out = doug(histA, histB)'); fprintf(fh, '%s \n', '% A is self'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2;'); fprintf(fh, '%s \n', '%catchVal = 2;'); fprintf(fh, '%s \n', '%shareVal = 1;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'memoryThresh = 10;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'histB = [zeros(memoryThresh,1); histB];'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'recentB = histB(end-(memoryThresh-1) : end);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'numStealB = nnz(recentB == -1);'); fprintf(fh, '%s \n', 'numShareB = nnz(recentB == 0);'); fprintf(fh, '%s \n', 'numCatchB = nnz(recentB == 1);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'percentStealB = (numStealB/memoryThresh);'); fprintf(fh, '%s \n', 'percentShareB = (numShareB/memoryThresh);'); fprintf(fh, '%s \n', 'percentCatchB = (numCatchB/memoryThresh);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'out = 0; %default to share'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ' rollDice = rand;'); fprintf(fh, '%s \n', 'percentCatchStealers = 0.9;'); fprintf(fh, '%s \n', 'if (rollDice < percentStealB)'); fprintf(fh, '%s \n', ' rollDice = rand;'); fprintf(fh, '%s \n', ' if (rollDice < percentCatchStealers)'); fprintf(fh, '%s \n', ' out = 1; % catch'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' out = -1; % steal'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', 'end'); fclose(fh);

2   Pass
%% fh=fopen('runPair.m','wt'); fprintf(fh, '%s \n', 'function [scoreA, scoreB] = runPair(fhA, fhB);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'n = 10000;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'histA = [];'); fprintf(fh, '%s \n', 'histB = [];'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'scoreA = 0;'); fprintf(fh, '%s \n', 'scoreB = 0;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'stealVal = 2;'); fprintf(fh, '%s \n', 'catchVal = 2;'); fprintf(fh, '%s \n', 'shareVal = 1;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'for i = 1: n;'); fprintf(fh, '%s \n', ' histA(end+1,1) = fhA(histA, histB );'); fprintf(fh, '%s \n', ' histB(end+1,1) = fhB(histB, histA(1:end-1)); %modified one not sent!'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ' switch histA(end)'); fprintf(fh, '%s \n', ' case -1 %a steal'); fprintf(fh, '%s \n', ' switch histB(end)'); fprintf(fh, '%s \n', ' case -1 %b steal'); fprintf(fh, '%s \n', ' scoreA = scoreA;'); fprintf(fh, '%s \n', ' scoreB = scoreB;'); fprintf(fh, '%s \n', ' case 0 %b share'); fprintf(fh, '%s \n', ' scoreA = scoreA + stealVal;'); fprintf(fh, '%s \n', ' scoreB = scoreB;'); fprintf(fh, '%s \n', ' case 1 %b catch'); fprintf(fh, '%s \n', ' scoreA = scoreA;'); fprintf(fh, '%s \n', ' scoreB = scoreB + catchVal;'); fprintf(fh, '%s \n', ' otherwise'); fprintf(fh, '%s \n', ' error(''This can not happen'') '); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' case 0 %a share'); fprintf(fh, '%s \n', ' switch histB(end)'); fprintf(fh, '%s \n', ' case -1 %b steal'); fprintf(fh, '%s \n', ' scoreA = scoreA;'); fprintf(fh, '%s \n', ' scoreB = scoreB + stealVal;'); fprintf(fh, '%s \n', ' case 0 %b share'); fprintf(fh, '%s \n', ' scoreA = scoreA + shareVal;'); fprintf(fh, '%s \n', ' scoreB = scoreB + shareVal;'); fprintf(fh, '%s \n', ' case 1 %b catch'); fprintf(fh, '%s \n', ' scoreA = scoreA;'); fprintf(fh, '%s \n', ' scoreB = scoreB;'); fprintf(fh, '%s \n', ' otherwise'); fprintf(fh, '%s \n', ' error(''This can not happen'')'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' case 1 %a catch'); fprintf(fh, '%s \n', ' switch histB(end)'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ' case -1 %b steal'); fprintf(fh, '%s \n', ' scoreA = scoreA + catchVal;'); fprintf(fh, '%s \n', ' scoreB = scoreB;'); fprintf(fh, '%s \n', ' case 0 %b share'); fprintf(fh, '%s \n', ' scoreA = scoreA;'); fprintf(fh, '%s \n', ' scoreB = scoreB;'); fprintf(fh, '%s \n', ' case 1 %b catch'); fprintf(fh, '%s \n', ' scoreA = scoreA;'); fprintf(fh, '%s \n', ' scoreB = scoreB;'); fprintf(fh, '%s \n', ' otherwise'); fprintf(fh, '%s \n', ' error(''This can not happen'')'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' otherwise'); fprintf(fh, '%s \n', ' error(''This can not happen'')'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ''); fclose(fh);

3   Pass
%% fh=fopen('evil.m','wt'); fprintf(fh, '%s \n', 'function out = evil(histA, histB)'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2;'); fprintf(fh, '%s \n', '%catchVal = 2;'); fprintf(fh, '%s \n', '%shareVal = 1;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'out = -1;'); fclose(fh);

4   Pass
%% fh=fopen('good.m','wt'); fprintf(fh, '%s \n', 'function out = good(histA, histB)'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2;'); fprintf(fh, '%s \n', '%catchVal = 2;'); fprintf(fh, '%s \n', '%shareVal = 1;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'out = 0;'); fclose(fh);

5   Pass
%% fh=fopen('chaos.m','wt'); fprintf(fh, '%s \n', 'function out = chaos(histA, histB)'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2;'); fprintf(fh, '%s \n', '%catchVal = 2;'); fprintf(fh, '%s \n', '%shareVal = 1;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'out = ceil(rand*3)-2;'); fclose(fh);

6   Pass
%% fh=fopen('sean.m','wt'); fprintf(fh, '%s \n', 'function choice = sean(yourHist, theirHist)'); fprintf(fh, '%s \n', ' if isempty(theirHist)'); fprintf(fh, '%s \n', ' [~,choice] = histc(rand,0:0.33:1);'); fprintf(fh, '%s \n', ' choice = choice-2;'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' [~, idx] = max(histc(theirHist,[-1 0 1]));'); fprintf(fh, '%s \n', ' choice = [1 0 -1];'); fprintf(fh, '%s \n', ' choice = choice(idx);'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', 'end'); fclose(fh);

7   Pass
%% fh=fopen('vincent.m','wt'); fprintf(fh, '%s \n', 'function choice = vincent(yourHist, theirHist)'); fprintf(fh, '%s \n', '% This function will be called 10,000 times.'); fprintf(fh, '%s \n', '% the hist vectors will start as [], and get longer each time through.'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2; What you get if you steal and they share'); fprintf(fh, '%s \n', '%catchVal = 2; What you get if you catch and they steal'); fprintf(fh, '%s \n', '%shareVal = 1; What you both get if both share'); fprintf(fh, '%s \n', '%Otherwise no one gets anything!'); fprintf(fh, '%s \n', 'if all(theirHist == -1)'); fprintf(fh, '%s \n', 'choice = 1;'); fprintf(fh, '%s \n', 'elseif all(theirHist == 0);'); fprintf(fh, '%s \n', 'choice = -1;'); fprintf(fh, '%s \n', 'elseif all(theirHist == 1);'); fprintf(fh, '%s \n', 'choice = 1;'); fprintf(fh, '%s \n', 'else'); fprintf(fh, '%s \n', 'choice = 0;'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', 'end'); fclose(fh);

8   Pass
%% fh=fopen('james.m','wt'); fprintf(fh, '%s \n', 'function choice = james(yourHist, theirHist)'); fprintf(fh, '%s \n', '% This function will be called 10,000 times.'); fprintf(fh, '%s \n', '% the hist vectors will start as [], and get longer each time through.'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2; What you get if you steal and they share'); fprintf(fh, '%s \n', '%catchVal = 2; What you get if you catch and they steal'); fprintf(fh, '%s \n', '%shareVal = 1; What you both get if both share'); fprintf(fh, '%s \n', '%Otherwise no one gets anything!'); fprintf(fh, '%s \n', 'if(length(theirHist)<2)'); fprintf(fh, '%s \n', ' choice = 0;'); fprintf(fh, '%s \n', 'elseif( theirHist(end-1:end) == -1 )'); fprintf(fh, '%s \n', ' choice = 1;'); fprintf(fh, '%s \n', 'else'); fprintf(fh, '%s \n', ' choice = theirHist(end);'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', 'end'); fclose(fh);

9   Pass
%% fh=fopen('dougExploiter.m','wt'); fprintf(fh, '%s \n', 'function out = dougExploiter(myHist, theirHist)'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'threshID = 3;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'if numel(myHist) < threshID'); fprintf(fh, '%s \n', ' out = 0;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'if isGood(theirHist)'); fprintf(fh, '%s \n', ' out = -1;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'elseif isEvil(theirHist)'); fprintf(fh, '%s \n', ' out = 1;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', 'elseif isTitForTat(myHist, theirHist)'); fprintf(fh, '%s \n', ' switch myHist(end)'); fprintf(fh, '%s \n', ' case -1 %I stole so he wil steal'); fprintf(fh, '%s \n', ' out = 1; %catch'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' case 0 %I shared so he will share'); fprintf(fh, '%s \n', ' out = -1;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' case 1 %I caught so he will catch'); fprintf(fh, '%s \n', ' out = 0; %Induce a share'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', 'elseif isChaos(theirHist)'); fprintf(fh, '%s \n', ' out = 1;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', 'else %general unexploitable strategy'); fprintf(fh, '%s \n', ' out = dougGeneral(myHist, theirHist);'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'function flag = isGood(in)'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'flag = all(in == 0);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'function flag = isEvil(in)'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'flag = all(in == -1);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'function flag = isTitForTat(myHist, theirHist)'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'window = 4;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'if numel(myHist) < window'); fprintf(fh, '%s \n', ' flag = false;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', 'else'); fprintf(fh, '%s \n', ' theirRecent = theirHist(end-(window-1):end);'); fprintf(fh, '%s \n', ' myRecent = myHist(end-(window-1):end);'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' flag = isequal(myRecent(1:end-1), theirRecent(2:end));'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'function flag = isChaos(theirHist)'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'num = numel(theirHist);'); fprintf(fh, '%s \n', 'perShare = nnz(theirHist == 0)/num;'); fprintf(fh, '%s \n', 'perSteal = nnz(theirHist == -1)/num;'); fprintf(fh, '%s \n', 'perCatch = nnz(theirHist == 1)/num;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'thresh = 0.05;'); fprintf(fh, '%s \n', 'target = 0.33;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'difference = [perShare perSteal perCatch] - target;'); fprintf(fh, '%s \n', 'flag = all(abs(difference) < thresh);'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', 'function out = dougGeneral(histA, histB)'); fprintf(fh, '%s \n', 'memoryThresh = 10;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'histB = [zeros(memoryThresh,1); histB];'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'recentB = histB(end-(memoryThresh-1) : end);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'numStealB = nnz(recentB == -1);'); fprintf(fh, '%s \n', 'numShareB = nnz(recentB == 0);'); fprintf(fh, '%s \n', 'numCatchB = nnz(recentB == 1);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'percentStealB = (numStealB/memoryThresh);'); fprintf(fh, '%s \n', 'percentShareB = (numShareB/memoryThresh);'); fprintf(fh, '%s \n', 'percentCatchB = (numCatchB/memoryThresh);'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'out = 0; %default to share'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ' rollDice = rand;'); fprintf(fh, '%s \n', 'percentCatchStealers = 0.9;'); fprintf(fh, '%s \n', 'if (rollDice < percentStealB)'); fprintf(fh, '%s \n', ' rollDice = rand;'); fprintf(fh, '%s \n', ' if (rollDice < percentCatchStealers)'); fprintf(fh, '%s \n', ' out = 1; % catch'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' out = -1; % steal'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ' '); fclose(fh);

10   Pass
%% fh=fopen('JamesE.m','wt'); fprintf(fh, '%s \n', 'function choice = jamesE(yourHist, theirHist)'); fprintf(fh, '%s \n', '% This function will be called 10,000 times.'); fprintf(fh, '%s \n', '% the hist vectors will start as [], and get longer each time through.'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2; What you get if you steal and they share'); fprintf(fh, '%s \n', '%catchVal = 2; What you get if you catch and they steal'); fprintf(fh, '%s \n', '%shareVal = 1; What you both get if both share'); fprintf(fh, '%s \n', '%Otherwise no one gets anything!'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'if length(theirHist)>10'); fprintf(fh, '%s \n', ' [yourguess yourcounts]=hist(theirHist(end-9:end),-1:1);'); fprintf(fh, '%s \n', ' [countmax countval]=max(yourguess);'); fprintf(fh, '%s \n', ' yourpopguess=yourcounts(countval);'); fprintf(fh, '%s \n', ' if yourpopguess==-1'); fprintf(fh, '%s \n', ' choice=1;'); fprintf(fh, '%s \n', ' elseif yourpopguess==0'); fprintf(fh, '%s \n', ' choice=-1;'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' choice=floor(3*rand)-1;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', 'else'); fprintf(fh, '%s \n', ' choice=floor(3*rand)-1;'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'end'); fclose(fh);

11   Pass
%% fh=fopen('philipp.m','wt'); fprintf(fh, '%s \n', 'function choice = philipp(yourHist, theirHist)'); fprintf(fh, '%s \n', '% This function will be called 10,000 times.'); fprintf(fh, '%s \n', '% the hist vectors will start as [], and get longer each time through.'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2; What you get if you steal and they share'); fprintf(fh, '%s \n', '%catchVal = 2; What you get if you catch and they steal'); fprintf(fh, '%s \n', '%shareVal = 1; What you both get if both share'); fprintf(fh, '%s \n', '%Otherwise no one gets anything!'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'histLength = numel(theirHist);'); fprintf(fh, '%s \n', 'window = histLength-1;'); fprintf(fh, '%s \n', 'if histLength > 10'); fprintf(fh, '%s \n', ' window = randi([5 10]);'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', ' if isempty(yourHist)'); fprintf(fh, '%s \n', ' % No choices made yet'); fprintf(fh, '%s \n', ' choice = randi([-1 1]);'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' switch mode(theirHist(end-window:end))'); fprintf(fh, '%s \n', ' case -1'); fprintf(fh, '%s \n', ' choice = 1;'); fprintf(fh, '%s \n', ' case 0'); fprintf(fh, '%s \n', ' choice = -1;'); fprintf(fh, '%s \n', ' case 1'); fprintf(fh, '%s \n', ' choice = randi([0 1]);'); fprintf(fh, '%s \n', ' otherwise'); fprintf(fh, '%s \n', ' choice = 0;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' end'); fclose(fh);

12   Pass
%% fh=fopen('bert.m','wt'); fprintf(fh, '%s \n', 'function choice = bert(yourHist, theirHist)'); fprintf(fh, '%s \n', '% This function will be called 10,000 times.'); fprintf(fh, '%s \n', '% the hist vectors will start as [], and get longer each time through.'); fprintf(fh, '%s \n', '%-1 steal'); fprintf(fh, '%s \n', '% 0 share'); fprintf(fh, '%s \n', '% 1 catch'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', '%stealVal = 2; What you get if you steal and they share'); fprintf(fh, '%s \n', '%catchVal = 2; What you get if you catch and they steal'); fprintf(fh, '%s \n', '%shareVal = 1; What you both get if both share'); fprintf(fh, '%s \n', '%Otherwise no one gets anything!'); fprintf(fh, '%s \n', 'choice = -1;'); fprintf(fh, '%s \n', ''); fprintf(fh, '%s \n', 'if numel(theirHist)>2'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' %check for tit4Tat stratagy'); fprintf(fh, '%s \n', ' isTit4Tat = isequal(yourHist(end-2:end-1), theirHist(end-1:end));'); fprintf(fh, '%s \n', ' count=histc(theirHist,-1:1);'); fprintf(fh, '%s \n', ' stealPercent = count(1)/numel(theirHist);'); fprintf(fh, '%s \n', ' sharePercent = count(2)/numel(theirHist);'); fprintf(fh, '%s \n', ' catPercent = count(3)/numel(theirHist);'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' choice = -theirHist(end); %general behavior '); fprintf(fh, '%s \n', ' if isTit4Tat %check for tit4tat'); fprintf(fh, '%s \n', ' switch yourHist(end)'); fprintf(fh, '%s \n', ' case -1 %he wil steal'); fprintf(fh, '%s \n', ' choice = 1; %catch'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' case 0 %he will share'); fprintf(fh, '%s \n', ' choice = -1;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' case 1 %he will catch'); fprintf(fh, '%s \n', ' choice = 0;'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' if choice == -1 %dont steal if the last was catch'); fprintf(fh, '%s \n', ' choice = 0;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' if rand(1)>0.9 %random behavior to pass exploiters test'); fprintf(fh, '%s \n', ' choice = 0;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' if stealPercent > 0.7 %if they steal often, I catch '); fprintf(fh, '%s \n', ' choice = 1;'); fprintf(fh, '%s \n', ' elseif sharePercent >0.7 %if they share often, I steal'); fprintf(fh, '%s \n', ' choice = -1;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' if numel(theirHist)>9000 %for the last 1000 round, steal'); fprintf(fh, '%s \n', ' choice = 1;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', 'end'); fprintf(fh, '%s \n', 'end'); fclose(fh);

13   Pass
%% fh=fopen('amro.m','wt'); fprintf(fh, '%s \n', 'function out = amro(histA, histB)'); fprintf(fh, '%s \n', ' % This function will be called 10,000 times.'); fprintf(fh, '%s \n', ' % the hist vectors will start as [], and get longer each time through.'); fprintf(fh, '%s \n', ' %-1 steal'); fprintf(fh, '%s \n', ' % 0 share'); fprintf(fh, '%s \n', ' % 1 catch'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' if rand<0.01 || isempty(histB) % if starting (or flipCoin)'); fprintf(fh, '%s \n', ' % flipCoin: random move or "share"'); fprintf(fh, '%s \n', ' if rand<0.925'); fprintf(fh, '%s \n', ' out = randi([-1 1]);'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' out = -1;'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' elseif rand<0.01 % flipCoin'); fprintf(fh, '%s \n', ' % repeat his last move'); fprintf(fh, '%s \n', ' out = histB(end);'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' % in the first/last X moves (+flipCoin)'); fprintf(fh, '%s \n', ' if rand < 0.4 && numel(histB)>9900'); fprintf(fh, '%s \n', ' out = 1; % catch'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' if rand < 0.1 && numel(histB)<15'); fprintf(fh, '%s \n', ' out = 1; % catch'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' % check if player B has been repeating my moves (tit4tat)'); fprintf(fh, '%s \n', ' n = 2;'); fprintf(fh, '%s \n', ' if rand < 0.9 && numel(histA)>n'); fprintf(fh, '%s \n', ' if isequal(histA(end-n:end-1), histB(end-n+1:end))'); fprintf(fh, '%s \n', ' % predict his next move based on my previous move'); fprintf(fh, '%s \n', ' out = [1 -1 0];'); fprintf(fh, '%s \n', ' out = out( histB(end)+2 );'); fprintf(fh, '%s \n', ' return'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' % frequency of moves over entire history of player B'); fprintf(fh, '%s \n', ' freq = histc(histB,-1:1) ./ numel(histB);'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' % flipCoin: all history or last N only'); fprintf(fh, '%s \n', ' maxNum = randi([7 10]);'); fprintf(fh, '%s \n', ' if rand<0.98 && numel(histB)>maxNum'); fprintf(fh, '%s \n', ' histB = histB(end-maxNum+1:end);'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' % most frequent move in possibly filtered history'); fprintf(fh, '%s \n', ' %idx = mode(histB)+2;'); fprintf(fh, '%s \n', ' [~,idx] = max( histc(histB,-1:1) );'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' % counter move'); fprintf(fh, '%s \n', ' out = [1 0 0]; % steal->catch, share->share, catch->share'); fprintf(fh, '%s \n', ' if freq(2)>0.7 && rand<0.995, out(2) = -1; end % adjust if he shares alot'); fprintf(fh, '%s \n', ' if freq(1)>0.7 && rand<0.995, out(3) = 1; end % adjust if he catches alot'); fprintf(fh, '%s \n', ' %{'); fprintf(fh, '%s \n', ' if rand < freq(1)'); fprintf(fh, '%s \n', ' out = [1 0 1]; % steal->catch, share->share, catch->catch'); fprintf(fh, '%s \n', ' elseif rand < freq(2)'); fprintf(fh, '%s \n', ' out = [1 -1 0]; % steal->catch, share->steal, catch->share'); fprintf(fh, '%s \n', ' else'); fprintf(fh, '%s \n', ' out = [1 0 randi([0 1])]; % steal->catch, share->steal, catch->random'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' %}'); fprintf(fh, '%s \n', ' out = out(idx);'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' '); fprintf(fh, '%s \n', ' % check if I am repeating myself in the last N moves'); fprintf(fh, '%s \n', ' %{'); fprintf(fh, '%s \n', ' n = 50;'); fprintf(fh, '%s \n', ' if numel(histA)>=n && all(histA(end-n+1:end)==out)'); fprintf(fh, '%s \n', ' out = randi([0 1]);'); fprintf(fh, '%s \n', ' end'); fprintf(fh, '%s \n', ' %}'); fprintf(fh, '%s \n', 'end'); fclose(fh);

14   Pass
%% rehash path

[Warning: Function license has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7] [Warning: Function mex has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7] [Warning: Function home has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7] [Warning: Function keyboard has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7] [Warning: Function more has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7] [Warning: Function pause has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7] [Warning: Function simulink has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.] [> In verifyCode>evaluateCode at 231 In verifyCode at 40 In fevalJSON at 14 In workspacefunc at 7]

15   Fail
%% fh = @StealShareCatch; a = runPair(fh, @chaos) a(end+1) = runPair(fh, @evil) a(end+1) = runPair(fh, @StealShareCatch) a(end+1) = runPair(fh, @good) a(end+1) = runPair(fh, @doug) a(end+1) = runPair(fh, @sean) a(end+1) = runPair(fh, @james) a(end+1) = runPair(fh, @vincent) a(end+1) = runPair(fh, @JamesE) a(end+1) = runPair(fh, @philipp) a(end+1) = runPair(fh, @bert) a(end+1) = runPair(fh, @amro) yourScore = sum(a) Score = 0; % works Score = 80219; % Vincent Score = 84000; % Sean Score = 93000; % james Score = 104000; % doug Score = 118000; % JamesE Score = 120000; % stealShareCatch Score = 122000; % philipp Score = 125000; % bert Score = 135000; % amro assert(yourScore > Score(end), 'Score: %d', yourScore)

a = 5470 a = 5470 20000 a = 5470 20000 3333 a = 5470 20000 3333 19994 a = 5470 20000 3333 19994 7518 a = 5470 20000 3333 19994 7518 19996 a = 5470 20000 3333 19994 7518 19996 13321 a = 5470 20000 3333 19994 7518 19996 13321 19989 a = Columns 1 through 8 5470 20000 3333 19994 7518 19996 13321 19989 Column 9 7090 a = Columns 1 through 8 5470 20000 3333 19994 7518 19996 13321 19989 Columns 9 through 10 7090 6699 a = Columns 1 through 8 5470 20000 3333 19994 7518 19996 13321 19989 Columns 9 through 11 7090 6699 6597 a = Columns 1 through 8 5470 20000 3333 19994 7518 19996 13321