Total von Grund auf neu geschrieben. Stellen Sie sich vor Sie N
Fragen (3 in der Demo) haben:
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"},
};
zunächst als true/false
beantwortet werden können, die zweite - eine von drei Städten etc. Dann Sie Sie alle möglichen Antworten mit einer einfachen Routine aufzählen kann:
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;
}
}
}
}
Zum Beispiel:
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);
Ergebnis:
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
Hinweis: Für N Fragen, dies ist die gleiche A mit einer Binärzahl mit N Bits, einen maximalen Wert von (2^N) geben -1. Sie können daher ein int verwenden, um von 0 bis (2^N) -1 zu zählen und die unteren N Bits zu betrachten. Jedes 1 Bit entspricht "True" und jedes 0 Bit entspricht "False". –