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. }
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()); }
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); }
public FieldRule(RuleRange r1, RuleRange r2) { this.r1 = r1; this.r2 = r2; }
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); }
private void Respond(bool IsFriend, RuleRange Range, IqResultEventHandler Callback, object State) { this.Client.IsFriendResponse(this.JID, this.RemoteJID, this.Key, IsFriend, Range, Callback, State); }