DNA werfer 7 (ambidextrous)

This program has been disqualified.


Authordllu
Submission date2011-06-18 20:13:36.325480
Rating7354
Matches played639
Win rate74.02

Source code:

#DNA werfer 7: This werfs DNA! 
#-- inspired by Darwin v1 by blackadder.

import random

number_of_predictors = 216

predictors=range(number_of_predictors)

for i in range(number_of_predictors):
	predictors[i]=random.choice(['R','P','S'])

if not input:
	limits = [32,12,6]
	beat={'R':'P','P':'S','S':'R'}
	urmoves=""
	mymoves=""
	mymoves2 = ""
	DNAmoves=""
	DNAmoves2=""
	output=random.choice(['R','P','S'])
	output2 = output
	predictorscore=range(number_of_predictors)
	nuclease={'RP':'a','PS':'b','SR':'c','PR':'d','SP':'e','RS':'f','RR':'g','PP':'h','SS':'i'}
	length=0
else:
	for i in range(number_of_predictors):
		predictorscore[i]*=0.8
		predictorscore[i]+=(input==oldpredictors[i])*3
		predictorscore[i]-=(input=={'R':'S', 'P':'R', 'S':'P'}[oldpredictors[i]])*3
	
	#History matching
	urmoves+=input		
	mymoves+=output
	mymoves2+=output2
	DNAmoves+=nuclease[input+output]
	DNAmoves2+=nuclease[input+output2]
	length+=1
	
	for z in range(3):
		limit = min([length,limits[z]])
		j=limit
		while j>=1 and not DNAmoves[length-j:length] in DNAmoves[0:length-1]:
			j-=1
		if j>=1:
			i = DNAmoves.rfind(DNAmoves[length-j:length],0,length-1)
			predictors[0+12*z] = urmoves[j+i]
			predictors[1+12*z] = beat[mymoves[j+i]]
			i = DNAmoves.find(DNAmoves[length-j:length],0,length-1)
			predictors[12+12*z] = urmoves[j+i]
			predictors[13+12*z] = beat[mymoves[j+i]]
		j=limit			
		while j>=1 and not urmoves[length-j:length] in urmoves[0:length-1]:
			j-=1
		if j>=1:
			i = urmoves.rfind(urmoves[length-j:length],0,length-1) 
			predictors[3+12*z] = urmoves[j+i] 
			predictors[4+12*z] = beat[mymoves[j+i]] 
			i = urmoves.find(urmoves[length-j:length],0,length-1) 
			predictors[14+12*z] = urmoves[j+i] 
			predictors[15+12*z] = beat[mymoves[j+i]] 
		j=limit
		while j>=1 and not mymoves[length-j:length] in mymoves[0:length-1]:
			j-=1
		if j>=1:
			i = mymoves.rfind(mymoves[length-j:length],0,length-1) 
			predictors[5+12*z] = urmoves[j+i] 
			predictors[6+12*z] = beat[mymoves[j+i]]
			i = mymoves.find(mymoves[length-j:length],0,length-1) 
			predictors[16+12*z] = urmoves[j+i] 
			predictors[17+12*z] = beat[mymoves[j+i]]
		j=limit
		while j>=1 and not DNAmoves2[length-j:length] in DNAmoves2[0:length-1]:
			j-=1
		if j>=1:
			i = DNAmoves2.rfind(DNAmoves2[length-j:length],0,length-1) 
			predictors[2+12*z] = urmoves[j+i]
			predictors[7+12*z] = beat[mymoves2[j+i]] 
			predictors[8+12*z] = beat[mymoves[j+i]]
			i = DNAmoves2.find(DNAmoves2[length-j:length],0,length-1) 
			predictors[18+12*z] = urmoves[j+i]
			predictors[19+12*z] = beat[mymoves2[j+i]] 
			predictors[20+12*z] = beat[mymoves[j+i]]
		j=limit
		while j>=1 and not mymoves2[length-j:length] in mymoves2[0:length-1]:
			j-=1
		if j>=1:
			i = mymoves2.rfind(mymoves2[length-j:length],0,length-1) 
			predictors[9+12*z] = urmoves[j+i] 
			predictors[10+12*z] = beat[mymoves2[j+i]]
			predictors[11+12*z] = beat[mymoves[j+i]]
			i = mymoves2.rfind(mymoves2[length-j:length],0,length-1) 
			predictors[21+12*z] = urmoves[j+i] 
			predictors[22+12*z] = beat[mymoves2[j+i]]
			predictors[23+12*z] = beat[mymoves[j+i]]
	for i in range(number_of_predictors/3,number_of_predictors):
		predictors[i]=beat[beat[predictors[i-3*24]]]
	
	#compare predictors
	output2 = beat[predictors[predictorscore.index(max(predictorscore))]]
	output = output2
	if 3==random.randint(1, 5):
		output=random.choice(['R','P','S'])

oldpredictors=predictors