예제 #1
0
        public void RunProgramFromFile(string filename, int version)
        {
            Regex  maskRe = new Regex(@"mask = ([01X]{36})");
            Regex  memRe  = new Regex(@"mem\[(\d+)\] = (\d+)");
            string mask   = "";

            foreach (string line in FileReader.ReadFileOfStrings(filename))
            {
                Match maskMatch = maskRe.Match(line);
                if (maskMatch.Success)
                {
                    mask = maskMatch.Groups[1].Value;
                    continue;
                }
                Match memMatch = memRe.Match(line);
                if (memMatch.Success)
                {
                    int addr  = int.Parse(memMatch.Groups[1].Value);
                    int value = int.Parse(memMatch.Groups[2].Value);
                    if (version == 1)
                    {
                        Mem[addr] = ApplyMask(value, mask);
                    }
                    else if (version == 2)
                    {
                        foreach (long floating in FloatingAddresses(addr, mask))
                        {
                            Mem[floating] = value;
                        }
                    }
                }
            }
        }
예제 #2
0
 public void NavigateByWaypointFromFile(string filename)
 {
     foreach (string instruction in FileReader.ReadFileOfStrings(filename))
     {
         NavigateByWaypoint(instruction);
     }
 }
예제 #3
0
        public void ReadFile(string filename)
        {
            List <string> file = FileReader.ReadFileOfStrings(filename);

            ArrivalTime = int.Parse(file[0]);
            ParseSchedule(file[1]);
        }
예제 #4
0
 public void ReadProgamFromFile(string filename)
 {
     foreach (string line in FileReader.ReadFileOfStrings(filename))
     {
         string[] ia = line.Split(' ');
         instructions.Add(new Instruction(ia[0], int.Parse(ia[1])));
     }
 }
예제 #5
0
        public static List <PassportInfo> ReadPassportsFromFile(string filename)
        {
            List <PassportInfo> passportList = new List <PassportInfo>();
            PassportInfo        passport     = new PassportInfo();

            foreach (string line in FileReader.ReadFileOfStrings(filename))
            {
                if (line == "")
                {
                    passportList.Add(passport);
                    passport = new PassportInfo();
                }
                else
                {
                    foreach (string keyvalue in line.Split(' '))
                    {
                        string[] kv = keyvalue.Split(':');
                        switch (kv[0])
                        {
                        case "byr":
                            passport.byr = int.Parse(kv[1]);
                            break;

                        case "iyr":
                            passport.iyr = int.Parse(kv[1]);
                            break;

                        case "eyr":
                            passport.eyr = int.Parse(kv[1]);
                            break;

                        case "hgt":
                            passport.hgt = kv[1];
                            break;

                        case "hcl":
                            passport.hcl = kv[1];
                            break;

                        case "ecl":
                            passport.ecl = kv[1];
                            break;

                        case "pid":
                            passport.pid = kv[1];
                            break;

                        case "cid":
                            passport.cid = int.Parse(kv[1]);
                            break;
                        }
                    }
                }
            }
            passportList.Add(passport);
            return(passportList);
        }
예제 #6
0
        private void ReadFile(string filename)
        {
            int y = 0;

            foreach (string line in FileReader.ReadFileOfStrings(filename))
            {
                for (int x = 0; x < line.Length; x++)
                {
                    Grid[new Tuple <int, int, int, int>(x, y, 0, 0)] = line[x] == '#';
                }
                y++;
            }
        }
예제 #7
0
 void ReadFile(string filename)
 {
     foreach (string line in FileReader.ReadFileOfStrings(filename))
     {
         if (line.Contains(':'))
         {
             string[] kv = line.Split(": ");
             Rules[kv[0]] = kv[1];
         }
         else if (line == "")
         {
             continue;
         }
         else
         {
             Input.Add(line);
         }
     }
 }
