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