LexicalAnalyzer::LexicalAnalyzer(const string& keywordFilePath, const string& symbolFilePath) { ifstream keywordFile(keywordFilePath); assert(keywordFile); string keyword; int keywordNum; keywordFile >> keywordNum; for(int i = 0; i < keywordNum; ++i) { keywordFile >> keyword; keywordTab.push_back(keyword); keywordTrie.insert(keyword); } keywordFile.close(); ifstream symbolFile(symbolFilePath); assert(symbolFile); string symbol; int symbolNum; symbolFile >> symbolNum; for(int i = 0; i < symbolNum; ++i) { symbolFile >> symbol; symbolTab.push_back(symbol); symbolTrie.insert(symbol); } symbolFile.close(); }
tGame::tGame(int gridSizeX, int gridSizeY) { // pre-compute the sensor offsets // to maintain the same order of inputs, start counting sensors from the inside. // e.g. for 7x7: // 43 42 41 40 39 38 37 // 44 21 20 19 18 17 36 // 45 22 7 6 5 16 35 // 46 23 8 0 4 15 34 // 47 24 1 2 3 14 33 // 48 9 10 11 12 13 32 // 25 26 27 28 29 30 31 int offsetX = 0, offsetY = 0; int offsetAmount = 0; for (int sensor = 0; sensor < 3 * 3; ++sensor) { int root = sqrt(sensor); if (root % 2 == 1 && root * root == sensor) { ++offsetAmount; offsetX = -offsetAmount; offsetY = -offsetAmount; } else if (offsetX != offsetAmount && offsetY == -offsetAmount) { ++offsetX; } else if (offsetX == offsetAmount && offsetY != offsetAmount) { ++offsetY; } else if (offsetX != -offsetAmount && offsetY == offsetAmount) { --offsetX; } else if (offsetX == -offsetAmount && offsetY != -offsetAmount) { --offsetY; } vector<int> offsets; offsets.push_back(offsetX); offsets.push_back(offsetY); sensorOffsetMap.push_back(offsets); } ifstream symbolFile ("mnist.train.discrete.28x28-only100"); string line; string key = ""; vector< vector<int> > symbol; int symbolRow = 0; while ( getline (symbolFile, line) ) { if (line.find("-") != string::npos) { key = line; symbol.clear(); symbolRow = 0; } else if (line.find("0") != string::npos || line.find("1") != string::npos) { symbol.resize(symbol.size() + 1); for (int i = 0; i < line.length(); ++i) { if (line.substr(i, 1) != " ") { symbol[symbolRow].push_back(atoi(line.substr(i, 1).c_str())); } } ++symbolRow; } else { symbols[key] = symbol; symbol_keys.push_back(key); symbol_labels.push_back(atoi(key.substr(0, key.find("-")).c_str())); } } symbolFile.close(); // place the digits in the digit grid for the edd agent to view int num_symbol_keys = (int)symbol_keys.size(); digitGrid.resize(num_symbol_keys); for (int digit = 0; digit < num_symbol_keys; ++digit) { digitGrid[digit].resize(gridSizeX); for (int x = 0; x < gridSizeX; ++x) { digitGrid[digit][x].resize(gridSizeY); } } // if the digits are being randomly placed, place all 10 digits (0-9) // in random spots on the grid at the beginning of every simulation // otherwise, place all 10 digits (0-9) centered in the grid for (int digit = 0; digit < num_symbol_keys; ++digit) { int digitCenterX = (int)(gridSizeX / 2.0), digitCenterY = (int)(gridSizeY / 2.0); placeDigit(digitGrid, digit, digitCenterX, digitCenterY); } // visualize the digits /*for (int digit = 0; digit < num_symbol_keys; ++digit) { cout << symbol_keys[digit] << endl; for (int x = 0; x < gridSizeX; ++x) { for (int y = 0; y < gridSizeY; ++y) { cout << digitGrid[digit][x][y] << " "; } cout << endl; } cout << "---" << endl; } exit(0);*/ }