예제 #8
0
        public void ReadRulesFromFile(string filename)
        {
            Regex lineRe = new Regex(@"(.*) bags contain (.*)\.");
            Regex bagsRe = new Regex(@"(\d+) (.*?) bags?");

            Rules = new Dictionary <string, List <BagAmount> >();
            foreach (string line in FileReader.ReadFileOfStrings(filename))
            {
                Match lineMatch = lineRe.Match(line);
                if (!lineMatch.Success)
                {
                    throw new Exception($"No bags found in line '{line}'");
                }
                List <BagAmount> bagList = new List <BagAmount>();
                foreach (Match bagMatch in bagsRe.Matches(lineMatch.Groups[2].Value))
                {
                    BagAmount bagAmount = new BagAmount();
                    bagAmount.Type   = bagMatch.Groups[2].Value;
                    bagAmount.Amount = int.Parse(bagMatch.Groups[1].Value);
                    bagList.Add(bagAmount);
                }
                Rules[lineMatch.Groups[1].Value] = bagList;
            }
        }
예제 #9
0
 public static int SumDeclarationsEveryoneFromFile(string filename)
 {
     return(ParseDeclarations(FileReader.ReadFileOfStrings(filename)).Select(group => group.CountWhereEveryone()).Sum());
 }
예제 #10
0
 public Seating(string filename)
 {
     Seats = FileReader.ReadFileOfStrings(filename).Select(s => s.ToList <char>()).ToList();
     Rows  = Seats.Count;
     Cols  = Seats[0].Count;
 }
예제 #11
0
 public long SumOfExpressionsFromFile(bool precedence, string filename)
 {
     return(FileReader.ReadFileOfStrings(filename).Select(expression => Evaluate(precedence, expression)).Sum());
 }
예제 #12
0
        private void ReadFile(string filename)
        {
            bool  checkTickets  = false;
            bool  parseMyTicket = false;
            Regex fieldRe       = new Regex(@"(.*): (\d+)-(\d+) or (\d+)-(\d+)");

            foreach (string line in FileReader.ReadFileOfStrings(filename))
            {
                Match match = fieldRe.Match(line);
                if (match.Success)
                {
                    Fields[match.Groups[1].Value] = new Field(int.Parse(match.Groups[2].Value),
                                                              int.Parse(match.Groups[3].Value),
                                                              int.Parse(match.Groups[4].Value),
                                                              int.Parse(match.Groups[5].Value));
                }
                if (line == "your ticket:")
                {
                    parseMyTicket = true;
                    continue;
                }
                if (parseMyTicket)
                {
                    foreach (string strValue in line.Split(','))
                    {
                        MyTicket.Add(int.Parse(strValue));
                    }
                    parseMyTicket = false;
                    continue;
                }
                if (line == "nearby tickets:")
                {
                    checkTickets = true;
                    continue;
                }
                if (checkTickets)
                {
                    bool       ticketValid = true;
                    List <int> ticket      = new List <int>();
                    foreach (string strValue in line.Split(','))
                    {
                        int  value = int.Parse(strValue);
                        bool valid = false;
                        foreach (Field field in Fields.Values)
                        {
                            if (field.IsValid(value))
                            {
                                valid = true;
                                break;
                            }
                        }
                        if (valid)
                        {
                            ticket.Add(value);
                        }
                        else
                        {
                            Errors.Add(value);
                            ticketValid = false;
                        }
                    }
                    if (ticketValid)
                    {
                        NearbyTickets.Add(ticket);
                    }
                }
            }
        }
예제 #13
0
 public void TestReadFileOfStrings()
 {
     Assert.Equal(6, FileReader.ReadFileOfStrings("input/day1.txt").Count);
 }
예제 #14
0
 public static int CheckPasswordsFromFileToboggan(string filename)
 {
     return(FileReader.ReadFileOfStrings(filename).Count(line => ParseAndCheckToboggan(line)));
 }
예제 #15
0
 public Toboggan(string filename)
 {
     Slope     = FileReader.ReadFileOfStrings(filename);
     RowLength = Slope[0].Length;
 }
예제 #16
0
 public static List <int> ReadBoardingPassesFromFile(string filename)
 {
     return(FileReader.ReadFileOfStrings(filename).Select(pass => ParseBoardingPass(pass)).ToList());
 }