Added some analysis.

This commit is contained in:
Mark Hamann 2016-02-26 08:42:40 -08:00
parent 8ad36377f2
commit be4980e690
3 changed files with 134 additions and 10 deletions

View file

@ -35,8 +35,14 @@ namespace MorseTrainer
{
_resultsRTB.Clear();
MorseCompareResults results = Comparer.Compare(sent, recorded);
ShowStrings(results);
ShowStats(results);
}
private void ShowStrings(MorseCompareResults results)
{
Write("I sent : ");
ResultsDisplayFlags flags = ResultsDisplayFlags.Valid | ResultsDisplayFlags.Dropped;
ResultsFlags flags = ResultsFlags.Valid | ResultsFlags.Dropped;
foreach (MorseSubstring substring in results.SubStrings)
{
Write(substring.Str(flags), substring.Color);
@ -44,13 +50,59 @@ namespace MorseTrainer
Write(Environment.NewLine);
Write("You typed: ");
flags = ResultsDisplayFlags.Valid | ResultsDisplayFlags.Extra;
flags = ResultsFlags.Valid | ResultsFlags.Extra;
foreach (MorseSubstring substring in results.SubStrings)
{
Write(substring.Str(flags), substring.Color);
}
Write(Environment.NewLine);
}
private void ShowStats(MorseCompareResults results)
{
int[] sent = new int[256];
int[] valid = new int[256];
int[] dropped = new int[256];
int[] extra = new int[256];
int totalValid = 0;
foreach (char c in results.Sent)
{
sent[c]++;
}
foreach (MorseSubstring substring in results.SubStrings)
{
int[] counter = null;
switch (substring.ResultInfo & ResultsFlags.All)
{
case ResultsFlags.Dropped:
counter = dropped;
break;
case ResultsFlags.Extra:
counter = extra;
break;
case ResultsFlags.Valid:
counter = valid;
totalValid += substring.Chars.Length;
break;
}
if (counter != null)
{
foreach (char c in substring.Chars)
{
counter[c]++;
}
}
}
Write(String.Format("Sent {0} and {1} recorded valid: {2}%" + Environment.NewLine, results.Sent.Length, totalValid, (float)totalValid / (float)results.Sent.Length));
foreach (char c in MorseInfo.PossibleCharacters)
{
if (sent[c] != 0 || extra[c] != 0)
{
Write(String.Format(" {0} {1}/{2} : {3},{4}" + Environment.NewLine, MorseInfo.ExpandProsigns(c), valid[c], sent[c], dropped[c], extra[c]));
}
}
}
private void Write(String text)

View file

@ -29,7 +29,7 @@ namespace MorseTrainer
/// Flags that indicate how to display results
/// </summary>
[Flags]
public enum ResultsDisplayFlags
public enum ResultsFlags
{
/// <summary>
/// Display characters that were received as sent
@ -148,7 +148,15 @@ namespace MorseTrainer
/// </summary>
/// <param name="flags">Flags saying which characters to include</param>
/// <returns></returns>
public abstract String Str(ResultsDisplayFlags flags = ResultsDisplayFlags.All);
public abstract String Str(ResultsFlags flags = ResultsFlags.All);
/// <summary>
/// Gets information about the string
/// </summary>
public abstract ResultsFlags ResultInfo
{
get;
}
protected string _str;
}
@ -163,16 +171,24 @@ namespace MorseTrainer
{
}
public override string Str(ResultsDisplayFlags flags)
public override string Str(ResultsFlags flags)
{
String ret = "";
if ((flags & ResultsDisplayFlags.Valid) != 0)
if ((flags & ResultsFlags.Valid) != 0)
{
ret = MorseInfo.ExpandProsigns(_str);
}
return ret;
}
public override ResultsFlags ResultInfo
{
get
{
return ResultsFlags.Valid;
}
}
public override Color Color
{
get
@ -192,16 +208,24 @@ namespace MorseTrainer
{
}
public override string Str(ResultsDisplayFlags flags)
public override string Str(ResultsFlags flags)
{
String ret = "";
if ((flags & ResultsDisplayFlags.Dropped) != 0)
if ((flags & ResultsFlags.Dropped) != 0)
{
ret = MorseInfo.ExpandProsigns(_str);
}
return ret;
}
public override ResultsFlags ResultInfo
{
get
{
return ResultsFlags.Dropped;
}
}
public override Color Color
{
get
@ -221,16 +245,24 @@ namespace MorseTrainer
{
}
public override string Str(ResultsDisplayFlags flags)
public override string Str(ResultsFlags flags)
{
String ret = "";
if ((flags & ResultsDisplayFlags.Extra) != 0)
if ((flags & ResultsFlags.Extra) != 0)
{
ret = MorseInfo.ExpandProsigns(_str);
}
return ret;
}
public override ResultsFlags ResultInfo
{
get
{
return ResultsFlags.Extra;
}
}
public override Color Color
{
get

View file

@ -130,8 +130,19 @@ namespace MorseTrainer
}
__elements[i] = elements;
}
List<Char> hasConversion = new List<char>();
for (int i=0; i<256; i++)
{
if (__conversions[i] != null)
{
hasConversion.Add((Char)i);
}
}
__orderedPossibleCharacters = hasConversion.ToArray<Char>();
}
private static readonly Char[] __orderedPossibleCharacters;
private static Dictionary<String, char> __prosignExpansionToValue;
private static Dictionary<char, String> __prosignValueToExpansion;
private static String[] __conversions;
@ -186,6 +197,24 @@ namespace MorseTrainer
return replaced;
}
/// <summary>
/// Converts a string with prosign constants into a string containing
/// the expanded prosigns
/// </summary>
/// <param name="c">A char with prosign constants</param>
/// <returns>A string with expanded prosigns</returns>
public static String ExpandProsigns(Char c)
{
String replaced = c.ToString();
foreach (KeyValuePair<String, char> kv in __prosignExpansionToValue)
{
String expansion = kv.Key;
String value = kv.Value.ToString();
replaced = replaced.Replace(value, expansion);
}
return replaced;
}
/// <summary>
/// Converts a string with prosign constants into a string containing
/// the expanded prosigns
@ -203,5 +232,16 @@ namespace MorseTrainer
}
return replaced;
}
/// <summary>
/// Gets an array of possible characters in ASCII/prosign order
/// </summary>
public static Char[] PossibleCharacters
{
get
{
return __orderedPossibleCharacters;
}
}
}
}