Skip to content

Commit

Permalink
Day 2.2 csharp
Browse files Browse the repository at this point in the history
  • Loading branch information
szymczakk committed Dec 5, 2018
1 parent 54ec1df commit e0d5776
Show file tree
Hide file tree
Showing 6 changed files with 448 additions and 0 deletions.
45 changes: 45 additions & 0 deletions 2018/2018.sln
Expand Up @@ -19,6 +19,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Day2", "Day2", "{67821840-5
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Day2.1.Tests", "Day2.1.Tests\Day2.1.Tests.fsproj", "{D2932BD7-5090-42E8-9AE2-D58E213F0F8C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day2.1.csharp", "Day2.1.csharp\Day2.1.csharp.csproj", "{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day2.2.csharp", "Day2.2.csharp\Day2.2.csharp.csproj", "{84E91404-E3C7-46D2-812A-E0BA35624D90}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Day2.2.csharp.Tests", "Day2.2.csharp.Tests\Day2.2.csharp.Tests.csproj", "{FD011C8A-F965-4774-9248-98654E68618D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -101,6 +107,42 @@ Global
{D2932BD7-5090-42E8-9AE2-D58E213F0F8C}.Release|x64.Build.0 = Release|Any CPU
{D2932BD7-5090-42E8-9AE2-D58E213F0F8C}.Release|x86.ActiveCfg = Release|Any CPU
{D2932BD7-5090-42E8-9AE2-D58E213F0F8C}.Release|x86.Build.0 = Release|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Debug|x64.ActiveCfg = Debug|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Debug|x64.Build.0 = Debug|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Debug|x86.ActiveCfg = Debug|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Debug|x86.Build.0 = Debug|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Release|Any CPU.Build.0 = Release|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Release|x64.ActiveCfg = Release|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Release|x64.Build.0 = Release|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Release|x86.ActiveCfg = Release|Any CPU
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D}.Release|x86.Build.0 = Release|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Debug|x64.ActiveCfg = Debug|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Debug|x64.Build.0 = Debug|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Debug|x86.ActiveCfg = Debug|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Debug|x86.Build.0 = Debug|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Release|Any CPU.Build.0 = Release|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Release|x64.ActiveCfg = Release|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Release|x64.Build.0 = Release|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Release|x86.ActiveCfg = Release|Any CPU
{84E91404-E3C7-46D2-812A-E0BA35624D90}.Release|x86.Build.0 = Release|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Debug|x64.ActiveCfg = Debug|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Debug|x64.Build.0 = Debug|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Debug|x86.ActiveCfg = Debug|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Debug|x86.Build.0 = Debug|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Release|Any CPU.Build.0 = Release|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Release|x64.ActiveCfg = Release|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Release|x64.Build.0 = Release|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Release|x86.ActiveCfg = Release|Any CPU
{FD011C8A-F965-4774-9248-98654E68618D}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -112,6 +154,9 @@ Global
{6674442D-C15A-43C9-B242-BFCB67C9087E} = {B392A7FC-B7EC-4F15-8ECF-F581A058B927}
{3F11B5E6-4E5A-4901-B00A-E114DEDEED31} = {67821840-5006-4989-B014-A53B10BB76AC}
{D2932BD7-5090-42E8-9AE2-D58E213F0F8C} = {67821840-5006-4989-B014-A53B10BB76AC}
{DBFF9CCB-D596-49AC-8F73-62A22AD5F31D} = {67821840-5006-4989-B014-A53B10BB76AC}
{84E91404-E3C7-46D2-812A-E0BA35624D90} = {67821840-5006-4989-B014-A53B10BB76AC}
{FD011C8A-F965-4774-9248-98654E68618D} = {67821840-5006-4989-B014-A53B10BB76AC}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D5016E34-CE20-4E3F-8428-292DEEF43940}
Expand Down
20 changes: 20 additions & 0 deletions 2018/Day2.2.csharp.Tests/Day2.2.csharp.Tests.csproj
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RootNamespace>Day2._2.csharp.Tests</RootNamespace>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Day2.2.csharp\Day2.2.csharp.csproj" />
</ItemGroup>

</Project>
40 changes: 40 additions & 0 deletions 2018/Day2.2.csharp.Tests/UnitTest1.cs
@@ -0,0 +1,40 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;

namespace Day2._2.csharp.Tests
{
[TestClass]
public class UnitTest1
{
private readonly string[] _testSet = new string[]
{
"abcde",
"fghij",
"klmno",
"pqrst",
"fguij",
"axcye",
"wvxyz"
};

[TestMethod]
public void MainTest()
{
var result = Day2._2.csharp.Program.Calculate(_testSet);

Assert.AreEqual("fgij", result);
}

[TestMethod]
public void TestHelperFunction()
{
var testString1 = "abcdef";
var testString2 = "abcqwe";
var testString3 = "zxcasd";

Assert.AreEqual(3, Program.GetStringDistance(testString1, testString2));
Assert.AreEqual(5, Program.GetStringDistance(testString1, testString3));
Assert.AreEqual(0, Program.GetStringDistance(testString3, testString3));
}
}
}
19 changes: 19 additions & 0 deletions 2018/Day2.2.csharp/Day2.2.csharp.csproj
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RootNamespace>Day2._2.csharp</RootNamespace>
</PropertyGroup>

<ItemGroup>
<None Remove="input.txt" />
</ItemGroup>

<ItemGroup>
<Content Include="input.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>

</Project>
74 changes: 74 additions & 0 deletions 2018/Day2.2.csharp/Program.cs
@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Day2._2.csharp
{
public class Program
{
static void Main(string[] args)
{
var input = System.IO.File.ReadAllLines("input.txt");

var result = Calculate(input);

Console.WriteLine(result);
}

public static string Calculate(string[] inputLines)
{
(string, string)? searchDistanceResult = null;

for (var i = 0; i < inputLines.Count(); i++)
{
searchDistanceResult = GetStringDistance(inputLines[i], inputLines.Skip(i + 1));
if (searchDistanceResult != null)
{
break;
}
}

var resultSb = new StringBuilder();

for(var i = 0; i < searchDistanceResult.Value.Item1.Length; i++)
{
if (searchDistanceResult.Value.Item1[i] == searchDistanceResult.Value.Item2[i])
{
resultSb.Append(searchDistanceResult.Value.Item1[i]);
}
}

return resultSb.ToString();
}

private static (string, string)? GetStringDistance(string s1, IEnumerable<string> inputs)
{
foreach (var input in inputs)
{
if (GetStringDistance(s1, input) == 1)
{
return (s1, input);
}
}
return null;
}

public static int GetStringDistance(string s1, string s2)
{
if (s1.Length != s2.Length)
{
throw new ArgumentException();
}

var result = 0;

for (var i = 0; i < s1.Length; i++)
{
if (s1[i] != s2[i]) result++;
}

return result;
}
}
}

0 comments on commit e0d5776

Please sign in to comment.