2 Stimmen

Algorithmus zur Erstellung einzigartiger Bingo-Karten

Weiß jemand von einem Algorithmus, der eindeutige Bingo-Kartengesichter generieren kann? Ich möchte diesen Algorithmus in C# implementieren.

Danke,

1 Stimmen

faqs.org/patents/app/20090100118 Es ist wahrscheinlich patentiert.

3 Stimmen

@dtb: Ich verleihe Ihnen den Preis für die Untertreibung des Jahres: Sie verlinken zu einem Patent auf einer Patentseite und warnen dann, dass die Idee "wahrscheinlich patentiert" ist. hehe

0 Stimmen

Beachten Sie, dass es 111.007.923.832.370.565 mögliche verschiedene Bingo-Karten gibt, unter der Annahme von US-Karten (3003 Permutationen pro Spalte, 1365 für die mittlere). Die Wahrscheinlichkeit von Duplikaten ist unglaublich klein.

4voto

Eric Punkte 18971

Holen Sie sich 5 Sätze mit jeweils 15 Zahlen (1-15 für Satz 1, 16-30 für Satz 2...)
Wählen Sie 5 verschiedene Zahlen in den Sätzen 1,2,4,5 aus
Wählen Sie 4 verschiedene Zahlen im Satz 3 aus

Um zu überprüfen, ob diese Karte bereits existiert
Überprüfen Sie jede vorhandene Karte auf die Übereinstimmung oben links mit neuer Karte
Wenn beide Zahlen gleich sind, gehen Sie zur zweiten Zahl über
Wenn Sie 24 Mal dieselbe Zahl am selben Ort erhalten, sind beide Karten gleich und die neue Karte muss abgelehnt werden

0 Stimmen

Vielleicht könntest du eine Funktion erstellen, die die Bingo-Karte eindeutig hasht, anstatt jeden Wert vergleichen zu müssen?

0 Stimmen

Endet schließlich damit, etwas leicht unterschiedliches zu tun, aber entlang ähnlicher Linien wie von Ihnen oben vorgeschlagen und verwendet ein Wörterbuch, um die Muster der 5 Spalten zu hashen (jede Spalte auf eine Permutation von 5 Zahlen aus 15 reduzierend) und es scheint sowohl in Leistung als auch im Speicherverbrauch recht gut zu funktionieren.

1 Stimmen

Ich bin mir nicht sicher, ob es effizienter ist, da Sie immer 24 Zahlen hashen müssen, während Sie in der if-Lösung im besten Fall nur 1 Vergleich haben. Es wäre richtig, eine kleine Verteilungswahrscheinlichkeit zu berechnen und es sei denn, Sie generieren eine große Anzahl von Karten, bezweifle ich, dass Sie so viele Kollisionen haben werden.

0voto

Joanis Punkte 1659

Dies ist ein interessantes Problem, aber wie Michael Madsen berichtet hat, wäre es wahrscheinlich besser, sie zufällig zu generieren und dann zu überprüfen, ob Sie Duplikate haben. (Es sei denn, Sie möchten alle 111 Billiarden Möglichkeiten generieren, für die ich hoffe, dass Sie Speicherplatz haben!)

0voto

ICR Punkte 13528

Hier ist eine Funktion zum Generieren einer zufälligen Teilmenge von Ganzzahlen aus einem gegebenen Bereich, die für Sie nützlich sein könnte:

private static IEnumerable RandomSubsetOfRange(int min, int max, int count)
{
    Random random = new Random();

    int size = max - min + 1;
    for (int i = 0; i <= size; i += 1)
    {
        if (random.NextDouble() <= ((float)count / (float)(size - i + 1)))
        {
            yield return min + i;
            count -= 1;
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X