diff --git a/VocabularyTrainer/Trainer.cs b/VocabularyTrainer/Trainer.cs
index 1e65c67..bd833ac 100644
--- a/VocabularyTrainer/Trainer.cs
+++ b/VocabularyTrainer/Trainer.cs
@@ -34,7 +34,28 @@ public sealed class Trainer
var alreadyAsked = new bool[_vocabularyItems.Length];
for (var i = 0; i < CycleCount; i++)
{
- // TODO
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ int nextWord = PickNextWord(alreadyAsked);
+ Console.Write($"{i + 1}: {_vocabularyItems[nextWord].NativeWord, -10} = ");
+
+ Console.ResetColor();
+ string translationInput = Console.ReadLine()!;
+ alreadyAsked[nextWord] = true;
+
+ bool isTranslationCorrect = _vocabularyItems[nextWord].TestTranslation(translationInput);
+ if (isTranslationCorrect)
+ {
+ Console.ForegroundColor = ConsoleColor.Green;
+ Console.WriteLine("OK!");
+ }
+ else
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine($"No, {_vocabularyItems[nextWord].NativeWord} = {_vocabularyItems[nextWord].Translation}");
+
+ return;
+ }
+
Console.ResetColor();
}
Console.WriteLine();
@@ -69,8 +90,42 @@ public sealed class Trainer
/// Index of next word to use
private int PickNextWord(bool[] alreadyAsked)
{
- // TODO
- return -1;
+ //Instead of a while loop trying every combination, we randomize only between the useAble words
+ int useAbleWords = UseAbleWords(alreadyAsked, out int[] indexOfUseAbleWords);
+ int randomIndex = RandomProvider.Random.Next(0, useAbleWords - 1);
+
+ return indexOfUseAbleWords[randomIndex];
+
+ int UseAbleWords(bool[] alreadyAsked, out int[] indexOfUseAbleWords)
+ {
+ int count = CountUseAbleWords(alreadyAsked);
+ indexOfUseAbleWords = new int[count];
+ int j = 0;
+ for (int i = 0; i < alreadyAsked.Length; i++)
+ {
+ if (!alreadyAsked[i])
+ {
+ indexOfUseAbleWords[j] = i;
+ j++;
+ }
+ }
+
+ return count;
+ }
+
+ int CountUseAbleWords(bool[] alreadyAsked)
+ {
+ int count = 0;
+ for (int i = 0; i < alreadyAsked.Length; i++)
+ {
+ if (!alreadyAsked[i])
+ {
+ count++;
+ }
+ }
+
+ return count;
+ }
}
///
@@ -78,7 +133,19 @@ public sealed class Trainer
///
private void Sort()
{
- // TODO
+ for (int i = 0; i < _vocabularyItems.Length - 1; i++)
+ {
+ int result = _vocabularyItems[i].CompareTo(_vocabularyItems[i + 1]);
+ if (result > 0)
+ {
+ Swap(i, i + 1);
+ }
+ }
+
+ void Swap(int i, int j)
+ {
+ (_vocabularyItems[i], _vocabularyItems[j]) = (_vocabularyItems[j], _vocabularyItems[i]);
+ }
}
///
diff --git a/VocabularyTrainer/VocabularyItem.cs b/VocabularyTrainer/VocabularyItem.cs
index c1fd457..6f6164f 100644
--- a/VocabularyTrainer/VocabularyItem.cs
+++ b/VocabularyTrainer/VocabularyItem.cs
@@ -24,7 +24,7 @@ public sealed class VocabularyItem
public bool TestTranslation(string translationAttempt)
{
_countAsked++;
- if (Translation == translationAttempt)
+ if (string.Equals(Translation, translationAttempt, StringComparison.CurrentCultureIgnoreCase))
{
_countCorrect++;
return true;