Domanda

Sto cercando un algoritmo che determinerà se l'attuale mano Mahjong è vincente. Se non hai familiarità con il gioco, ecco l'idea di base (semplificata):

  • Ci sono tre semi di piastrelle, ciascuna contenente piastrelle classificate 1-9. Ci sono anche piastrelle speciali, sette tipi di esse. Ogni piastrella esiste in quattro copie, quindi ci sono 36 piastrelle di ogni seme e 28 piastrelle speciali.
  • Una mano ha 14 piastrelle.
  • UN rancio è un insieme di tre tessere di un singolo rango in sequenza.
  • UN pong è un insieme di tre tessere identiche.
  • UN Kong è un insieme di quattro piastrelle identiche.
  • UN coppia è un insieme di due piastrelle identiche.
  • Una mano vincente è una in cui le piastrelle formano un numero qualsiasi di zuppa, pong e/o kong e una coppia.

La mano è ordinata per seme e poi per rango. La mia idea è qualcosa di simile:

  1. Contrassegna tutte le tessere come non visite e non vincitori.
  2. Visita la prima piastrella non visitata.
  3. Controlla le piastrelle successive fino a quando non si incontra un chow, un pong o un kong, o fino a quando non vi è alcuna possibilità. Se una combinazione viene completata, contrassegnare tutte le tessere partecipanti visitate e vincenti
  4. Se tutte le piastrelle sono state visitate, controlla se tutti vincono. Se non tutte le piastrelle sono state visitate, vai a 2.

Il problema è che una volta che una piastrella fa parte di una combinazione non può essere un membro di qualsiasi altra combinazione, una che potrebbe rendere la mano vincente.

Qualche idea per un algoritmo di lavoro?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top