Totalement entièrement réécrit. Imaginez que vous avez des questions N
(3 dans la démo):
string[][] questionsAndAnswers = new string[][] {
// Two times Two is Four?
new string[] { "true", "false"},
// What is the capital of Russia?
new string[] { "Berlin", "Moscow", "London"},
// Sqrt(3 * 3 + 4 * 4) = ?
new string[] { "1", "2", "3", "5"},
};
premier peut répondre comme true/false
, deuxième - l'une des trois villes, etc. Ensuite, vous vous pouvez énumérer toutes les réponses possibles avec une routine simple:
private static IEnumerable<string> Generator(string[][] answers) {
int[] indexes = new int[answers.Length];
while (true) {
yield return string.Join("\t", answers
.Select((answer, idx) => answer[indexes[idx]]));
for (int i = 0; i < indexes.Length; ++i) {
if (indexes[i] < answers[i].Length - 1) {
indexes[i] += 1;
break;
}
else {
if (i == indexes.Length - 1)
yield break;
indexes[i] = 0;
}
}
}
}
Par exemple:
string caption = string.Join("\t", Enumerable
.Range(1, questionsAndAnswers.Length)
.Select(i => $"Question {i}"));
// Or loop - foreach - instead of Join
string body = string.Join(Environment.NewLine, Generator(questionsAndAnswers));
string report = string.Join(Environment.NewLine, caption, body);
Console.WriteLine(report);
Résultat:
Question 1 Question 2 Question 3
true Berlin 1
false Berlin 1
true Moscow 1
false Moscow 1
true London 1
false London 1
true Berlin 2
false Berlin 2
true Moscow 2
false Moscow 2
true London 2
false London 2
true Berlin 3
false Berlin 3
true Moscow 3
false Moscow 3
true London 3
false London 3
true Berlin 5
false Berlin 5
true Moscow 5 // <- The right answer
false Moscow 5
true London 5
false London 5
Remarque: Pour des questions N, ceci est le même un ayant un nombre binaire à N bits, ce qui donne une valeur maximale de (2^N) -1. Vous pouvez donc utiliser un int pour compter de 0 à (2^N) -1 et regarder les N bits inférieurs. Chaque bit 1 correspond à 'True' et chaque bit 0 correspond à' False'. –