public IEnumerable <Coordinate> FindUnknownPointIntersections(KnownField field) { if (Values.Count(i => i == MaskValue.Unknown) != 1) { throw new Exception("Invalid UnknownPoints count!"); } for (var x = 0; x <= field.SizeX - SizeX; x++) { for (var y = 0; y <= field.SizeY - SizeY; y++) { var xF = -1; var yF = -1; for (var xI = 0; xI < SizeX; xI++) { for (var yI = 0; yI < SizeY; yI++) { var maskValue = Values [yI * SizeX + xI]; var fieldValue = field.Get(x + xI, y + yI); if (fieldValue == null) { throw new Exception("Invalid fieldValue!"); } if (!Fits(maskValue, fieldValue.Value, field.GetRemainingCount(x + xI, y + yI))) { goto cont; } if (maskValue != MaskValue.Unknown) { continue; } xF = x + xI; yF = y + yI; } } Debug.WriteLine($"{Name} matched at {xF} / {yF}"); yield return(C(xF, yF)); cont :; } } }
public void SpeicificNullPointIntersectionTest1() { var field = new KnownField(3, 3); field.Set(0, 0, KnownProperty.Unknown); field.Set(0, 1, KnownProperty.Unknown); field.Set(0, 2, KnownProperty.Unknown); field.Set(1, 0, (KnownProperty)1); field.Set(1, 1, (KnownProperty)3); field.Set(1, 2, KnownProperty.Flagged); field.Set(2, 0, KnownProperty.Empty); field.Set(2, 1, (KnownProperty)2); field.Set(2, 2, KnownProperty.Flagged); var masks = EdgeMasks.AllMasks; var matches = masks.SelectMany(mask => mask.FindUnknownPointIntersections(field)); Assert.AreEqual(0, matches.Count()); }
public void GeneralNullPointIntersectionTest() { var field = new KnownField(3, 3); field.Set(0, 0, KnownProperty.Unknown); field.Set(0, 1, KnownProperty.Unknown); field.Set(0, 2, KnownProperty.Unknown); field.Set(1, 0, KnownProperty.Unknown); field.Set(1, 1, KnownProperty.Unknown); field.Set(1, 2, KnownProperty.Unknown); field.Set(2, 0, (KnownProperty)2); field.Set(2, 1, (KnownProperty)2); field.Set(2, 2, (KnownProperty)1); var mask = EdgeMasks.LeftTop; var matches = mask.FindUnknownPointIntersections(field); Assert.AreEqual(1, matches.Count()); }
public string Get(KnownField field) { return Get(NameMap[(int) field]); }
public static string GetStorageValueForField(KnownField field) { return(NSString.FromHandle(global::ApiDefinition.Messaging.IntPtr_objc_msgSend_UInt64(class_ptr, Selector.GetHandle("getStorageValueForField:"), (UInt64)field))); }
public string Get(KnownField field) { return(Get(NameMap[(int)field])); }