diff --git a/IDAstar.cs b/IDAstar.cs index f3550ab..b52aeca 100644 --- a/IDAstar.cs +++ b/IDAstar.cs @@ -1,3 +1,77 @@ +using System.Collections.ObjectModel; +using System.Threading.Channels; + +namespace IdaStar { + + public enum CellState { + EMPTY, + OBSTACLE, + START, + DESTINATION, + PATH, + } + + public static class CellStateUtil { + public static CellState FromInput(this char c) => c switch + { + '#' => CellState.OBSTACLE, + ' ' => CellState.EMPTY, + 'S' => CellState.START, + 'F' => CellState.DESTINATION, + 'P' => CellState.PATH, + _ => throw new NotImplementedException(), + }; + + public static char ToInput(this CellState state) => state switch + { + CellState.EMPTY => ' ', + CellState.OBSTACLE => '#', + CellState.START => 'S', + CellState.DESTINATION => 'F', + CellState.PATH => 'P', + _ => throw new NotImplementedException(), + }; + + public static List> FromInput(this List> board) { + return board.Select((row) => row.Select((c) => FromInput(c)).ToList()).ToList(); + } + + public static List> ToInput(this List> board) { + return board.Select((row) => row.Select((state) => ToInput(state)).ToList()).ToList(); + } + } + + public class WorkingBoard { + readonly List> _board; + + public WorkingBoard(List> board) { + this._board = board; + } + + public WorkingBoard(List> board) { + this._board = board.FromInput(); + } + + public string Display() { + return string.Join( + Environment.NewLine, + _board.ToInput().Select((row) => string.Join("", row)) + ); + } + + public ReadOnlyCollection> Board { + get => _board.Select((row) => row.AsReadOnly()).ToList().AsReadOnly(); + } + + public event Action? AlgorithmStep; + + public void RunIdaStar() { + throw new NotImplementedException(); + } + } + +} + /* IDA*( state s, int g, threshold t ) { h = Eval( s );