57 lines
1.0 KiB
Plaintext
57 lines
1.0 KiB
Plaintext
|
<Query Kind="Program" />
|
||
|
|
||
|
class P { public int XX, YY, VX, VY; }
|
||
|
|
||
|
List<P> input;
|
||
|
|
||
|
void Main()
|
||
|
{
|
||
|
input = File
|
||
|
.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), @"10_input.txt"))
|
||
|
.Where(p => !string.IsNullOrWhiteSpace(p))
|
||
|
.Select(l => new P
|
||
|
{
|
||
|
XX=int.Parse(l.Substring(10,6).Trim()),
|
||
|
YY=int.Parse(l.Substring(18,6).Trim()),
|
||
|
VX=int.Parse(l.Substring(36,2).Trim()),
|
||
|
VY=int.Parse(l.Substring(40,2).Trim()),
|
||
|
})
|
||
|
.ToList();
|
||
|
|
||
|
|
||
|
|
||
|
for (;;)
|
||
|
{
|
||
|
foreach (var v in input) { v.XX += v.VX; v.YY += v.VY; }
|
||
|
|
||
|
|
||
|
if (input.Any(Alone)) continue;
|
||
|
Print();
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
bool Alone(P p) => !input.Any(i => i != p && Math.Abs(i.XX-p.XX)<=1 && Math.Abs(i.YY-p.YY)<=1);
|
||
|
|
||
|
void Print()
|
||
|
{
|
||
|
int minX = input.Min(i => i.XX);
|
||
|
int maxX = input.Max(i => i.XX);
|
||
|
int minY = input.Min(i => i.YY);
|
||
|
int maxY = input.Max(i => i.YY);
|
||
|
|
||
|
var b = new StringBuilder();
|
||
|
for (int y = minY; y <= maxY; y++)
|
||
|
{
|
||
|
for (int x = minX; x <= maxX; x++)
|
||
|
{
|
||
|
b.Append(input.Any(i => i.XX==x&&i.YY==y)?'#':'.');
|
||
|
}
|
||
|
b.AppendLine();
|
||
|
}
|
||
|
b.ToString().Dump();
|
||
|
|
||
|
}
|