From 8969e1fdf3d4f15e53734ba82db49383d7ac139d Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Fri, 13 Apr 2018 15:11:31 +0200 Subject: [PATCH] automate --- Yavsc.Abstract/IT/CodeFromChars.cs | 40 ++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/Yavsc.Abstract/IT/CodeFromChars.cs b/Yavsc.Abstract/IT/CodeFromChars.cs index cd1864cc..b8e2f0d6 100644 --- a/Yavsc.Abstract/IT/CodeFromChars.cs +++ b/Yavsc.Abstract/IT/CodeFromChars.cs @@ -38,13 +38,15 @@ namespace Yavsc.Abstract.IT var candide = new CharArray(letter); // TODO build new denied letters: compute the automate - + // and check it is determinised + // Automate a = new Automate(); Add(candide); } - public bool Validate() { + // this is a n*n task + throw new NotImplementedException(); } @@ -58,5 +60,39 @@ namespace Yavsc.Abstract.IT return GetEnumerator(); } + private class Automate + { + int State { get; set; } + + Dictionary> Transitions { get; set; } + + CodeFromChars Code { get; set; } + + void Compute(CharArray chars) + { + if (!Code.Contains(chars)) { + State = -1; + return; + } + + if (!Transitions.ContainsKey(State)) { + State = -2; + return; + } + + var states = Transitions[State]; + + int letter = Code.IndexOf(chars); + + if (!states.ContainsKey(letter)) + { + State = -3; + return; + } + + State = states[letter]; + + } + } } } \ No newline at end of file