コード例 #1
0
ファイル: ChainItem.cs プロジェクト: Kostassoid/Liar
        public string PickNext(IRandomSource random)
        {
            var l = Builders.Build <uint>(random) / (double)uint.MaxValue;

            return(Links
                   .OrderBy(_ => Builders.Build <int>(random))
                   .Where(i => i.Probability > l)
                   .Select(i => i.Value)
                   .FirstOrDefault());
        }
コード例 #2
0
ファイル: ChainDictionary.cs プロジェクト: Kostassoid/Liar
        public string Generate(int maxLength, IRandomSource random)
        {
            ChainItem current = null;
            var       result  = new StringBuilder();
            int       count   = 0;

            while (count < maxLength)
            {
                if (current == null)
                {
                    current = _items.Values.Where(i => i.CanStart).OrderBy(_ => Builders.Build <int>(random)).First();
                    result.Append(current.Value);
                    count++;
                    continue;
                }

                if (current.CanFinish && Builders.Build <byte>(random) % 10 < 3)
                {
                    result.Append(_endOfSequence + _separator);
                    current = null;
                    continue;
                }

                var next = current.PickNext(random);
                if (next == null)
                {
                    result.Append(_endOfSequence + _separator);
                    current = null;
                    continue;
                }

                current = _items [next];
                result.Append(_separator + current.Value);
                count++;
            }

            return(result.ToString());
        }
コード例 #3
0
 static int Generate(IRandomSource source)
 {
     return(Math.Abs(Builders.Build <short>(source)) % 9000 + 1000);
 }
コード例 #4
0
ファイル: AnyGenerator.cs プロジェクト: Kostassoid/Liar
 public T GetNext(IRandomSource source)
 {
     return(Builders.Build <T> (source));
 }