Heu jugat mai a l’UNO? És un joc de cartes, les regles del qual presentem a continuació molt simplificades. Llegiu-les encara que ja hi hagueu jugat. Quatre jugadors, anomenats A, B, C i D, juguen per torns cíclicament, un rera l’altre (amb algunes excepcions explicades més avall). Inicialment es reparteixen 7 cartes a A, 7 cartes a B, etc. Les cartes tenen un color i un símbol. El color és un d’entre quatre: B, G, R o Y (les inicials de blue, green, red i yellow, respectivament). El símbol pot ser, de menys a més valor, o un nombre entre 0 i 9, o una marca de canvi de sentit, o de pèrdua de torn, o de robar dues cartes. Diem que dues cartes lliguen entre si quan coincideixen en el color o/i en el símbol.
Després de repartir les primeres 28 cartes, la següent carta es posa sobre la taula. Aquesta carta només serveix per començar a jugar i, si el seu símbol no és un nombre, s’ignora l’efecte que produiria (veieu més avall). Després, per torns, i començant amb A, el jugador a qui li toqui jugar tira una carta que lligui amb l’última carta tirada sobre la taula, i la posa a sobre. Si en pot tirar més d’una, ha de triar aquella amb més valor. En cas d’empat, la que tingui el color més gran alfabèticament. Si no en pot tirar cap, ha de robar una carta. Si aquesta carta lliga, la tira, i altrament passa. La partida acaba quan algun jugador es queda sense cartes.
Les cartes amb símbols especials tenen els efectes següents:
Simuleu una partida sencera d’UNO. Per generar les cartes, useu la funció pseudo-aleatòria definida per s′ = (97 * s + 20) % 32749. Per exemple, començant amb llavor 3, obtenim la seqüència (97 * 3 + 20) % 32749 = 311, (97 * 311 + 20) % 32749 = 30187, …Així, usem el 311 per decidir el color de la primera carta: 311 % 4 = 3, que es correspon a l’últim color (Y). I usem el 30187 per decidir el símbol: 30187 % 13 = 1, que es correspon a l’1. Els valors 10, 11 i 12 es corresponen a les cartes de canvi de sentit, pèrdua de torn, i de robar dues cartes, respectivament. Cada vegada que calgui generar una carta, ja sigui a l’inici de la partida, o perquè un jugador ha de robar, cal invocar dues vegades la funció pseudo-aleatòria.
Entrada
L’entrada consisteix en la llavor inicial: un nombre entre 0 i 32748.
Sortida
Simuleu una partida seguint el format dels exemples. Suposeu que la partida acabarà.
Input
3
Output
el jugador A rep (Y, 1), (R, 5), (B, 3), (G, 5), (G, 0), (G, 4), (R, 8) el jugador B rep (B, 3), (Y, 9), (R, 4), (Y, 3), (R, 8), (G, 2), (G, canvi) el jugador C rep (B, torn), (R, dues), (Y, torn), (G, 5), (R, 4), (R, torn), (R, 1) el jugador D rep (B, 2), (B, 4), (G, 8), (R, dues), (R, 1), (G, 2), (B, 9) la carta a la taula es (B, 6) el jugador A juga (B, 3) el jugador B juga (Y, 3) el jugador C juga (Y, torn) el jugador A juga (Y, 1) el jugador B juga (Y, 9) el jugador C roba (R, 5) el jugador C passa el jugador D juga (B, 9) el jugador A roba (Y, 3) el jugador A passa el jugador B juga (B, 3) el jugador C juga (B, torn) el jugador A roba (B, 2) el jugador A juga (B, 2) el jugador B juga (G, 2) el jugador C juga (G, 5) el jugador D juga (G, 8) el jugador A juga (R, 8) el jugador B juga (R, 8) el jugador C juga (R, dues) el jugador D roba (R, 8) el jugador D roba (G, 8) el jugador A juga (R, 5) el jugador B juga (R, 4) el jugador C juga (R, torn) el jugador A roba (R, 2) el jugador A juga (R, 2) el jugador B roba (R, 3) el jugador B juga (R, 3) el jugador C juga (R, 5) el jugador D juga (R, dues) el jugador A roba (B, 0) el jugador A roba (Y, torn) el jugador B roba (B, 4) el jugador B passa el jugador C juga (R, 4) el jugador D juga (R, 8) el jugador A roba (R, 8) el jugador A juga (R, 8) el jugador B roba (G, 8) el jugador B juga (G, 8) el jugador C roba (G, 0) el jugador C juga (G, 0) el jugador D juga (G, 8) el jugador A juga (G, 5) el jugador B juga (G, canvi) el jugador A juga (G, 4) el jugador D juga (B, 4) el jugador C roba (B, 5) el jugador C juga (B, 5) el jugador B juga (B, 4)
Input
3000
Output
el jugador A rep (B, 0), (G, 3), (B, 0), (Y, 0), (R, 6), (G, 8), (G, 3) el jugador B rep (B, 9), (Y, 6), (R, 7), (B, dues), (B, dues), (Y, 5), (G, 5) el jugador C rep (B, 7), (B, 1), (G, 2), (Y, 2), (B, 6), (G, dues), (G, 0) el jugador D rep (B, 0), (G, 5), (Y, 2), (B, canvi), (G, 5), (G, 3), (B, 2) la carta a la taula es (R, canvi) el jugador A juga (R, 6) el jugador B juga (R, 7) el jugador C juga (B, 7) el jugador D juga (B, canvi) el jugador C juga (B, 6) el jugador B juga (B, dues) el jugador A roba (G, 7) el jugador A roba (G, dues) el jugador D juga (B, 2) el jugador C juga (Y, 2) el jugador B juga (Y, 6) el jugador A juga (Y, 0) el jugador D juga (Y, 2) el jugador C juga (G, 2) el jugador B juga (G, 5) el jugador A juga (G, dues) el jugador D roba (B, 3) el jugador D roba (R, 0) el jugador C juga (G, dues) el jugador B roba (R, 7) el jugador B roba (Y, 1) el jugador A juga (G, 8) el jugador D juga (G, 5) el jugador C juga (G, 0) el jugador B roba (G, 7) el jugador B juga (G, 7) el jugador A juga (G, 7) el jugador D juga (G, 5) el jugador C roba (Y, 1) el jugador C passa el jugador B juga (Y, 5) el jugador A roba (B, 8) el jugador A passa el jugador D roba (R, 8) el jugador D passa el jugador C juga (Y, 1) el jugador B juga (Y, 1) el jugador A roba (R, dues) el jugador A passa el jugador D roba (G, torn) el jugador D passa el jugador C juga (B, 1)