public void AssignBender(List <string> benderArgs) { //Bender {type} {name} {power} {secondaryParameter} try { var benderType = benderArgs[0]; Bender newBender = BenderFactory.CreateBender(benderArgs); nations[benderType].AddBender(newBender); } catch (Exception) { } }
public void AssignBender(List <string> benderArgs) { string type = benderArgs[1]; string name = benderArgs[2]; int power = int.Parse(benderArgs[3]); double secondaryParameter = double.Parse(benderArgs[4]); try { Bender bender = BenderFactory.CreateBender(type, name, power, secondaryParameter); nations.Where(n => n.Name == type).FirstOrDefault().AddBender(bender); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
static void Main(string[] args) { List <string> moves = new List <string>(); List <MapObject> map = new List <MapObject>(); string[] inputs = Console.ReadLine().Split(' '); int L = int.Parse(inputs[0]); // Lines int C = int.Parse(inputs[1]); // Columns for (int i = 0; i < L; i++) { char[] row = Console.ReadLine().ToCharArray(); for (int j = 0; j < row.Length; j++) { map.Add(new MapObject(row[j], j, i)); } } // output map layout for visualization for (int i = 0; i < L; i++) { string mapline = ""; foreach (char s in map.Where(x => x.Y == i).Select(x => x.Symbol)) { mapline += s; } Console.Error.WriteLine(mapline); } // begin program Bender bender = new Bender(map); Console.Error.WriteLine("START: " + bender.X + ", " + bender.Y); while (!bender.Dead) { bender.ResolveSpace(map); bender.CheckNextSpace(map); bender.Move(); bender.CheckLoop(); } }
static void Main(string[] args) { string[] inputs = Console.ReadLine().Split(' '); int L = int.Parse(inputs[0]); int C = int.Parse(inputs[1]); Queue <Direction> moveList = new Queue <Direction>(); int x, y; Map map = new Map(C, L); map.SetAllSpaces(LoadMap(L, C, out x, out y)); Bender bender = new Bender(x, y, map); // Write an action using Console.WriteLine() // To debug: Console.Error.WriteLine("Debug messages..."); while (!bender.OnExit()) { Direction d = bender.Move(); //Console.Error.WriteLine(d); moveList.Enqueue(d); if (moveList.Count > 10000) { Console.Error.WriteLine("Moves exceed 10,000. Calling it a loop"); Console.WriteLine("LOOP"); return; } } Console.Error.WriteLine("Beginning move report"); while (moveList.Count != 0) { string s = moveList.Dequeue().ToString(); Console.WriteLine(s); } //Console.WriteLine("SOUTH"); //Console.WriteLine("SOUTH"); //Console.WriteLine("SOUTH"); }
public void AssignBender(List <string> benderArgs) { Bender bender = BenderFactory.Create(benderArgs); string type = benderArgs[1]; if (type == "Air") { airNation.Add(bender); } else if (type == "Water") { waterNation.Add(bender); } else if (type == "Fire") { fireNation.Add(bender); } else if (type == "Earth") { earthNation.Add(bender); } }
public void AssignBender(List <string> benderArgs) { Bender bender = this.benderFactory.CreateBender(benderArgs); switch (benderArgs[0]) { case "Air": airNation.AddBender(bender); break; case "Fire": fireNation.AddBender(bender); break; case "Earth": earthNation.AddBender(bender); break; case "Water": waterNation.AddBender(bender); break; } }
public void AssignBender(List <string> benderArgs) { Bender currentBender = benderFactory.Create(benderArgs); var type = benderArgs[1]; switch (type) { case "Fire": fireNation.Benders.Add(currentBender); break; case "Water": waterNation.Benders.Add(currentBender); break; case "Earth": earthNation.Benders.Add(currentBender); break; case "Air": airNation.Benders.Add(currentBender); break; } }
public override void Affect(Bender bender) { bender.Position.X = Destination.Position.X; bender.Position.Y = Destination.Position.Y; }
public virtual void Affect(Bender bender) { }
public virtual bool IsAccessible(Bender bender) { return(true); }
public void AssignBender(List <string> benderArgs) { Bender bender = BenderFactory.CreateBender(benderArgs); nations[benderArgs[1]].AddBender(bender); }
public override void Affect(Bender bender) { bender.Die(); }
public override void Affect(Bender bender) { bender.Priorities.Reverse(); }
public override void Affect(Bender bender) { bender.Map[Position.Y][Position.X] = new Slot(Position.X, Position.Y); }
public void AddBender(Bender bender) => benders.Add(bender);
public void AddBender(Bender currentBender) => this.benders.Add(currentBender);
static void Main(string[] args) { string[] inputs = Console.ReadLine().Split(' '); int L = int.Parse(inputs[0]); int C = int.Parse(inputs[1]); Bender bender = null; var map = new List<MapPoint[]>(); for (int i = 0; i < L; i++) { string row = Console.ReadLine(); map.Add(row.Select(c => new MapPoint { Symbol = c }).ToArray()); var startIndex = row.IndexOf("@"); if (startIndex >= 0) { bender = new Bender { X = startIndex, Y = i, Heading = Direction.SOUTH }; } } var movements = new List<Direction>(); var visitedNodes = new List<Bender>(); var stateChange = StateChanges.None; var hasLoop = false; do { visitedNodes.Add(bender); //if (bender.X >= 5 && bender.X <= 7 && bender.Y >= 19 && bender.Y <= 21) //if (movements.Count >= 105) //{ // Console.Error.WriteLine(movements.Count + ": " + bender); //} bender = bender.Clone(); bender.step(); var inputHeading = bender.Heading; stateChange = applyStateChange(bender, map); if (stateChange == StateChanges.AlteredMap) { visitedNodes.Clear(); } else if (visitedNodes.Contains(bender)) { hasLoop = true; } if (stateChange != StateChanges.Turned) { //if (movements.Count > 145) //{ // Console.Error.WriteLine(bender); //} movements.Add(inputHeading); } //if (movements.Count > 200) //{ // Console.Error.WriteLine("Movement overflow during debugging. Aborting!"); // break; //} } while (!hasLoop && stateChange != StateChanges.Killed); if (hasLoop) { Console.WriteLine("LOOP"); } else { foreach (var movement in movements) { Console.WriteLine(movement.ToString()); } } }
private static StateChanges applyStateChange(Bender bender, List<MapPoint[]> map) { var mapPoint = map[bender.Y][bender.X]; //Console.Error.WriteLine(mapPoint.Symbol); switch (mapPoint.Symbol) { case ' ': case '@': break; case '$': return StateChanges.Killed; case 'X': if (bender.IsBenderMode) { Console.Error.WriteLine("Breaking wall at: " + bender); mapPoint.Symbol = ' '; return StateChanges.AlteredMap; } else { bender.stepBack(); bender.turn(map); return StateChanges.Turned; } case '#': bender.stepBack(); bender.turn(map); return StateChanges.Turned; case 'B': bender.IsBenderMode = !bender.IsBenderMode; if (bender.IsBenderMode) { //Console.Error.WriteLine("Drinking beer at: " + bender); mapPoint.Symbol = ' '; return StateChanges.AlteredMap; } break; case 'I': bender.IsInvertedDirections = !bender.IsInvertedDirections; break; case 'T': for (int y = 0; y < map.Count; y++) { for (int x = 0; x < map[y].Length; x++) { if (x != bender.X || y != bender.Y) { if (map[y][x].Symbol == 'T') { bender.X = x; bender.Y = y; return StateChanges.None; } } } } throw new ApplicationException("Found only ONE teleporter!"); case 'S': bender.Heading = Direction.SOUTH; break; case 'E': bender.Heading = Direction.EAST; break; case 'N': bender.Heading = Direction.NORTH; break; case 'W': bender.Heading = Direction.WEST; break; default: throw new NotImplementedException("Unknown mark: " + mapPoint.Symbol); } return StateChanges.None; }
internal void AddBender(Bender currentBender) { this.benders.Add(currentBender); }
public override bool IsAccessible(Bender bender) { return(false); }
public void AddBender(Bender newBender) { this.benders.Add(newBender); }
public override bool IsAccessible(Bender bender) { return(bender.BreakerMode == true); }
static void Main(string[] args) { string[] directOrder = new string[] { "SOUTH", "EAST", "NORTH", "WEST" }; string[] inputs = Console.ReadLine().Split(' '); int L = int.Parse(inputs[0]); int C = int.Parse(inputs[1]); Point startPoint = new Point(); Point t1 = new Point(); Point t2 = new Point(); int xCount = 0; string[,] map = new string[C, L]; for (int i = 0; i < L; i++) { string row = Console.ReadLine(); for (int j = 0; j < row.Length; j++) { map[j, i] = row[j].ToString(); if (row[j] == '@') { startPoint.X = j; startPoint.Y = i; } if (row[j] == 'X') { xCount += 1; } if (row[j] == 'T') { if (t1.X == 0 && t1.Y == 0) { t1.X = j; t1.Y = i; } else { t2.X = j; t2.Y = i; } } } } StringBuilder result = new StringBuilder(); string currDirection = "SOUTH"; Point currPosition = startPoint; bool beerMode = false; bool isInLoop; List <Bender> prevStates = new List <Bender>(); Bender bender = new Bender() { X = startPoint.X, Y = startPoint.Y, BeerMode = beerMode, Direction = currDirection, DirectOrder = string.Join(",", directOrder), XCount = xCount }; prevStates.Add(bender); while (true) { isInLoop = false; Point targetPosition = currPosition; switch (currDirection) { case "SOUTH": targetPosition.Y += 1; break; case "NORTH": targetPosition.Y -= 1; break; case "WEST": targetPosition.X -= 1; break; case "EAST": targetPosition.X += 1; break; default: break; } string targetSymbol = map[targetPosition.X, targetPosition.Y]; if (targetSymbol == "#" || targetSymbol == "X") { if (targetSymbol == "X" && beerMode) { map[targetPosition.X, targetPosition.Y] = " "; xCount -= 1; } else { string symbol = "#"; string newDirection = ""; int dirIndex = 0; while (symbol == "#" || symbol == "X") { newDirection = directOrder[dirIndex]; Point nextPoint = currPosition; switch (newDirection) { case "SOUTH": nextPoint.Y += 1; break; case "NORTH": nextPoint.Y -= 1; break; case "WEST": nextPoint.X -= 1; break; case "EAST": nextPoint.X += 1; break; default: break; } targetPosition = nextPoint; dirIndex += 1; symbol = map[nextPoint.X, nextPoint.Y]; } targetSymbol = symbol; currDirection = newDirection; } } result.Append(currDirection + "\n"); switch (targetSymbol) { case "S": currDirection = "SOUTH"; break; case "N": currDirection = "NORTH"; break; case "E": currDirection = "EAST"; break; case "W": currDirection = "WEST"; break; case "I": directOrder = directOrder.Reverse().ToArray(); break; case "B": beerMode = !beerMode; break; case "T": targetPosition = targetPosition == t1 ? t2 : t1; break; default: break; } currPosition = targetPosition; if (targetSymbol == "$") { break; } bender = new Bender { X = targetPosition.X, Y = targetPosition.Y, Direction = currDirection, BeerMode = beerMode, DirectOrder = string.Join(",", directOrder), XCount = xCount }; var benderComparer = new BenderComparer(); foreach (var item in prevStates) { if (benderComparer.Equals(bender, item)) { isInLoop = true; break; } } prevStates.Add(bender); if (isInLoop) { break; } } Console.WriteLine(isInLoop ? "LOOP" : result.ToString().Trim()); }
public override void Affect(Bender bender) { bender.CurrentDirection = Direction; bender.CurrentOpposite = ""; }
public void AddBender(Bender currentBender) { this.benderList.Add(currentBender); }
public override void Affect(Bender bender) { bender.BreakerMode = !bender.BreakerMode; }
public void AssignBender(List <string> benderArgs) { Bender bender = BenderFactory.CreateBender(benderArgs); this.benders.Add(bender); }
public void Add(Bender bender) { benders.Add(bender); }
public void AddBender(Bender bender) { AllBenders.Add(bender); }
public void AddBender(Bender bender) { this.benders.Add(bender); }
public void AddBender(Bender b) { this.Benders.Add(b); }