Informatica Generale Homework 2: Giochi Lineari - TWiki

Transcript

Informatica Generale Homework 2: Giochi Lineari - TWiki
Informatica Generale
Homework 2: Giochi Lineari
docente: Ivano Salvo
Sapienza Università di Roma
pubblicazione: 22.IV.2013 - consegna 6.V.2013
Esercizio 1 (Anagrammi) Scrivere un programma C che legge in input due
stringhe s1 ed s2 e verifica se s1 è un anagramma di s2 . Attenzione al fatto
che eventuali caratteri ripetuti devono avere lo stesso numero di occorrenze in
s1 ed s2 .
Esempi: La stringa roma è anagramma di mora, ma non di morra.
Esercizio 2 (Poker I) Ciascuna carta di un comune mazzo di carte francesi
può essere codificata con un numero intero compreso tra 1 e 52. Convenendo
il consueto ordine sui semi (Cuori, Quadri, Fiori, Picche1 ) le carte di cuori
vengono codificate con i numeri da 1 a 13 (il numero 1 codifica l’asso di cuori,
il 2 è il 2, . . . , l’11 il Jack, il 12 la Donna, il 13 il Re), i Quadri con i numeri
da 14 a 26 (il 14 codifica l’asso di quadri, il 15 il 2, . . . , il 25 la Donna, il 26 il
Re), i Fiori con i numeri da 27 a 39 e infine le Picche con i numeri da 40 a 52.
A poker, ogni giocatore ha l’obiettivo di formare delle combinazioni con le
5 carte a disposizione. Le combinazioni possibili sono le seguenti (in ordine
crescente di valore): coppia (due carte dello stesso valore, come ad esempio
due assi, due 7 etc.), doppia coppia (due coppie), tris (tre carte dello stesso
valore), scala (cinque carte in sequenza, tenendo conto che l’asso può valere
sia 1 che 14), colore (cinque carte tutte dello stesso seme, non necessariamente
in sequenza), full (un tris più una coppia), poker (quattro carte dello stesso
valore), scala reale (che è contemporaneamente colore e scala).
Dovete scrivere un programma che legge in input 10 interi compresi tra 1
e 52, interpreta i primi 5 come le carte in mano al giocatore 1, i secondi 5
1
per memorizzare questo ordinamento ricordate la filastrocca Come Quando Fuori Piove,
dove ogni parola identifica il seme con la stessa iniziale.
1
come le carte in mano al giocatore 2, e stampa il numero del giocatore con la
combinazione più alta (cioè 1 o 2).
In questo esercizio supponete che i due giocatori abbiano due combinazioni
diverse (cioè non ci sono mai due coppie, due colori etc.).
Esempi: La sequenza di input 42, 3, 41, 28, 16, 21, 36, 35, 11,
25 rappresenta la mano {3♠, 3♥, 2♠, 3♣, 3♦} per il giocatore 1 e la mano
{8♦, 10♣, 9♣, J♥, Q♦} per giocatore 2. In questo caso, il programma deve
rispondere 1, in quanto il poker di 3 batte la scala.
Esercizio 3 (Poker II, Facoltativo) Come nell’esercizio precedente, ma
con le seguenti complicazioni:
• dovete considerate input di 20 interi, che rappresentano le carte di 4
giocatori;
• dovete produrre in output la classifica tra i 4 giocatori stampando (un
numero per riga) i numeri dei giocatori partendo da quello con la combinazione più alta fino a quello con la combinazione più bassa.
• dovete riuscire a distinguere la vincente tra due combinazioni uguali (cioè
tra due scale, due colori, etc.) secondo le regole in questa nota2 .
Esempio: La sequenza di input 42, 2, 41, 29, 3, 21, 36, 35, 11,
25, 43, 40, 30, 4, 14, 8, 23, 9, 37, 12 rappresenta la mano {3♠, 2♥,
2♠, 3♣, 3♥} per il giocatore 1, la mano {8♦, 10♣, 9♣, J♥, Q♦}, per giocatore
2, la mano {4♠, A♠, 4♣, 4♥, A♦} per il giocatore 3 e la mano {8♥, 10♦, 9♥, J♣,
Q♥} per il giocatore 4. In questo caso, il programma deve rispondere:
3
1
4
2
Infatti il full del giocatore 3 è più alto del full del giocatore 1 (tris di 4 invece
di tris di 3), mentre la scala del giocatore 4 è più alta della scala del giocatore
2 (donna di cuori invece che donna di quadri).
2
Tra due coppie, vince la coppia formata dalle carte di valore più alto. In caso di parità
si guarda la carta più alta tra le 3 rimanenti: prima il valore e in caso di ulteriore parità il
seme (sempre privilegiando nell’ordine Cuori, Quadri, Picche e Fiori). Tra due doppie coppie
si confronta prima la coppia più alta, in caso di parità si considera la coppia più bassa e in
caso di ulteriore parità la quinta carta, seguendo il principio visto prima. Tra due tris, vince
quello di valore maggiore (non ci possono essere due tris dello stesso valore). Analogamente,
tra due poker. Tra due full, è rilevante il tris di valore maggiore. Tra due scale, si confronta
la carta più alta. In caso di ulteriore parità si guarda il seme della carta più alta. Idem per
la scala reale.
2