94 lines
3.2 KiB
C#
94 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using GameOfLife;
|
|
using GameOfLife.Entities;
|
|
using NUnit.Framework;
|
|
|
|
namespace GameOfLifeTests
|
|
{
|
|
public class PatternLibraryTests
|
|
{
|
|
[Test]
|
|
public void PrintLibrary()
|
|
{
|
|
var patternLibrary = new PatternLibrary();
|
|
//Assert.AreEqual(15, patternLibrary.PatternProjections.Count);
|
|
foreach (var p in patternLibrary.PatternProjections)
|
|
{
|
|
Console.WriteLine($"{p.Item1.Name}, {p.Item1.Type} {string.Join(" ", p.Item1.Comments)}");
|
|
foreach (var v in p.Item2)
|
|
{
|
|
Console.WriteLine(v.First());
|
|
PatternTestData.ConsoleWriteGrid(v.Offset(new Cell(2,0)));
|
|
Console.WriteLine();
|
|
}
|
|
Console.WriteLine("* * * * ");
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void MatchLibraryPatterns_SelfTest()
|
|
{
|
|
var patternLibrary = new PatternLibrary();
|
|
|
|
foreach (var pattern in patternLibrary.PatternProjections)
|
|
{
|
|
var matches = patternLibrary.MatchLibraryPatterns(pattern.Item2[0]);
|
|
// pattern metadata is the same
|
|
Assert.AreEqual(matches.Count(m => m.Item1 == pattern.Item1), 1);
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void MultTest()
|
|
{
|
|
|
|
var singleDigits = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }.Select(i=> i.ToString()[0]);
|
|
|
|
string ReplaceAtIndex(string s, char c, int i)
|
|
{
|
|
var array = s.ToCharArray();
|
|
array[i] = c;
|
|
return new string(array);
|
|
}
|
|
|
|
IEnumerable<int> EnumUnderscoreWithNumbers(string s)
|
|
{
|
|
var currIndex = s.IndexOf('_');
|
|
if (currIndex == -1) return new[] { int.Parse(s) };
|
|
var skip = currIndex == 0 ? 1 : 0;
|
|
return singleDigits.Skip(skip).SelectMany<char, int>(d => EnumUnderscoreWithNumbers(ReplaceAtIndex(s, d, currIndex)));
|
|
}
|
|
|
|
int PartialProduct(int m1, int m2, int digit)
|
|
{
|
|
var m2s = m2.ToString();
|
|
var c = int.Parse(m2s[m2s.Length - digit].ToString());
|
|
return m1 * c * (int)Math.Pow(10, digit - 1);
|
|
}
|
|
Console.WriteLine(PartialProduct(131, 73, 2));
|
|
|
|
|
|
string multplicand = "_3_";
|
|
string multiplier = "__";
|
|
string partialProd1 = "3__9";
|
|
string partialProd2 = "___";
|
|
string product = "9__9";
|
|
|
|
var r =
|
|
from mcnd in EnumUnderscoreWithNumbers(multplicand)
|
|
from mplr in EnumUnderscoreWithNumbers(multiplier)
|
|
from prdc in EnumUnderscoreWithNumbers(product)
|
|
from prt in EnumUnderscoreWithNumbers(partialProd1)
|
|
where PartialProduct(mcnd, mplr, 1) == prt && mcnd * mplr == prdc
|
|
select new { mcnd, mplr, prdc };
|
|
|
|
foreach (var result in r)
|
|
{
|
|
Console.WriteLine($"{result.mcnd} * {result.mplr} = {result.prdc}");
|
|
}
|
|
|
|
}
|
|
}
|
|
} |