public Trader() { //initialize myPosition and trades by reading in values from csv files myPosition = new Position(); trades = new List<Trade>(); using (StreamReader sr2 = new StreamReader(@"c:/maple/Positions.csv")) { try { sr2.ReadLine(); //moves internal pointer to next since 1st line are column names while (!sr2.EndOfStream) { string[] temp2 = sr2.ReadLine().Split(new char[] { ',' }); //split by comma myPosition.pos.Add(temp2[0], Convert.ToInt16(temp2[1])); //converting quantity to int for value } } catch (IndexOutOfRangeException e) { } } using (StreamReader sr = new StreamReader(@"c:/maple/Trades.csv")) { try { sr.ReadLine(); //moves internal pointer to next since 1st line are column names while (!sr.EndOfStream) { string[] temp = sr.ReadLine().Split(new char[]{','}); Trade t = new Trade(temp[0], temp[1], Convert.ToInt16(temp[2]), temp[3]); trades.Add(t); } } catch (IndexOutOfRangeException e) { } } }
public static void PlaceOnBoard(string word, Position pos, Direction dir) { int x = pos.X; int y = pos.Y; for (int i = 0; i < word.Length; i++) { switch (dir) { case Direction.Down: Board[y + i][x] = word[i]; break; case Direction.Left: Board[y][x - i] = word[i]; break; case Direction.Right: Board[y][x + i] = word[i]; break; case Direction.Up: Board[y - i][x] = word[i]; break; } } }
static List<Position> GetNeighbours(Position currentPosition, char[, ,] cube) { var neighbours = new List<Position>(); //left if (currentPosition.Col > 0) { neighbours.Add(new Position(currentPosition.Level, currentPosition.Row, currentPosition.Col - 1, currentPosition.Depth+1)); } //right if (currentPosition.Col < cols - 1) { neighbours.Add(new Position(currentPosition.Level, currentPosition.Row, currentPosition.Col + 1, currentPosition.Depth + 1)); } //forward if (currentPosition.Row < rows - 1) { neighbours.Add(new Position(currentPosition.Level, currentPosition.Row + 1, currentPosition.Col, currentPosition.Depth + 1)); } //back if (currentPosition.Row > 0) { neighbours.Add(new Position(currentPosition.Level, currentPosition.Row - 1, currentPosition.Col, currentPosition.Depth + 1)); } //up //down if (cube[currentPosition.Level, currentPosition.Row, currentPosition.Col] == 'U') { neighbours.Add(new Position(currentPosition.Level + 1, currentPosition.Row, currentPosition.Col, currentPosition.Depth + 1)); } else if (cube[currentPosition.Level, currentPosition.Row, currentPosition.Col] == 'D') { neighbours.Add(new Position(currentPosition.Level - 1, currentPosition.Row, currentPosition.Col, currentPosition.Depth + 1)); } neighbours.RemoveAll(pos => cube[pos.Level, pos.Row, pos.Col] == '#'); return neighbours; }
static int GetShortestRoutDistanceBfs(char[, ,] cube, Position startPosition) { Queue<Position> toVisit = new Queue<Position>(); toVisit.Enqueue(startPosition); Position currentPosition; while (toVisit.Count > 0) { currentPosition = toVisit.Dequeue(); //visited[currentPosition.Level, currentPosition.Row, currentPosition.Col] = true; var neighbours = GetNeighbours(currentPosition, cube); cube[currentPosition.Level, currentPosition.Row, currentPosition.Col] = '#'; foreach (var neighbour in neighbours) { //var dgsrghhd = IsExit(neighbour, cube); if (IsExit(neighbour, cube)) { return neighbour.Depth + 1; } toVisit.Enqueue(neighbour); } } return -1; }
static bool IsExit(Position position, char[, ,] cube) { return (position.Level >= levels - 1 && cube[position.Level, position.Row, position.Col] == 'U') || (position.Level <= 0 && cube[position.Level, position.Row, position.Col] == 'D'); }