Example #1
0
        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);
        }
Example #2
0
        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);
        }