Exemplo n.º 1
0
        public static void IPmain()
        {
            RuleSingle myRule1 = new RuleSingle(new IPAddress((byte)127, (byte)0, (byte)0, (byte)1));

            Debug.WriteLine(myRule1.IsMatch(new IPAddress("127.0.0.1")));   // Returns True.
            Debug.WriteLine(myRule1.IsMatch(new IPAddress("192.168.0.1"))); // Returns False.

            //Serie med IP-adresser
            RuleRange myRule2 = new RuleRange(new IPAddress("192.168.0.5"), new IPAddress("192.168.255.255"));

            Debug.WriteLine(myRule2.IsMatch(new IPAddress("192.168.0.1")));     // Returns False.
            Debug.WriteLine(myRule2.IsMatch(new IPAddress("192.168.40.1")));    // Returns True.
            Debug.WriteLine(myRule2.IsMatch(new IPAddress("192.168.255.255"))); // Returns True.


            //Kombination av regler:
            RulesCollection myRules3 = new RulesCollection();

            // Create rules:
            RuleRange  myRuleRange  = new RuleRange(new IPAddress("192.168.0.5"), new IPAddress("192.168.255.255"));
            RuleSingle myRuleSingle = new RuleSingle(new IPAddress("127.0.0.1"));

            // Add rules to RulesCollection:
            myRules3.Rules.Add(myRuleRange);
            myRules3.Rules.Add(myRuleSingle);

            //Debug.WriteLine(myRules3.IsMatch(New IPAddress("192.168.0.1")))	   ' Returns False.
            //Debug.WriteLine(myRules3.IsMatch(New IPAddress("192.168.40.1")))	   ' Returns True.
            //Debug.WriteLine(myRules3.IsMatch(New IPAddress("192.168.255.255")))	' Returns True.
            //Debug.WriteLine(myRules3.IsMatch(New IPAddress("127.0.0.1")))	   ' Returns True.
            //Debug.WriteLine(myRules3.IsMatch(New IPAddress("192.168.0.1")))	   ' Returns False.
        }
Exemplo n.º 2
0
        private static int Parse(IEnumerable <string> input)
        {
            var rules         = new Dictionary <string, FieldRule>();
            var state         = State.Init;
            var invalidFields = new List <int>();

            foreach (var line in input)
            {
                if (line.StartsWith("your ticket:"))
                {
                    state = State.Your;
                }
                else if (line.StartsWith("nearby tickets:"))
                {
                    state = State.Nearby;
                }
                else if (line.Length == 0)
                {
                    // do nothing
                }
                else
                {
                    if (state == State.Init)
                    {
                        // departure location: 45-609 or 616-954
                        var ruleLine = line.Split(":");
                        var name     = ruleLine[0];
                        ruleLine = ruleLine[1].Trim().Split();
                        var r1        = ruleLine[0].Split("-");
                        var range1    = new RuleRange(int.Parse(r1[0]), int.Parse(r1[1]));
                        var r2        = ruleLine[2].Split("-");
                        var range2    = new RuleRange(int.Parse(r2[0]), int.Parse(r2[1]));
                        var fieldRule = new FieldRule(range1, range2);
                        rules[name] = fieldRule;
                    }
                    else if (state == State.Nearby)
                    {
                        var values = line.Split(",").Select(x => int.Parse(x)).ToList();
                        foreach (var value in values)
                        {
                            var isFoundValid = false;
                            foreach (var rule in rules.Values)
                            {
                                if (rule.IsValid(value))
                                {
                                    isFoundValid = true;
                                    break;
                                }
                            }
                            if (!isFoundValid)
                            {
                                invalidFields.Add(value);
                            }
                        }
                    }
                }
            }
            return(invalidFields.Sum());
        }
