Ich habe ehrlich gesagt nie Kniffel gespielt und weiß auch nicht 100%ig was ein Pasch ist, aber vielleicht dient dir dieser Code hier als Denkanstoß:
#include <algorithm> // generate, sort
#include <iostream> // cout, endl
#include <map>
#include <random>
#include <vector>
#include <cstdlib> // size_t
using namespace ::std;
[[nodiscard]] inline auto roll(const size_t count=5ul) {
vector<int> result(count);
random_device rng;
uniform_int_distribution dist { 1, 6 };
generate(result.begin(), result.end(), [&] () { return dist(rng); });
return result;
}
int main() {
auto rolls { roll() };
map<int, size_t> counter;
cout << "[ROLLS]" << endl;
for (const auto n : rolls) {
++counter[n];
cout << n << endl;
}
cout << endl;
cout << "[STATS]" << endl;
for (const auto p : counter) {
cout << p.first << ": " << p.second << " times" << endl;
}
cout << endl;
sort(rolls.begin(), rolls.end(), [&] (const auto a, const auto b) {
return counter[a] * a > counter[b] * b;
});
cout << "[SORTED]" << endl;
for (const auto n : rolls) {
cout << n << endl;
}
}
Um das zu kompilieren, brauchst du einen modernen Compiler, der C++17 unterstützt.
Die Ausgabe sieht ungefähr so aus:
[ROLLS]
4
5
4
1
1
[STATS]
1: 2 times
4: 2 times
5: 1 times
[SORTED]
4
4
5
1
1
Es wird also 5 mal gewürfelt (Zahlen 1 bis 6), danach gezählt wie oft welche Zahl gewürfelt wurde, und am Ende die ganzen Würfe so sortiert, dass die Kombination mit der höchsten Punktzahl am Anfang und die mit der niedrigsten am Ende steht.
Aber wie gesagt, ich kenne Kniffel nicht aus eigener Erfahrung, weshalb der obige Code jetzt keine fertige Lösung, sondern nur eine Idee ist.
Vielleicht hilft dir das ja etwas weiter.
Viel Spaß noch beim Programmieren. :)
PS: Selbst für so ein einfaches Würfelspiel wie Kniffel ist die rand()-Funktion aus der alten C-Bibliothek ungeeignet, weil dabei sehr oft die gleichen Zahlen auftreten werden. Der Algorithmus dahinter ist bekannt dafür sehr schlecht zu sein und eine äußerst miese Zufallsverteilung zu haben.
Es ist besser, wenn du einen der Zufallszahlengeneratoren aus der modernen C++ Standardbibliothek nimmst. Ich habe oben "random_device" genommen. Das muss nicht geseedet werden und erzeugt die besten Zufallszahlen.