public static void RunClaims(ClaimCount claimCount, IEnumerable <Claim> claims) { foreach (var claim in claims) { RunClaim(claimCount, claim); } }
public static void Init(ClaimCount claimCount) { for (int i = 0; i < claimCount.Size.X; i++) { for (int j = 0; j < claimCount.Size.Y; j++) { claimCount.Count[i, j] = 0; } } }
public static void RunClaim(ClaimCount claimCount, Claim claim) { for (int i = claim.Location.X; i < claim.Location.X + claim.Size.X; i++) { for (int j = claim.Location.Y; j < claim.Location.Y + claim.Size.Y; j++) { claimCount.Count[i, j] += 1; } } }
public static ClaimsResult Calculate(Size boardSize, IEnumerable <Claim> claims) { var claimCount = new ClaimCount(boardSize); RunClaims(claimCount, claims); return(new ClaimsResult() { OverlappingCount = Count(claimCount), NonOverlappingClaims = FindFreeClaims(claimCount, claims) }); }
public static bool IsClaimFree(ClaimCount claimCount, Claim claim) { for (int i = claim.Location.X; i < claim.Location.X + claim.Size.X; i++) { for (int j = claim.Location.Y; j < claim.Location.Y + claim.Size.Y; j++) { if (claimCount.Count[i, j] > 1) { return(false); } } } return(true); }
public static IEnumerable <int> FindFreeClaims(ClaimCount claimCount, IEnumerable <Claim> claims) { var freeClaims = new List <int>(); foreach (var claim in claims) { var free = IsClaimFree(claimCount, claim); if (free) { freeClaims.Add(claim.Id); } } return(freeClaims); }
public static int Count(ClaimCount claimCount) { var count = 0; for (int i = 0; i < claimCount.Size.X; i++) { for (int j = 0; j < claimCount.Size.Y; j++) { if (claimCount.Count[i, j] > 1) { count++; } } } return(count); }