mirror of
https://github.com/farcasclaudiu/MartianRobots.git
synced 2026-06-28 17:01:10 +03:00
Add project files.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using Ardalis.GuardClauses;
|
||||
using System.Text;
|
||||
|
||||
namespace MartianRobotsSolver
|
||||
{
|
||||
public class MarsSolver
|
||||
{
|
||||
public RobotSolution Process(string input)
|
||||
{
|
||||
var lines = input.Split(new string[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
|
||||
|
||||
//extract world info
|
||||
var wInfo = lines[0].Split(" ");
|
||||
var sizeX = Convert.ToInt32(wInfo[0]);
|
||||
var sizeY = Convert.ToInt32(wInfo[1]);
|
||||
var worldInfo = new WorldInfo(sizeX, sizeY);
|
||||
var robotSolution = new RobotSolution()
|
||||
{
|
||||
Input = input,
|
||||
WorldInfo = worldInfo
|
||||
};
|
||||
|
||||
//map robots info and commands
|
||||
for (int i = 0; i < (lines.Count - 1)/2; i++)
|
||||
{
|
||||
var rInfo = lines[1 + i*2].Split(" ");
|
||||
var rPosX = Convert.ToInt32(rInfo[0]);
|
||||
var rPosY = Convert.ToInt32(rInfo[1]);
|
||||
var rHead = rInfo[2];
|
||||
|
||||
var robotCommands = lines[2 + i*2];
|
||||
Guard.Against.InvalidInput(robotCommands, nameof(robotCommands), rc => rc.Length<100);
|
||||
var robotInfo = new RobotInfo(rPosX, rPosY, rHead, robotCommands);
|
||||
robotSolution.Robots.Add(robotInfo);
|
||||
}
|
||||
|
||||
//process commands
|
||||
var navigator = new MarsNavigator(worldInfo);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (var robotInfo in robotSolution.Robots)
|
||||
{
|
||||
if (sb.Length>0)
|
||||
sb.Append(Environment.NewLine);
|
||||
sb.Append(navigator.Navigate(robotInfo));
|
||||
}
|
||||
|
||||
//store output
|
||||
robotSolution.Output = sb.ToString();
|
||||
|
||||
return robotSolution;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user