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)
        {
        }
    }
Exemplo n.º 2
0
    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);
        }
    }
Exemplo n.º 3
0
    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();
        }
    }
Exemplo n.º 4
0
    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");
    }
Exemplo n.º 5
0
    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);
        }
    }
Exemplo n.º 6
0
    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;
        }
    }
Exemplo n.º 7
0
    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;
        }
    }
Exemplo n.º 8
0
 public override void Affect(Bender bender)
 {
     bender.Position.X = Destination.Position.X; bender.Position.Y = Destination.Position.Y;
 }
Exemplo n.º 9
0
 public virtual void Affect(Bender bender)
 {
 }
Exemplo n.º 10
0
 public virtual bool IsAccessible(Bender bender)
 {
     return(true);
 }
Exemplo n.º 11
0
    public void AssignBender(List <string> benderArgs)
    {
        Bender bender = BenderFactory.CreateBender(benderArgs);

        nations[benderArgs[1]].AddBender(bender);
    }
Exemplo n.º 12
0
 public override void Affect(Bender bender)
 {
     bender.Die();
 }
Exemplo n.º 13
0
 public override void Affect(Bender bender)
 {
     bender.Priorities.Reverse();
 }
Exemplo n.º 14
0
 public override void Affect(Bender bender)
 {
     bender.Map[Position.Y][Position.X] = new Slot(Position.X, Position.Y);
 }
Exemplo n.º 15
0
 public void AddBender(Bender bender) => benders.Add(bender);
Exemplo n.º 16
0
 public void AddBender(Bender currentBender) => this.benders.Add(currentBender);
Exemplo n.º 17
0
    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());
            }
        }
    }
Exemplo n.º 18
0
    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;
    }
Exemplo n.º 19
0
 internal void AddBender(Bender currentBender)
 {
     this.benders.Add(currentBender);
 }
Exemplo n.º 20
0
 public override bool IsAccessible(Bender bender)
 {
     return(false);
 }
Exemplo n.º 21
0
 public void AddBender(Bender newBender)
 {
     this.benders.Add(newBender);
 }
Exemplo n.º 22
0
 public override bool IsAccessible(Bender bender)
 {
     return(bender.BreakerMode == true);
 }
Exemplo n.º 23
0
    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());
    }
Exemplo n.º 24
0
 public override void Affect(Bender bender)
 {
     bender.CurrentDirection = Direction; bender.CurrentOpposite = "";
 }
Exemplo n.º 25
0
 public void AddBender(Bender currentBender)
 {
     this.benderList.Add(currentBender);
 }
Exemplo n.º 26
0
 public override void Affect(Bender bender)
 {
     bender.BreakerMode = !bender.BreakerMode;
 }
Exemplo n.º 27
0
    public void AssignBender(List <string> benderArgs)
    {
        Bender bender = BenderFactory.CreateBender(benderArgs);

        this.benders.Add(bender);
    }
Exemplo n.º 28
0
 public void Add(Bender bender)
 {
     benders.Add(bender);
 }
Exemplo n.º 29
0
 public void AddBender(Bender bender)
 {
     AllBenders.Add(bender);
 }
 public void AddBender(Bender bender)
 {
     this.benders.Add(bender);
 }
Exemplo n.º 31
0
 public void AddBender(Bender b)
 {
     this.Benders.Add(b);
 }