using System;
using System.Security.Cryptography;
public static class Test
{
private static readonly RNGCryptoServiceProvider Generator = new RNGCryptoServiceProvider();
public static byte GetByte()
{
var buffer = new byte[1];
Generator.GetBytes(buffer);
return buffer[0];
}
public static int GetInt32(int minimum, int maximum)
{
return (int) (minimum + (Sample() * (maximum - minimum)));
}
public static decimal Sample()
{
var buffer = new byte[8];
Generator.GetBytes(buffer);
return (BitConverter.ToUInt64(buffer, 0) & 0x7FFFFFFFFFFFFFFF) / (decimal) long.MaxValue;
}
public static void Main()
{
Console.WriteLine("Hello World");
int[] counters = new int[4];
for (int i = 0; i < 10000; i++)
{
counters[GetInt32(0, 3)]++;
}
for (int i = 0; i < 4; i++)
{
Console.WriteLine("Value " + i + " counted " + counters[i]);
}
}
}
ICAgIHVzaW5nIFN5c3RlbTsKICAgIHVzaW5nIFN5c3RlbS5TZWN1cml0eS5DcnlwdG9ncmFwaHk7CgogICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0CiAgICB7CiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUk5HQ3J5cHRvU2VydmljZVByb3ZpZGVyIEdlbmVyYXRvciA9IG5ldyBSTkdDcnlwdG9TZXJ2aWNlUHJvdmlkZXIoKTsKCiAgICAgICAgcHVibGljIHN0YXRpYyBieXRlIEdldEJ5dGUoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBieXRlWzFdOwogICAgICAgICAgICBHZW5lcmF0b3IuR2V0Qnl0ZXMoYnVmZmVyKTsKICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclswXTsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBzdGF0aWMgaW50IEdldEludDMyKGludCBtaW5pbXVtLCBpbnQgbWF4aW11bSkKICAgICAgICB7CgogICAgICAgICAgICByZXR1cm4gKGludCkgKG1pbmltdW0gKyAoU2FtcGxlKCkgKiAobWF4aW11bSAtIG1pbmltdW0pKSk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgc3RhdGljIGRlY2ltYWwgU2FtcGxlKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgYnl0ZVs4XTsKICAgICAgICAgICAgR2VuZXJhdG9yLkdldEJ5dGVzKGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiAoQml0Q29udmVydGVyLlRvVUludDY0KGJ1ZmZlciwgMCkgJiAweDdGRkZGRkZGRkZGRkZGRkYpIC8gKGRlY2ltYWwpIGxvbmcuTWF4VmFsdWU7CiAgICAgICAgfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlDb25zb2xlLldyaXRlTGluZSgiSGVsbG8gV29ybGQiKTsKCQlpbnRbXSBjb3VudGVycyA9IG5ldyBpbnRbNF07CgkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQoJCXsKCQkJY291bnRlcnNbR2V0SW50MzIoMCwgMyldKys7CgkJfQoJCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQoJCXsKCQkgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlZhbHVlICIgKyBpICsgIiBjb3VudGVkICIgKyBjb3VudGVyc1tpXSk7CgkJfQoJfSAgICAgICAgCiAgICAgICAgCiAgICB9