diff --git a/katas/LangtonAnt/solutions/.gitkeep b/katas/LangtonAnt/solutions/.gitkeep
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/katas/LangtonAnt/solutions/.gitkeep
@@ -0,0 +1 @@
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend.csproj b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend.csproj
new file mode 100644
index 0000000..5e963bc
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/Ant.cs b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/Ant.cs
new file mode 100644
index 0000000..2f34b47
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/Ant.cs
@@ -0,0 +1,71 @@
+using static LangtonsAntAPI.LangtonsAntBackend.Statics;
+
+namespace LangtonsAntAPI.LangtonsAntBackend
+{
+ public class Ant
+ {
+ public Ant(int iPositionX, int iPositionY, string iDirection)
+ {
+ PositionX = iPositionX;
+ PositionY = iPositionY;
+ Direction = (EDirection)Enum.Parse(typeof(EDirection), iDirection);
+
+ }
+
+ public int PositionX { get; private set; }
+
+ public int PositionY { get; private set; }
+
+ public EDirection Direction { get; private set; }
+
+
+ public void Move(ETurn iTurn)
+ {
+ //set new direction
+ if (iTurn == ETurn.Left)
+ {
+ if (Direction == EDirection.n)
+ {
+ Direction = EDirection.w;
+ }
+ else
+ {
+ Direction--;
+
+ }
+
+ }
+ else if (iTurn == ETurn.Right)
+ {
+ if (Direction == EDirection.w)
+ {
+ Direction = EDirection.n;
+ }
+ else
+ {
+ Direction++;
+ }
+ }
+
+ //set new Position
+ switch (Direction)
+ {
+ case EDirection.n:
+ PositionY--;
+ break;
+ case EDirection.o:
+ PositionX++;
+ break;
+ case EDirection.s:
+ PositionY++;
+ break;
+ case EDirection.w:
+ PositionX--;
+ break;
+ }
+
+ }
+
+
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/LangtonsAntMain.cs b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/LangtonsAntMain.cs
new file mode 100644
index 0000000..25fc390
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/LangtonsAntMain.cs
@@ -0,0 +1,139 @@
+using System.ComponentModel.DataAnnotations;
+using static LangtonsAntAPI.LangtonsAntBackend.Statics;
+
+namespace LangtonsAntAPI.LangtonsAntBackend
+{
+ public class LangtonsAntMain
+ {
+ #region Properties & Fields
+ #region StartParams
+ public int EdgeLength { get; set; }
+
+ public int NumberOfSteps { get; set; }
+
+ public int StartX { get; set; }
+
+ public int StartY { get; set; }
+
+ public string StartDirection { get; set; }
+
+ #endregion StartParams
+
+ private bool[,]? _field; //true = black, false = white
+
+ private Ant? _ant;
+ public int StepCounter { get; set; }
+
+ public string ResultText { get; set; }
+
+ public string ErrMessage { get; set; }
+ #endregion Properties
+
+ #region Methods
+
+
+
+ public void Initialize()
+ {
+ //Todo: Check Parameters first
+ _field = new bool[EdgeLength, EdgeLength];
+ _ant = new Ant(iPositionX: StartX, iPositionY: StartY, iDirection: StartDirection);
+ StepCounter = 0;
+ GenerateErrorText();
+ GenerateResultString();
+ }
+
+
+ public void NextStep()
+ {
+ if (_ant == null || _field == null)
+ return;
+
+ GenerateErrorText();
+ if (!String.IsNullOrEmpty(ErrMessage))
+ return;
+
+ bool isBlack = _field[_ant.PositionX, _ant.PositionY];
+
+ //Invert Square Color
+ _field[_ant.PositionX, _ant.PositionY] = !_field[_ant.PositionX, _ant.PositionY];
+
+ //Move Ant
+ if (isBlack)
+ {
+ _ant.Move(ETurn.Left);
+ }
+ else
+ {
+ _ant.Move(ETurn.Right);
+ }
+
+ StepCounter++;
+ GenerateResultString();
+ }
+
+ public void GenerateResultString()
+ {
+ if (_ant == null || _field == null)
+ return;
+ ResultText = String.Empty;
+ for (int y = 0; y < EdgeLength; y++)
+ {
+ for (int x = 0; x < EdgeLength; x++)
+ {
+ //Write Ant
+ if (_ant.PositionX == x && _ant.PositionY == y)
+ {
+ ResultText += _ant.Direction;
+ }
+ //Write Field Color
+ if (_field[x, y])
+ {
+ ResultText += "s,";
+ }
+ else
+ {
+ ResultText += "w,";
+ }
+
+ }
+ }
+ }
+
+
+ private void GenerateErrorText()
+ {
+ ErrMessage = String.Empty;
+ if (IsOutOfBounds())
+ {
+ ErrMessage = "Der Rand wurde erreicht!";
+ }
+
+ if (IsOver())
+ {
+ ErrMessage += "Die finale Anzahl der Schritte wurde erreicht!";
+ }
+
+ }
+
+ public bool IsOutOfBounds()
+ {
+ if (_ant == null)
+ return false;
+ if (_ant.PositionX >= EdgeLength || _ant.PositionY >= EdgeLength || _ant.PositionX < 0 || _ant.PositionY < 0)
+ return true;
+ return false;
+ }
+ private bool IsOver()
+ {
+ if (StepCounter >= NumberOfSteps)
+ return true;
+ return false;
+ }
+
+
+
+ #endregion Methods
+
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/Statics.cs b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/Statics.cs
new file mode 100644
index 0000000..a458964
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/LangtonsAntBackend/Statics.cs
@@ -0,0 +1,17 @@
+namespace LangtonsAntAPI.LangtonsAntBackend
+{
+ public static class Statics
+ {
+ public enum EDirection
+ {
+ n,//North
+ o,//East
+ s,//South
+ w//West
+ }
+ public enum ETurn
+ {
+ Left, Right
+ }
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/Program.cs b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/Program.cs
new file mode 100644
index 0000000..b69e00e
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/Program.cs
@@ -0,0 +1,48 @@
+using LangtonsAntAPI.LangtonsAntBackend;
+using System;
+using System.Collections.ObjectModel;
+using System.Runtime.CompilerServices;
+
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+
+LangtonsAntMain langtonsAntMain = new();
+
+app.MapGet("api/langtonsant/", () =>
+{
+ langtonsAntMain.NextStep();
+ return Results.Created($"api/langtonsant/", langtonsAntMain);
+});
+
+
+app.MapPost("api/langtonsant", (LangtonsAntMain iLangtonsAntMain) =>
+{
+ return CreateNewGame(iLangtonsAntMain);
+});
+
+app.MapPut("api/langtonsant", (LangtonsAntMain iLangtonsAntMain) =>
+{
+ return CreateNewGame(iLangtonsAntMain);
+});
+
+app.MapDelete("api/langtonsant/", () =>
+{
+ langtonsAntMain = new LangtonsAntMain();
+ return Results.Ok();
+
+});
+
+IResult CreateNewGame(LangtonsAntMain iLangtonsAntMain)
+{
+ langtonsAntMain = iLangtonsAntMain;
+ langtonsAntMain.Initialize();
+ return Results.Created($"api/langtonsant/", langtonsAntMain);
+}
+
+app.Run();
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/Properties/launchSettings.json b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/Properties/launchSettings.json
new file mode 100644
index 0000000..484584b
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/Properties/launchSettings.json
@@ -0,0 +1,29 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:56246",
+ "sslPort": 44300
+ }
+ },
+ "profiles": {
+ "LangtonsAnt": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "applicationUrl": "https://localhost:7213;http://localhost:5128",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "weatherforecast",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/appsettings.Development.json b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/appsettings.json b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAnt/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAntBackend.sln b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAntBackend.sln
new file mode 100644
index 0000000..594914f
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntBackend/LangtonsAntBackend.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.6.33723.286
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LangtonsAntBackend", "LangtonsAnt\LangtonsAntBackend.csproj", "{E2FC832A-788C-4BFB-B271-CD59DC38D2D1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E2FC832A-788C-4BFB-B271-CD59DC38D2D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E2FC832A-788C-4BFB-B271-CD59DC38D2D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E2FC832A-788C-4BFB-B271-CD59DC38D2D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E2FC832A-788C-4BFB-B271-CD59DC38D2D1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {F790C48A-0E1E-4F1E-A713-DABA34D96906}
+ EndGlobalSection
+EndGlobal
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient.sln b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient.sln
new file mode 100644
index 0000000..9a5f606
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient.sln
@@ -0,0 +1,27 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31611.283
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LangtonsAntClient", "LangtonsAntClient\LangtonsAntClient.csproj", "{29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {29C6FC97-B7C7-4A8C-A8FC-CE27768D00A6}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572}
+ EndGlobalSection
+EndGlobal
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/App.xaml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/App.xaml
new file mode 100644
index 0000000..c7a5de7
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/App.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/App.xaml.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/App.xaml.cs
new file mode 100644
index 0000000..d0d9dce
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/App.xaml.cs
@@ -0,0 +1,11 @@
+namespace LangtonsAntClient;
+
+public partial class App : Application
+{
+ public App()
+ {
+ InitializeComponent();
+
+ MainPage = new AppShell();
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/AppShell.xaml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/AppShell.xaml
new file mode 100644
index 0000000..654025b
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/AppShell.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/AppShell.xaml.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/AppShell.xaml.cs
new file mode 100644
index 0000000..8dcdab1
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/AppShell.xaml.cs
@@ -0,0 +1,9 @@
+namespace LangtonsAntClient;
+
+public partial class AppShell : Shell
+{
+ public AppShell()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/DataService/RestDataService.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/DataService/RestDataService.cs
new file mode 100644
index 0000000..f60a5b4
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/DataService/RestDataService.cs
@@ -0,0 +1,90 @@
+using LangtonsAntClient.Models;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Text.Json;
+using System.Threading.Tasks;
+
+namespace LangtonsAntClient.DataService
+{
+ class RestDataService
+ {
+ private readonly HttpClient _httpClient;
+ private readonly string _baseAddress;
+ private readonly string _url;
+ private readonly JsonSerializerOptions _jsonSerializerOptions;
+
+ public RestDataService()
+ {
+ _httpClient = new HttpClient();
+
+ _baseAddress = "http://localhost:5128";
+ _url = $"{_baseAddress}/api/langtonsant";
+
+ _jsonSerializerOptions = new JsonSerializerOptions
+ {
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase
+ };
+ }
+
+
+
+ public async Task InitializeLangtonsAntBackend(LangtonsAnt iLangtonsAnt)
+ {
+ if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet)
+ {
+ iLangtonsAnt.ErrMessage = "Keine Internetverbindung";
+ return iLangtonsAnt;
+ }
+
+ try
+ {
+ string jsonLangtonsAnt = JsonSerializer.Serialize(iLangtonsAnt, _jsonSerializerOptions);
+ StringContent content = new StringContent(jsonLangtonsAnt, Encoding.UTF8, "application/json");
+
+ HttpResponseMessage response = await _httpClient.PostAsync($"{_url}", content);
+
+ if (response.IsSuccessStatusCode)
+ {
+ string responseString = await response.Content.ReadAsStringAsync();
+ iLangtonsAnt = JsonSerializer.Deserialize(responseString, _jsonSerializerOptions);
+ }
+ }
+ catch (Exception ex)
+ {
+ iLangtonsAnt.ErrMessage = $"Exception: {ex.Message}";
+ }
+
+ return iLangtonsAnt;
+
+ }
+ public async Task GetNextStepBackend()
+ {
+ LangtonsAnt langtonsAnt = new LangtonsAnt();
+ if (Connectivity.Current.NetworkAccess != NetworkAccess.Internet)
+ {
+ langtonsAnt.ErrMessage = "Keine Internetverbindung";
+ return langtonsAnt;
+ }
+
+ try
+ {
+ HttpResponseMessage response = await _httpClient.GetAsync($"{_url}/");
+
+ if (response.IsSuccessStatusCode)
+ {
+ string responseString = await response.Content.ReadAsStringAsync();
+ langtonsAnt = JsonSerializer.Deserialize(responseString, _jsonSerializerOptions);
+ }
+ }
+ catch (Exception ex)
+ {
+ langtonsAnt.ErrMessage = $"Exception: {ex.Message}";
+ }
+
+ return langtonsAnt;
+ }
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/LangtonsAntClient.csproj b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/LangtonsAntClient.csproj
new file mode 100644
index 0000000..9e73636
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/LangtonsAntClient.csproj
@@ -0,0 +1,54 @@
+
+
+
+ net6.0-android;net6.0-ios;net6.0-maccatalyst
+ $(TargetFrameworks);net6.0-windows10.0.19041.0
+
+
+ Exe
+ LangtonsAntClient
+ true
+ true
+ enable
+
+
+ LangtonsAntClient
+
+
+ com.companyname.langtonsantclient
+ d64117ab-9621-41cd-8b04-abd79d8112a0
+
+
+ 1.0
+ 1
+
+ 14.2
+ 14.0
+ 21.0
+ 10.0.17763.0
+ 10.0.17763.0
+ 6.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MainPage.xaml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MainPage.xaml
new file mode 100644
index 0000000..96d23a8
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MainPage.xaml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Norden
+ Osten
+ Süden
+ Westen
+
+
+
+
+
+
+
+
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MainPage.xaml.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MainPage.xaml.cs
new file mode 100644
index 0000000..8e3ccb7
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MainPage.xaml.cs
@@ -0,0 +1,219 @@
+using LangtonsAntClient.DataService;
+using LangtonsAntClient.Models;
+using Microsoft.Maui.Controls;
+using Microsoft.Maui.Controls.Shapes;
+using System.Data.Common;
+
+namespace LangtonsAntClient;
+
+public partial class MainPage : ContentPage
+{
+ private RestDataService _restDataService;
+ private LangtonsAnt _langtonsAnt;
+ private int _fieldSize;
+ private const int _gridSize = 500;
+ private const int _startFieldSize = 15;
+ IDispatcherTimer _timer;
+
+ public MainPage()
+ {
+ InitializeComponent();
+ Loaded += MainPage_Loaded;
+
+ }
+
+ #region Methods
+ private void Initialize()
+ {
+ _restDataService = new RestDataService();
+ _langtonsAnt = new LangtonsAnt();
+ _fieldSize = _startFieldSize;
+ SizeSlider.Value = _fieldSize;
+ _timer = Application.Current.Dispatcher.CreateTimer();
+ _timer.Tick += (s, e) => TimerTick();
+ }
+
+ void TimerTick()
+ {
+ MainThread.BeginInvokeOnMainThread(async () =>
+ {
+ _langtonsAnt = await _restDataService.GetNextStepBackend();
+ RefreshPlayField();
+ });
+ }
+
+ private void InitializePlayField()
+ {
+ //clear grid
+ PlayFieldGrid.RowDefinitions.Clear();
+ PlayFieldGrid.ColumnDefinitions.Clear();
+ PlayFieldGrid.Children.Clear();
+
+ //calculate cell size
+ int length = _gridSize / _fieldSize;
+
+ //set Column and RowDefinitions
+ for (int i = 0; i < _fieldSize; i++)
+ {
+ ColumnDefinition column = new ColumnDefinition();
+ column.Width = length;
+ PlayFieldGrid.ColumnDefinitions.Add(column);
+ }
+ for (int i = 0; i < _fieldSize; i++)
+ {
+ RowDefinition row = new RowDefinition();
+ row.Height = length;
+ PlayFieldGrid.RowDefinitions.Add(row);
+ }
+
+ //create objects for all cells
+ for (int y = 0; y < _fieldSize; y++)
+ {
+ for (int x = 0; x < _fieldSize; x++)
+ {
+ Label label = new Label()
+ {
+ BackgroundColor = Colors.White,
+ HorizontalTextAlignment = TextAlignment.Center,
+ VerticalTextAlignment = TextAlignment.Center,
+ };
+ Grid.SetRow(label, y);
+ Grid.SetColumn(label, x);
+ PlayFieldGrid.Children.Add(label);
+ }
+ }
+ }
+ private void RefreshPlayField()
+ {
+ if (!string.IsNullOrEmpty(_langtonsAnt.ErrMessage))
+ {
+ DisplayAlert("Achtung!", _langtonsAnt.ErrMessage, "OK");
+ TimerStop();
+ return;
+ }
+ var fieldString = _langtonsAnt.ResultText.Split(',');
+ if (PlayFieldGrid.Children.Count != fieldString.Length - 1)
+ return;
+ for (int i = 0; i < PlayFieldGrid.Children.Count; i++)
+ {
+ var box = PlayFieldGrid.Children[i] as Label;
+ box.Text = String.Empty;
+ string tile = fieldString[i];
+
+ //draw ant
+ if (tile.Length == 2)//if length == 2 -> cell with ant
+ {
+ switch (tile[0])
+ {
+ case 'n':
+ box.Text = "↑";
+ break;
+ case 'o':
+ box.Text = "→";
+ break;
+ case 's':
+ box.Text = "↓";
+ break;
+ case 'w':
+ box.Text = "←"; ;
+ break;
+
+ }
+ //Just use second character
+ tile = tile[1..];
+ }
+
+ //set cell color
+ switch (tile)
+ {
+ case "w":
+ box.BackgroundColor = Colors.White;
+ break;
+ case "s":
+ box.BackgroundColor = Colors.DarkGray;
+ break;
+
+ }
+ }
+ }
+
+ private void TimerStart()
+ {
+
+ TimerButton.Text = "Timer stoppen";
+ _timer.Interval = TimeSpan.FromMilliseconds(1000 - SpeedSlider.Value);
+ _timer.Start();
+ }
+
+ private void TimerStop()
+ {
+ TimerButton.Text = "Timer starten";
+ _timer.Stop();
+ }
+
+ #endregion Methods
+
+ #region Events
+ private void MainPage_Loaded(object sender, EventArgs e)
+ {
+ Initialize();
+ }
+
+ private void SizeSlider_ValueChanged(object sender, ValueChangedEventArgs args)
+ {
+ _fieldSize = (int)args.NewValue;
+ InitializePlayField();
+ }
+
+ async private void InitializeButton_Clicked(object sender, EventArgs e)
+ {
+ //Todo: instead of exception catching, validate entries
+ try
+ {
+ _langtonsAnt = new LangtonsAnt
+ {
+ EdgeLength = (int)SizeSlider.Value,
+ NumberOfSteps = Convert.ToInt32(NumberOfStepsEntry.Text),
+ StartX = Convert.ToInt32(StartXEntry.Text),
+ StartY = Convert.ToInt32(StartYEntry.Text),
+ StartDirection = DirectionPicker.SelectedItem.ToString().Substring(0, 1).ToLower(),//ToDo: Use Dictionary instead
+ };
+ }
+ catch (Exception)
+ {
+ await DisplayAlert("Start nicht möglich!", "Bitte korrigiere deine Eingaben.", "OK");
+ return;
+ }
+ _langtonsAnt = await _restDataService.InitializeLangtonsAntBackend(_langtonsAnt);
+ RefreshPlayField();
+ }
+
+ async private void NextStepButton_Clicked(object sender, EventArgs e)
+ {
+ if (string.IsNullOrEmpty(_langtonsAnt.ResultText))
+ return;
+ _langtonsAnt = await _restDataService.GetNextStepBackend();
+ RefreshPlayField();
+ }
+
+ private void TimerButton_Clicked(object sender, EventArgs e)
+ {
+ if (string.IsNullOrEmpty(_langtonsAnt.ResultText))
+ return;
+ if (_timer.IsRunning)
+ {
+ TimerStop();
+ }
+ else
+ {
+ TimerStart();
+ }
+
+ }
+
+ #endregion Events
+
+
+
+}
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MauiProgram.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MauiProgram.cs
new file mode 100644
index 0000000..f694171
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/MauiProgram.cs
@@ -0,0 +1,18 @@
+namespace LangtonsAntClient;
+
+public static class MauiProgram
+{
+ public static MauiApp CreateMauiApp()
+ {
+ var builder = MauiApp.CreateBuilder();
+ builder
+ .UseMauiApp()
+ .ConfigureFonts(fonts =>
+ {
+ fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
+ fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
+ });
+
+ return builder.Build();
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Models/LangtonsAnt.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Models/LangtonsAnt.cs
new file mode 100644
index 0000000..c25b3ef
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Models/LangtonsAnt.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LangtonsAntClient.Models
+{
+ class LangtonsAnt
+ {
+
+ public int EdgeLength { get; set; }
+
+ public int NumberOfSteps { get; set; }
+
+ public int StartX { get; set; }
+
+ public int StartY { get; set; }
+
+ public string StartDirection { get; set; }
+
+ public string ResultText { get; set; }
+
+ public string ErrMessage { get; set; }
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/AndroidManifest.xml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/AndroidManifest.xml
new file mode 100644
index 0000000..e9937ad
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/MainActivity.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/MainActivity.cs
new file mode 100644
index 0000000..eccbf5d
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/MainActivity.cs
@@ -0,0 +1,10 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+
+namespace LangtonsAntClient;
+
+[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
+public class MainActivity : MauiAppCompatActivity
+{
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/MainApplication.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/MainApplication.cs
new file mode 100644
index 0000000..c72d829
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/MainApplication.cs
@@ -0,0 +1,15 @@
+using Android.App;
+using Android.Runtime;
+
+namespace LangtonsAntClient;
+
+[Application]
+public class MainApplication : MauiApplication
+{
+ public MainApplication(IntPtr handle, JniHandleOwnership ownership)
+ : base(handle, ownership)
+ {
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/Resources/values/colors.xml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/Resources/values/colors.xml
new file mode 100644
index 0000000..c04d749
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Android/Resources/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #512BD4
+ #2B0B98
+ #2B0B98
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/AppDelegate.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/AppDelegate.cs
new file mode 100644
index 0000000..859ad58
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/AppDelegate.cs
@@ -0,0 +1,9 @@
+using Foundation;
+
+namespace LangtonsAntClient;
+
+[Register("AppDelegate")]
+public class AppDelegate : MauiUIApplicationDelegate
+{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/Info.plist b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/Info.plist
new file mode 100644
index 0000000..c96dd0a
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/Program.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/Program.cs
new file mode 100644
index 0000000..226afe0
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/MacCatalyst/Program.cs
@@ -0,0 +1,15 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace LangtonsAntClient;
+
+public class Program
+{
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Tizen/Main.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Tizen/Main.cs
new file mode 100644
index 0000000..370ab62
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Tizen/Main.cs
@@ -0,0 +1,16 @@
+using System;
+using Microsoft.Maui;
+using Microsoft.Maui.Hosting;
+
+namespace LangtonsAntClient;
+
+class Program : MauiApplication
+{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+
+ static void Main(string[] args)
+ {
+ var app = new Program();
+ app.Run(args);
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Tizen/tizen-manifest.xml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Tizen/tizen-manifest.xml
new file mode 100644
index 0000000..b2b36f6
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Tizen/tizen-manifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ maui-appicon-placeholder
+
+
+
+
+ http://tizen.org/privilege/internet
+
+
+
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/App.xaml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/App.xaml
new file mode 100644
index 0000000..528b421
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/App.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/App.xaml.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/App.xaml.cs
new file mode 100644
index 0000000..2fd3310
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/App.xaml.cs
@@ -0,0 +1,24 @@
+using Microsoft.UI.Xaml;
+
+// To learn more about WinUI, the WinUI project structure,
+// and more about our project templates, see: http://aka.ms/winui-project-info.
+
+namespace LangtonsAntClient.WinUI;
+
+///
+/// Provides application-specific behavior to supplement the default Application class.
+///
+public partial class App : MauiWinUIApplication
+{
+ ///
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ ///
+ public App()
+ {
+ this.InitializeComponent();
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/Package.appxmanifest b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/Package.appxmanifest
new file mode 100644
index 0000000..78b09d0
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/Package.appxmanifest
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+ $placeholder$
+ User Name
+ $placeholder$.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/app.manifest b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/app.manifest
new file mode 100644
index 0000000..f305534
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/Windows/app.manifest
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ true/PM
+ PerMonitorV2, PerMonitor
+
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/AppDelegate.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/AppDelegate.cs
new file mode 100644
index 0000000..859ad58
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/AppDelegate.cs
@@ -0,0 +1,9 @@
+using Foundation;
+
+namespace LangtonsAntClient;
+
+[Register("AppDelegate")]
+public class AppDelegate : MauiUIApplicationDelegate
+{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/Info.plist b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/Info.plist
new file mode 100644
index 0000000..0004a4f
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ LSRequiresIPhoneOS
+
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/Program.cs b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/Program.cs
new file mode 100644
index 0000000..226afe0
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Platforms/iOS/Program.cs
@@ -0,0 +1,15 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace LangtonsAntClient;
+
+public class Program
+{
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+}
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Properties/launchSettings.json b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Properties/launchSettings.json
new file mode 100644
index 0000000..edf8aad
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Properties/launchSettings.json
@@ -0,0 +1,8 @@
+{
+ "profiles": {
+ "Windows Machine": {
+ "commandName": "MsixPackage",
+ "nativeDebugging": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/AppIcon/appicon.svg b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/AppIcon/appicon.svg
new file mode 100644
index 0000000..9d63b65
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/AppIcon/appicon.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/AppIcon/appiconfg.svg b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/AppIcon/appiconfg.svg
new file mode 100644
index 0000000..21dfb25
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/AppIcon/appiconfg.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Fonts/OpenSans-Regular.ttf b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Fonts/OpenSans-Regular.ttf
new file mode 100644
index 0000000..1e9cd85
Binary files /dev/null and b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Fonts/OpenSans-Regular.ttf differ
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Fonts/OpenSans-Semibold.ttf b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Fonts/OpenSans-Semibold.ttf
new file mode 100644
index 0000000..316b352
Binary files /dev/null and b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Fonts/OpenSans-Semibold.ttf differ
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Raw/AboutAssets.txt b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Raw/AboutAssets.txt
new file mode 100644
index 0000000..15d6244
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Raw/AboutAssets.txt
@@ -0,0 +1,15 @@
+Any raw assets you want to be deployed with your application can be placed in
+this directory (and child directories). Deployment of the asset to your application
+is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.
+
+
+
+These files will be deployed with you package and will be accessible using Essentials:
+
+ async Task LoadMauiAsset()
+ {
+ using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
+ using var reader = new StreamReader(stream);
+
+ var contents = reader.ReadToEnd();
+ }
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Splash/splash.svg b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Splash/splash.svg
new file mode 100644
index 0000000..21dfb25
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Splash/splash.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Styles/Colors.xaml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Styles/Colors.xaml
new file mode 100644
index 0000000..245758b
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Styles/Colors.xaml
@@ -0,0 +1,44 @@
+
+
+
+
+ #512BD4
+ #DFD8F7
+ #2B0B98
+ White
+ Black
+ #E1E1E1
+ #C8C8C8
+ #ACACAC
+ #919191
+ #6E6E6E
+ #404040
+ #212121
+ #141414
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #F7B548
+ #FFD590
+ #FFE5B9
+ #28C2D1
+ #7BDDEF
+ #C3F2F4
+ #3E8EED
+ #72ACF1
+ #A7CBF6
+
+
\ No newline at end of file
diff --git a/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Styles/Styles.xaml b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Styles/Styles.xaml
new file mode 100644
index 0000000..1ec9d55
--- /dev/null
+++ b/katas/LangtonAnt/solutions/LangtonsAntClient/LangtonsAntClient/Resources/Styles/Styles.xaml
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/katas/StrangeChessboard/solutions/.gitkeep b/katas/StrangeChessboard/solutions/.gitkeep
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/.gitkeep
@@ -0,0 +1 @@
+
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard.sln b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard.sln
new file mode 100644
index 0000000..304bd72
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.6.33723.286
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StrangeChessboard", "StrangeChessboard\StrangeChessboard.csproj", "{7FA5E7AE-C0A9-43CC-B421-B3D2E8B4B831}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7FA5E7AE-C0A9-43CC-B421-B3D2E8B4B831}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7FA5E7AE-C0A9-43CC-B421-B3D2E8B4B831}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7FA5E7AE-C0A9-43CC-B421-B3D2E8B4B831}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7FA5E7AE-C0A9-43CC-B421-B3D2E8B4B831}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {201B63DD-9CC7-4B6A-97F2-945056A2FF01}
+ EndGlobalSection
+EndGlobal
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/Program.cs b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/Program.cs
new file mode 100644
index 0000000..c41a744
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/Program.cs
@@ -0,0 +1,47 @@
+class Program
+{
+
+ static void Main(string[] args)
+ {
+ //ToDo: Errorhandling Input Validation, individual methods for Inputs and Calculation
+ Console.WriteLine("Geben Sie die Anzahl der Zeilen/Spalten ein:");
+ int count = Convert.ToInt32(Console.ReadLine());
+ int[] cs = new int[count];
+ int[] rs = new int[count];
+
+ Console.WriteLine($"Geben Sie {count} Breiten für die Spalten ein:");
+ for (int i = 0; i < count; i++)
+ {
+ cs[i] = Convert.ToInt32(Console.ReadLine());
+ }
+ Console.WriteLine($"Geben Sie {count} Höhen für die Zeilen ein:");
+ for (int i = 0; i < count; i++)
+ {
+ rs[i] = Convert.ToInt32(Console.ReadLine());
+ }
+
+ bool isWhite = true;
+ (int white, int black) result = (0, 0);
+
+ foreach (int r in rs)
+ {
+ foreach (int c in cs)
+ {
+ if (isWhite)
+ {
+ result.white += r * c;
+ }
+ else
+ {
+ result.black += r * c;
+ }
+ isWhite = !isWhite;
+ }
+ }
+
+ Console.WriteLine("Testergebnis: " + (((result.white + result.black) == (rs.Sum() * cs.Sum())) ? "Erfolgreich" : "Fehlgeschlagen"));
+
+ Console.WriteLine("Ergebnis: " + result);
+ }
+}
+
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/StrangeChessboard.csproj b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/StrangeChessboard.csproj
new file mode 100644
index 0000000..40c60dd
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/StrangeChessboard.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.deps.json b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.deps.json
new file mode 100644
index 0000000..c00086a
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.deps.json
@@ -0,0 +1,23 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "StrangeChessboard/1.0.0": {
+ "runtime": {
+ "StrangeChessboard.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "StrangeChessboard/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.dll b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.dll
new file mode 100644
index 0000000..eda5c6b
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.dll differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.exe b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.exe
new file mode 100644
index 0000000..1b11945
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.exe differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.pdb b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.pdb
new file mode 100644
index 0000000..ab96d4b
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.pdb differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.runtimeconfig.json b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.runtimeconfig.json
new file mode 100644
index 0000000..4e96a56
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/bin/Debug/net6.0/StrangeChessboard.runtimeconfig.json
@@ -0,0 +1,9 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ }
+ }
+}
\ No newline at end of file
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.AssemblyInfo.cs b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.AssemblyInfo.cs
new file mode 100644
index 0000000..16e2cc7
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.AssemblyInfo.cs
@@ -0,0 +1,23 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("StrangeChessboard")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("StrangeChessboard")]
+[assembly: System.Reflection.AssemblyTitleAttribute("StrangeChessboard")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.AssemblyInfoInputs.cache b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..b7607df
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+30c9e0e3234351c2f01f9c8482a6f4581134e70c
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.GeneratedMSBuildEditorConfig.editorconfig b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..48adbd7
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,11 @@
+is_global = true
+build_property.TargetFramework = net6.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = StrangeChessboard
+build_property.ProjectDir = C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.GlobalUsings.g.cs b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.GlobalUsings.g.cs
new file mode 100644
index 0000000..ac22929
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.GlobalUsings.g.cs
@@ -0,0 +1,8 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.assets.cache b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.assets.cache
new file mode 100644
index 0000000..b16ea6b
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.assets.cache differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.AssemblyReference.cache b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..5f38e61
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.AssemblyReference.cache differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.BuildWithSkipAnalyzers b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.BuildWithSkipAnalyzers
new file mode 100644
index 0000000..e69de29
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.CoreCompileInputs.cache b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..65834ff
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+5a1ca499b4c719ac73a464c9a9ccf6194eb5d03a
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.FileListAbsolute.txt b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..0f2dd9b
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.csproj.FileListAbsolute.txt
@@ -0,0 +1,15 @@
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\bin\Debug\net6.0\StrangeChessboard.exe
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\bin\Debug\net6.0\StrangeChessboard.deps.json
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\bin\Debug\net6.0\StrangeChessboard.runtimeconfig.json
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\bin\Debug\net6.0\StrangeChessboard.dll
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\bin\Debug\net6.0\StrangeChessboard.pdb
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.csproj.AssemblyReference.cache
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.AssemblyInfoInputs.cache
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.AssemblyInfo.cs
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.csproj.CoreCompileInputs.cache
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.dll
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\refint\StrangeChessboard.dll
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.pdb
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\StrangeChessboard.genruntimeconfig.cache
+C:\Users\j.becker\source\repos\StrangeChessboard\StrangeChessboard\obj\Debug\net6.0\ref\StrangeChessboard.dll
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.dll b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.dll
new file mode 100644
index 0000000..eda5c6b
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.dll differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.genruntimeconfig.cache b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.genruntimeconfig.cache
new file mode 100644
index 0000000..277e44e
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.genruntimeconfig.cache
@@ -0,0 +1 @@
+0564143aa7ac7c111e6553c6e7151f7a121f9dfd
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.pdb b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.pdb
new file mode 100644
index 0000000..ab96d4b
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/StrangeChessboard.pdb differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/apphost.exe b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/apphost.exe
new file mode 100644
index 0000000..1b11945
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/apphost.exe differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/ref/StrangeChessboard.dll b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/ref/StrangeChessboard.dll
new file mode 100644
index 0000000..98ea754
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/ref/StrangeChessboard.dll differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/refint/StrangeChessboard.dll b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/refint/StrangeChessboard.dll
new file mode 100644
index 0000000..98ea754
Binary files /dev/null and b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/Debug/net6.0/refint/StrangeChessboard.dll differ
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.dgspec.json b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..c301961
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.dgspec.json
@@ -0,0 +1,75 @@
+{
+ "format": 1,
+ "restore": {
+ "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj": {}
+ },
+ "projects": {
+ "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj",
+ "projectName": "StrangeChessboard",
+ "projectPath": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj",
+ "packagesPath": "C:\\Users\\j.becker\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\obj\\",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "C:\\Program Files\\DevExpress 22.1\\Components\\Offline Packages",
+ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
+ "C:\\Microsoft\\Xamarin\\NuGet\\"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\j.becker\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\DevExpress 19.1.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\DevExpress 22.1.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net6.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\DevExpress 19.1\\Components\\System\\Components\\Packages": {},
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "C:\\Program Files\\DevExpress 22.1\\Components\\System\\Components\\Packages": {},
+ "C:\\Program Files\\dotnet\\library-packs": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net6.0": {
+ "targetAlias": "net6.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net6.0": {
+ "targetAlias": "net6.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.302\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.g.props b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.g.props
new file mode 100644
index 0000000..1742558
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.g.props
@@ -0,0 +1,18 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\j.becker\.nuget\packages\;C:\Program Files\DevExpress 22.1\Components\Offline Packages;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Microsoft\Xamarin\NuGet\
+ PackageReference
+ 6.6.0
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.g.targets b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.g.targets
new file mode 100644
index 0000000..35a7576
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/StrangeChessboard.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/project.assets.json b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/project.assets.json
new file mode 100644
index 0000000..42945c5
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/project.assets.json
@@ -0,0 +1,83 @@
+{
+ "version": 3,
+ "targets": {
+ "net6.0": {}
+ },
+ "libraries": {},
+ "projectFileDependencyGroups": {
+ "net6.0": []
+ },
+ "packageFolders": {
+ "C:\\Users\\j.becker\\.nuget\\packages\\": {},
+ "C:\\Program Files\\DevExpress 22.1\\Components\\Offline Packages": {},
+ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {},
+ "C:\\Microsoft\\Xamarin\\NuGet\\": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj",
+ "projectName": "StrangeChessboard",
+ "projectPath": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj",
+ "packagesPath": "C:\\Users\\j.becker\\.nuget\\packages\\",
+ "outputPath": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\obj\\",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "C:\\Program Files\\DevExpress 22.1\\Components\\Offline Packages",
+ "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
+ "C:\\Microsoft\\Xamarin\\NuGet\\"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\j.becker\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\DevExpress 19.1.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\DevExpress 22.1.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Xamarin.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net6.0"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\DevExpress 19.1\\Components\\System\\Components\\Packages": {},
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "C:\\Program Files\\DevExpress 22.1\\Components\\System\\Components\\Packages": {},
+ "C:\\Program Files\\dotnet\\library-packs": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net6.0": {
+ "targetAlias": "net6.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net6.0": {
+ "targetAlias": "net6.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.302\\RuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/project.nuget.cache b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/project.nuget.cache
new file mode 100644
index 0000000..4912f36
--- /dev/null
+++ b/katas/StrangeChessboard/solutions/StrangeChessboard/StrangeChessboard/obj/project.nuget.cache
@@ -0,0 +1,8 @@
+{
+ "version": 2,
+ "dgSpecHash": "l0SD7hVoY+En0occp8af5zy9tGQQVG67TseVXxQdKKVr1zU720Zb/lGPYsBBXXFkwpHEva1017kULB5bgkMfAA==",
+ "success": true,
+ "projectFilePath": "C:\\Users\\j.becker\\source\\repos\\StrangeChessboard\\StrangeChessboard\\StrangeChessboard.csproj",
+ "expectedPackageFiles": [],
+ "logs": []
+}
\ No newline at end of file