private IEnumerable <HeadlineInfo> GetHeadlineInfos() { var headlineInfos = new List <HeadlineInfo>(); Author author = CreateAuthor(); DirectoryInfo[] imageDirectories = GetDirectories("img/headlines"); int illustratedHeadlineCount = imageDirectories.Length; int nonIllustratedHeadlineCount = illustratedHeadlineCount / 2; int totalHeadlineCount = illustratedHeadlineCount + nonIllustratedHeadlineCount; IReadOnlyCollection <Tag> tags = CreateTags(count: 2); WeightedLottery <Tag> tagLottery = CreateTagLottery(tags, totalWeight: illustratedHeadlineCount); string[] titles = CreateUniqueStringSet( totalHeadlineCount, () => LoremIpsum.NextHeading(minWordCount: 2, maxWordCount: 8)); for (int headlineIndex = 0; headlineIndex < illustratedHeadlineCount; headlineIndex++) { DirectoryInfo directory = imageDirectories[headlineIndex]; var headlineInfo = new HeadlineInfo { Images = GetHeadlineImages(directory), Tag = tagLottery.Pull(), Title = titles[headlineIndex], Author = author }; headlineInfos.Add(headlineInfo); } tagLottery = CreateTagLottery(tags, totalWeight: nonIllustratedHeadlineCount); for (int headlineIndex = illustratedHeadlineCount; headlineIndex < totalHeadlineCount; headlineIndex++) { var headlineInfo = new HeadlineInfo { Images = new List <HeadlineImage>(), Tag = tagLottery.Pull(), Title = titles[headlineIndex], Author = author }; headlineInfos.Add(headlineInfo); } return(headlineInfos); }
private static WeightedLottery <Tag> CreateTagLottery(IReadOnlyCollection <Tag> tags, int totalWeight) { var tagLottery = new WeightedLottery <Tag>(); foreach (Tag tag in tags) { int tagWeight = totalWeight / tags.Count; if (tag == tags.First()) { // total weight: 11, tag count: 2, first tag's weight: 6, second tag's weight: 5 tagWeight += totalWeight % tags.Count; } tagLottery.Add(tag, tagWeight); } return(tagLottery); }