Exemplo n.º 3
0
        private static long Parse2(IEnumerable <string> input)
        {
            var rules         = new Dictionary <string, FieldRule>();
            var state         = State.Init;
            var invalidFields = new List <int>();
            var myTicket      = new List <int>();
            var validTickets  = new List <List <int> >();

            foreach (var line in input)
            {
                if (line.StartsWith("your ticket:"))
                {
                    state = State.Your;
                }
                else if (line.StartsWith("nearby tickets:"))
                {
                    state = State.Nearby;
                }
                else if (line.Length == 0)
                {
                    // do nothing
                }
                else
                {
                    if (state == State.Init)
                    {
                        // departure location: 45-609 or 616-954
                        var ruleLine = line.Split(":");
                        var name     = ruleLine[0];
                        ruleLine = ruleLine[1].Trim().Split();
                        var r1        = ruleLine[0].Split("-");
                        var range1    = new RuleRange(int.Parse(r1[0]), int.Parse(r1[1]));
                        var r2        = ruleLine[2].Split("-");
                        var range2    = new RuleRange(int.Parse(r2[0]), int.Parse(r2[1]));
                        var fieldRule = new FieldRule(range1, range2);
                        rules[name] = fieldRule;
                    }
                    else if (state == State.Your)
                    {
                        myTicket = line.Split(",").Select(x => int.Parse(x)).ToList();
                    }
                    else if (state == State.Nearby)
                    {
                        var values     = line.Split(",").Select(x => int.Parse(x)).ToList();
                        int validCount = 0;
                        foreach (var value in values)
                        {
                            var isFoundValid = false;
                            foreach (var rule in rules.Values)
                            {
                                if (rule.IsValid(value))
                                {
                                    isFoundValid = true;
                                    break;
                                }
                            }
                            if (!isFoundValid)
                            {
                                invalidFields.Add(value);
                            }
                            else
                            {
                                validCount++;
                            }
                        }
                        if (validCount == values.Count)
                        {
                            validTickets.Add(values);
                        }
                    }
                }
            }
            var validRules = new List <List <string> >();

            for (int i = 0; i < myTicket.Count; i++)
            {
                validRules.Add(rules.Keys.ToList());
            }

            // Remove all invalid
            foreach (var ticket in validTickets)
            {
                for (int i = 0; i < validRules.Count; i++)
                {
                    var remove = new HashSet <string>();
                    foreach (var ruleKV in rules)
                    {
                        if (!ruleKV.Value.IsValid(ticket[i]))
                        {
                            remove.Add(ruleKV.Key);
                        }
                    }
                    foreach (var r in remove)
                    {
                        if (validRules[i].Contains(r))
                        {
                            validRules[i].Remove(r);
                        }
                    }
                }
            }

            var finalRules = new string[validRules.Count];

            // Exclude
            bool loop = true;

            while (loop)
            {
                loop = false;
                for (int i = 0; i < validRules.Count; i++)
                {
                    if (finalRules[i] == null && validRules[i].Count == 1)
                    {
                        // remove from all other
                        for (int j = 0; j < validRules.Count; j++)
                        {
                            if (i != j)
                            {
                                validRules[j].Remove(validRules[i].First());
                                loop = true;
                            }
                        }
                        finalRules[i] = validRules[i].First();
                    }
                }
            }
            var prod = 1L;

            for (int i = 0; i < finalRules.Length; i++)
            {
                if (finalRules[i].StartsWith("departure"))
                {
                    prod *= myTicket[i];
                }
            }

            return(prod);
        }
Exemplo n.º 4
0
 public FieldRule(RuleRange r1, RuleRange r2)
 {
     this.r1 = r1;
     this.r2 = r2;
 }
Exemplo n.º 5
0
 private void Process(bool Response, RuleRange Range)
 {
     this.response = Response;
     this.range    = Range;
     this.client.IsFriendResponse(this.JID, this.RemoteJID, this.Key, Response, Range, this.RuleCallback, null);
 }
Exemplo n.º 6
0
 private void Respond(bool IsFriend, RuleRange Range, IqResultEventHandler Callback, object State)
 {
     this.Client.IsFriendResponse(this.JID, this.RemoteJID, this.Key, IsFriend, Range, Callback, State);
 }