using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace Spiner
{
public class Spiner
{
public int X { get; set; }
public int Y { get; set; }
private static object _locker = new object();
private char[] frames = { '\\', '|', '/', '-' };
private int _currentFrame;
public bool IsComplite { get; set; }
public async void Run()
{
while (!IsComplite)
{
lock (_locker)
{
Console.CursorVisible = false;
Console.SetCursorPosition(X, Y);
Console.Write(frames[_currentFrame]);
Console.CursorVisible = true;
}
await Task.Delay(500);
_currentFrame++;
if (_currentFrame >= frames.Length)
_currentFrame = 0;
}
}
}
class Program
{
static void Main(string[] args)
{
var spiners = new List<Spiner>();
while(spiners.Count<25)
{
spiners.Add(new Spiner() { X = spiners.Count, Y = spiners.Count });
}
var sw = new Stopwatch();
sw.Start();
foreach (var s in spiners)
s.Run();
while(sw.ElapsedMilliseconds<10000)
{ }
foreach (var s in spiners)
s.IsComplite = true; ;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwoKbmFtZXNwYWNlIFNwaW5lcgp7CiAgICBwdWJsaWMgY2xhc3MgU3BpbmVyCiAgICB7CiAgICAgICAgcHVibGljIGludCBYIHsgZ2V0OyBzZXQ7IH0KICAgICAgICBwdWJsaWMgaW50IFkgeyBnZXQ7IHNldDsgfQogICAgICAgIHByaXZhdGUgc3RhdGljIG9iamVjdCBfbG9ja2VyID0gbmV3IG9iamVjdCgpOwoKICAgICAgICBwcml2YXRlIGNoYXJbXSBmcmFtZXMgPSB7ICdcXCcsICd8JywgJy8nLCAnLScgfTsKICAgICAgICBwcml2YXRlIGludCBfY3VycmVudEZyYW1lOwogICAgICAgIHB1YmxpYyBib29sIElzQ29tcGxpdGUgeyBnZXQ7IHNldDsgfQogICAgICAgIHB1YmxpYyBhc3luYyB2b2lkIFJ1bigpCiAgICAgICAgewogICAgICAgICAgICB3aGlsZSAoIUlzQ29tcGxpdGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxvY2sgKF9sb2NrZXIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5DdXJzb3JWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5TZXRDdXJzb3JQb3NpdGlvbihYLCBZKTsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKGZyYW1lc1tfY3VycmVudEZyYW1lXSk7CiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5DdXJzb3JWaXNpYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGF3YWl0IFRhc2suRGVsYXkoNTAwKTsKICAgICAgICAgICAgICAgIF9jdXJyZW50RnJhbWUrKzsKICAgICAgICAgICAgICAgIGlmIChfY3VycmVudEZyYW1lID49IGZyYW1lcy5MZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgX2N1cnJlbnRGcmFtZSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHNwaW5lcnMgPSBuZXcgTGlzdDxTcGluZXI+KCk7CiAgICAgICAgICAgIHdoaWxlKHNwaW5lcnMuQ291bnQ8MjUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNwaW5lcnMuQWRkKG5ldyBTcGluZXIoKSB7IFggPSBzcGluZXJzLkNvdW50LCBZID0gc3BpbmVycy5Db3VudCB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc3cgPSBuZXcgU3RvcHdhdGNoKCk7CiAgICAgICAgICAgIHN3LlN0YXJ0KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBzIGluIHNwaW5lcnMpCiAgICAgICAgICAgICAgICBzLlJ1bigpOwogICAgICAgICAgICB3aGlsZShzdy5FbGFwc2VkTWlsbGlzZWNvbmRzPDEwMDAwKQogICAgICAgICAgICB7IH0KCiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBzIGluIHNwaW5lcnMpCiAgICAgICAgICAgICAgICBzLklzQ29tcGxpdGUgPSB0cnVlOyA7CiAgICAgICAgfQogICAgfQp9Cg==