Questa è in realtà una domanda basata su Mahjong, ma anche uno sfondo basato su Romme o su Poker sarà facilmente sufficiente a capire.Algoritmo per trovare strade e lo stesso tipo in una mano
In Mahjong 14 tessere (le tessere sono come carte in Poker) sono disposte a 4 set e una coppia. Una strada ("123") usa sempre esattamente 3 tessere, non di più e non di meno. Un set dello stesso tipo ("111") è composto esattamente da 3 tessere. Ciò porta a una somma di 3 * 4 + 2 = 14 tessere.
Ci sono varie eccezioni come Kan or Thirteen Orphans che non sono rilevanti qui. Anche i colori e gli intervalli di valori (1-9) non sono importanti per l'algoritmo.
Sto provando a determinare se una mano può essere disposta nel modo descritto sopra. Per determinati motivi dovrebbe non solo essere in grado di gestire 14 ma un numero qualsiasi di tessere. (Il passo successivo sarebbe quello di trovare quante tessere devono essere scambiati per essere in grado di completare una mano.)
Esempi:
11122233344455
- abbastanza facile, 4 insiemi e un accoppiamento.
12345555678999
-123, 456, 789, 555, 99
11223378888999
- 123, 123, 789, 888, 99
11223344556789
- non una mano valida
La mia idea attuale e non ancora implementato è questo: per ogni tessera, prova a fare a) una strada b) una serie c) una coppia. Se nessuno funziona (o ci sarebbe> 1 coppia), torna alla precedente iterazione e prova l'opzione successiva, oppure, se questo è il livello più alto, fallisci. Altrimenti, rimuovere le tessere usate dall'elenco delle tessere rimanenti e continuare con l'iterazione successiva.
Credo che questo approccio funzioni e sarebbe anche ragionevolmente veloce (le prestazioni sono un "bel bonus"), ma sono interessato alla tua opinione su questo. Puoi pensare a soluzioni alternative? Questo o qualcosa di simile esiste già?
(Non compiti a casa, I'm learning to play Mahjong.)
Oooohh lo so, userò le espressioni regolari !! 11! – mafu
Alcune persone, di fronte a un problema, pensano "Lo so, userò le espressioni regolari". Ora hanno due problemi.~ Jamie Zawinski :) –
Si può rompere fino a tre set cercando di formare una strada (o viceversa). È ok? –