public void TrainDictionary(Round[] xnyn, string xn, string yn, int generalMaxSubStringLen) { charFrequency = new Dictionary <int, Dictionary <string, Dictionary <char, int> > >(); for (int i = 0; i < xnyn.Count(); i++) { int maxSubStringLen = new List <int> { xnyn.Count() - i, generalMaxSubStringLen }.Min(); for (int j = 2; j < maxSubStringLen; j++) { string xListPreceding = xn.Substring(i, j); char yOutput = yn[i + j]; charFrequency = FormattingClass.FormatDictionary(charFrequency, j, xListPreceding, yOutput); charFrequency[j][xListPreceding][yOutput] += 1; } } }
private static Move F(Round[] xnyn) { const int generalMaxSubStringLen = 4; const int generalEnemyMaxSubStringLen = 4; var xn = FormattingClass.FormatXNYN(xnyn)[0]; var yn = FormattingClass.FormatXNYN(xnyn)[1]; UpdateStratSuccess(xnyn); ChooseStrategy(); switch (trailingStrategy) { case 1: { // RESPOND ACCORDING TO THEIR RESPONSE var modelEnemy = new Model1(); modelEnemy.TrainDictionary(xnyn, xn, yn, generalMaxSubStringLen); modelEnemy.PredictDictionary(xn, generalMaxSubStringLen); var response = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; response.GetBestMoveFromPredictionDictionary(modelEnemy.predictionDictionary, isMyDynamiteFinished); response.GetMoveFromString(); return(response.move); } case 2: { // RESPOND ACCORDING TO THEIR RESPONSE var modelEnemy = new Model1(); modelEnemy.TrainDictionary(xnyn, xn, yn, generalMaxSubStringLen); modelEnemy.PredictDictionary(xn, generalMaxSubStringLen); var response = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; response.GetBestMoveFromPredictionDictionary(modelEnemy.predictionDictionary, isMyDynamiteFinished); response.GetMoveFromString(); return(response.move); } case 3: { // RESPOND ACCORDING TO THEIR RESPONSE var modelEnemy = new Model1(); modelEnemy.TrainDictionary(xnyn, xn, yn, generalMaxSubStringLen); modelEnemy.PredictDictionary(xn, generalMaxSubStringLen); var response = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; response.GetBestMoveFromPredictionDictionary(modelEnemy.predictionDictionary, isMyDynamiteFinished); response.GetMoveFromString(); return(response.move); } case 4: { // RESPOND ACCORDING TO THEIR PATTERN var modelEnemy = new Model1(); modelEnemy.TrainDictionary(xnyn, yn, yn, generalMaxSubStringLen); modelEnemy.PredictDictionary(yn, generalMaxSubStringLen); var response = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; response.GetBestMoveFromPredictionDictionary(modelEnemy.predictionDictionary, isMyDynamiteFinished); response.GetMoveFromString(); return(response.move); } case 5: { // RESPOND ACCORDING TO THEIR PATTERN var modelEnemy = new Model1(); modelEnemy.TrainDictionary(xnyn, yn, yn, generalMaxSubStringLen); modelEnemy.PredictDictionary(yn, generalMaxSubStringLen); var response = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; response.GetBestMoveFromPredictionDictionary(modelEnemy.predictionDictionary, isMyDynamiteFinished); response.GetMoveFromString(); return(response.move); } case 6: { // RESPOND ACCORDING TO THEIR PATTERN var modelEnemy = new Model1(); modelEnemy.TrainDictionary(xnyn, yn, yn, generalMaxSubStringLen); modelEnemy.PredictDictionary(yn, generalMaxSubStringLen); var response = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; response.GetBestMoveFromPredictionDictionary(modelEnemy.predictionDictionary, isMyDynamiteFinished); response.GetMoveFromString(); return(response.move); } case 7: { // RESPOND ACCORDING TO HOW I WOULD RESPOND TO MYSELF var modelMe = new Model1(); modelMe.TrainDictionary(xnyn, yn, xn, generalEnemyMaxSubStringLen); modelMe.PredictDictionary(yn, generalEnemyMaxSubStringLen); var enemyResponse = new Response(); bool isEnemyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP2() == Move.D) == 100; enemyResponse.GetBestMoveFromPredictionDictionary(modelMe.predictionDictionary, isEnemyDynamiteFinished); var myResponse = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; myResponse.GetBestMoveFromPrediction(enemyResponse.moveString, isMyDynamiteFinished); myResponse.GetMoveFromString(); return(myResponse.move); } case 8: { // RESPOND ACCORDING TO HOW I WOULD RESPOND TO MYSELF var modelMe = new Model1(); modelMe.TrainDictionary(xnyn, yn, xn, generalEnemyMaxSubStringLen); modelMe.PredictDictionary(yn, generalEnemyMaxSubStringLen); var enemyResponse = new Response(); bool isEnemyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP2() == Move.D) == 100; enemyResponse.GetBestMoveFromPredictionDictionary(modelMe.predictionDictionary, isEnemyDynamiteFinished); var myResponse = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; myResponse.GetBestMoveFromPrediction(enemyResponse.moveString, isMyDynamiteFinished); myResponse.GetMoveFromString(); return(myResponse.move); } case 9: { // RESPOND ACCORDING TO HOW I WOULD RESPOND TO MYSELF var modelMe = new Model1(); modelMe.TrainDictionary(xnyn, yn, xn, generalEnemyMaxSubStringLen); modelMe.PredictDictionary(yn, generalEnemyMaxSubStringLen); var enemyResponse = new Response(); bool isEnemyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP2() == Move.D) == 100; enemyResponse.GetBestMoveFromPredictionDictionary(modelMe.predictionDictionary, isEnemyDynamiteFinished); var myResponse = new Response(); bool isMyDynamiteFinished = xnyn.Count(xiyi => xiyi.GetP1() == Move.D) == 100; myResponse.GetBestMoveFromPrediction(enemyResponse.moveString, isMyDynamiteFinished); myResponse.GetMoveFromString(); return(myResponse.move); } case 10: { return(PseudoRandomMove.GetPseudoRandomMove(xnyn)); } default: return(Move.D); } }