Prisoner’s Dilemma (with visible source code) Tournament

After the iter­ated pris­oner’s dilemma tour­na­ment or­ga­nized by prase two years ago, there was dis­cus­sion of run­ning tour­na­ments for sev­eral var­i­ants, in­clud­ing one in which two play­ers sub­mit pro­grams, each of which are given the source code of the other player’s pro­gram, and out­puts ei­ther “co­op­er­ate” or “defect”. How­ever, as far as I know, no such tour­na­ment has been run un­til now.

Here’s how it’s go­ing to work: Each player will sub­mit a file con­tain­ing a sin­gle Scheme lambda-func­tion. The func­tion should take one in­put. Your pro­gram will play ex­actly one round against each other pro­gram sub­mit­ted (not in­clud­ing it­self). In each round, two pro­grams will be run, each given the source code of the other as in­put, and will be ex­pected to re­turn ei­ther of the sym­bols “C” or “D” (for “co­op­er­ate” and “defect”, re­spec­tively). The pro­grams will re­ceive points based on the fol­low­ing pay­off ma­trix:

“Other” in­cludes any re­sult other than re­turn­ing “C” or “D”, in­clud­ing failing to ter­mi­nate, throw­ing an ex­cep­tion, and even re­turn­ing the string “Co­op­er­ate”. No­tice that “Other” re­sults in a worst-of-both-wor­lds sce­nario where you get the same pay­off as you would have if you co­op­er­ated, but the other player gets the same pay­off as if you had defected. This is an at­tempt to en­sure that no one ever has in­cen­tive for their pro­gram to fail to run prop­erly, or to trick an­other pro­gram into do­ing so.

Your score is the sum of the num­ber of points you earn in each round. The player with the high­est score wins the tour­na­ment. Edit: There is a 0.5 bit­coin prize be­ing offered for the win­ner. Thanks, Vin­cen­tYu!

All sub­mis­sions must be emailed to war­ by July 5, at noon PDT (Edit: that’s 19:00 UTC). Your email should also say how you would like to be iden­ti­fied when I an­nounce the tour­na­ment re­sults.
Each pro­gram will be al­lowed to run for 10 sec­onds. If it has not re­turned ei­ther “C” or “D” by then, it will be stopped, and treated as re­turn­ing “Other”. For con­sis­tency, I will have Scheme col­lect garbage right be­fore each run.
One sub­mis­sion per per­son or team. No per­son may con­tribute to more than one en­try. Edit: This also means no copy­ing from each oth­ers’ source code. De­scribing the be­hav­ior of your pro­gram to oth­ers is okay.
I will be run­ning the sub­mis­sions in Racket. You may be in­ter­ested in how Racket han­dles time (es­pe­cially the (cur­rent-mil­lisec­onds) func­tion), threads (in par­tic­u­lar, “thread”, “kill-thread”, “sleep”, and “thread-dead?”), and pos­si­bly ran­dom­ness.
Don’t try to open the file you wrote your pro­gram in (or any other file, for that mat­ter). I’ll add code to the file be­fore run­ning it, so if you want your pro­gram to use a copy of your source code, you will need to use a quine. Edit: No I/​O of any sort.
Un­less you tell me oth­er­wise, I as­sume I have per­mis­sion to pub­lish your code af­ter the con­test.
You are en­couraged to dis­cuss strate­gies for achiev­ing mu­tual co­op­er­a­tion in the com­ments thread.
I’m hop­ing to get as many en­tries as pos­si­ble. If you know some­one who might be in­ter­ested in this, please tell them.
It’s pos­si­ble that I’ve said some­thing stupid that I’ll have to change or clar­ify, so you might want to come back to this page again oc­ca­sion­ally to look for changes to the rules. Any ed­its will be bolded, and I’ll try not to change any­thing too dras­ti­cally, or make any ed­its late in the con­test.

Here is an ex­am­ple of a cor­rect en­try, which co­op­er­ates with you if and only if you would co­op­er­ate with a pro­gram that always co­op­er­ates (ac­tu­ally, if and only if you would co­op­er­ate with one par­tic­u­lar pro­gram that always co­op­er­ates):

(lambda (x)
(if (eq? ((eval x) ’(lambda (y) ’C)) ’C)