using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
static readonly int NUMROBOTS = 100;
static readonly int ITERATIONS = 200000;
static Random rng = new Random();
int FindParking()
{
int free = 100; // # of largest free spot int count = 0; // Number of robots parked
var robots = Enumerable.Range(1, 100).ToList();
// Shuffle list
int n = robots.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
int value = robots[k];
robots[k] = robots[n];
robots[n] = value;
}
{
if (free >= robots
[count
]) free = robots
[count
]; // Robot found its spot else
free--; // Spot is filled
count++;
}
return count;
}
public static void Main()
{
var p = new Test();
int total = 0;
for (int i = 0; i < ITERATIONS; i++)
{
total += p.FindParking();
}
Console.WriteLine("Average robots parked: {0}", (decimal)total / ITERATIONS);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglzdGF0aWMgcmVhZG9ubHkgaW50IE5VTVJPQk9UUyA9IDEwMDsKCXN0YXRpYyByZWFkb25seSBpbnQgSVRFUkFUSU9OUyA9IDIwMDAwMDsKCXN0YXRpYyBSYW5kb20gcm5nID0gbmV3IFJhbmRvbSgpOwoKCWludCBGaW5kUGFya2luZygpCgl7CgkJaW50IGZyZWUgPSAxMDA7IC8vICMgb2YgbGFyZ2VzdCBmcmVlIHNwb3QKCQlpbnQgY291bnQgPSAwOyAvLyBOdW1iZXIgb2Ygcm9ib3RzIHBhcmtlZAoJCQoJCXZhciByb2JvdHMgPSBFbnVtZXJhYmxlLlJhbmdlKDEsIDEwMCkuVG9MaXN0KCk7CgkJLy8gU2h1ZmZsZSBsaXN0CgkJaW50IG4gPSByb2JvdHMuQ291bnQ7CgkgICAgd2hpbGUgKG4gPiAxKQoJICAgIHsgIAoJICAgICAgICBuLS07ICAKCSAgICAgICAgaW50IGsgPSBybmcuTmV4dChuICsgMSk7ICAKCSAgICAgICAgaW50IHZhbHVlID0gcm9ib3RzW2tdOyAgCgkgICAgICAgIHJvYm90c1trXSA9IHJvYm90c1tuXTsgIAoJICAgICAgICByb2JvdHNbbl0gPSB2YWx1ZTsgIAoJICAgIH0KCQkKCQl3aGlsZSAoZnJlZSA+IDApCgkJewoJCQlpZiAoZnJlZSA+PSByb2JvdHNbY291bnRdKQoJCQkJZnJlZSA9IHJvYm90c1tjb3VudF07IC8vIFJvYm90IGZvdW5kIGl0cyBzcG90CgkJCWVsc2UKCQkJCWZyZWUtLTsJCQkJICAvLyBTcG90IGlzIGZpbGxlZAoJCQljb3VudCsrOwoJCX0KCQlyZXR1cm4gY291bnQ7Cgl9CgkKCQoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBwID0gbmV3IFRlc3QoKTsKCQlpbnQgdG90YWwgPSAwOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgSVRFUkFUSU9OUzsgaSsrKQoJCXsKCQkJdG90YWwgKz0gcC5GaW5kUGFya2luZygpOwoJCX0KCQlDb25zb2xlLldyaXRlTGluZSgiQXZlcmFnZSByb2JvdHMgcGFya2VkOiB7MH0iLCAoZGVjaW1hbCl0b3RhbCAvIElURVJBVElPTlMpOwoJfQp9