introduzione
Skat è un tradizionale gioco di carte tedesco per 3 giocatori. Il mazzo è composto da 32 carte: Asso, Re, Regina, Jack, 10, 9, 8, 7 in tutti e 4 i semi (fiori, picche, cuori, quadri).
In ogni round un giocatore gioca da solo mentre gli altri due giocano contro di lui. All'inizio di un round a ciascun giocatore vengono distribuite 10 carte, le restanti 2 carte vengono chiamate skat e vengono messe coperte nel mezzo. Il giocatore solista è determinato da una fase di offerta. Questa è la parte del gioco che dovrai affrontare in questa sfida, maggiori dettagli su questo sotto.
Il giocatore che vince la fase di offerta diventa il giocatore solista. Prende lo skat e poi lascia due carte (che possono essere le stesse, l'altra squadra non lo sa), prende il seme di briscola e inizia il round.
Un round è composto da dieci prese. Il giocatore che vince una presa conduce la successiva fino a quando non vengono giocate tutte le carte. Non spiegherò qui le regole, ma dovresti sapere che avere molte carte vincenti è buono. Se vuoi conoscere le regole controlla l'articolo di Wikipedia che ho collegato all'inizio di questo post, ma non è necessario per questa sfida.
La sfida
Vuoi insegnare ai tuoi due figli a giocare a skat. Le regole non sono così difficili, quindi entrano rapidamente in gioco. L'unica cosa che li rende difficili è l'offerta, in particolare calcolando il valore di gioco della loro mano. Quindi decidi di scrivere un piccolo programma che produca il massimo valore di gioco che possono offrire in base alla loro mano attuale.
Calcolo del valore del gioco
Ogni mano ha un certo valore di gioco. È determinato dalla quantità di Jack sequenziali che hai e dal seme che vuoi scegliere come briscola. Cominciamo con il primo fattore, i jack!
Il fattore Jack
I jack sono sempre carte vincenti e battono ogni altra carta vincente. L'ordine di forza tra i quattro jack è:
- Jack of Clubs (il più alto)
- Jack di picche
- Jack di cuori
- Jack of Diamonds (il più basso)
Nell'ulteriore spiegazione farò riferimento a loro con i numeri che ho assegnato loro qui.
Ricordi che c'è un qualche tipo di fattore che ottieni dai Jack in mano che fa parte del valore del gioco? Grande! Ecco come lo ottieni:
Questo fattore Jack è il numero di Jack migliori (vedi ordine sopra) in sequenza, più 1. Quindi se hai tutti i 4 Jack è 4 + 1 = 5. Se hai solo i primi 2 Jack, è 2 + 1 = 3.
In alternativa, per rendere le cose un po 'più complicate, il fattore Jack può anche essere il numero di jack migliori in sequenza che ti mancano , più 1. Quindi se ti manca il primo, è 1 + 1 = 2. Se tu mancano i primi 3, è 3 + 1 = 4. Ecco alcuni esempi, usando la numerazione sopra:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
Questo è stato il primo fattore. Ecco come ottieni il 2 °:
Il fattore di seme di Trump
Questo è molto più semplice. Il secondo fattore è determinato dal seme di briscola che il giocatore solista sceglie usando la seguente mappatura:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
È stato facile, no?
Il valore del gioco
Il valore del gioco è il prodotto di due fattori. Abbastanza facile pensi? Sbagliato! Mentre il fattore Jack è fisso, il fattore tuta non lo è. Il seme che scegli come briscola dipende dalla quantità di briscole e dal valore delle tue carte non-briscola nella tua mano. Sarebbe troppo complicato spiegare come appare una buona mano, quindi utilizzerai il seguente algoritmo:
L'algoritmo Which-Trump-do-I-Pick
Non devi partecipare all'offerta. Se decidi che la tua mano è troppo brutta per giocare da solo, puoi semplicemente passare. La tua mano deve soddisfare i seguenti criteri per essere giocabile:
Hai almeno 6 carte vincenti (le carte del seme di briscola che scegli + il numero di Jack). Se questo è possibile per più di un seme, scegli quello che si tradurrebbe in più carte vincenti. Se c'è ancora un pareggio, scegli il seme con il punteggio più alto indicato sopra.
Delle carte non vincenti, hai almeno 1 asso.
Se la tua mano non soddisfa entrambi questi criteri, passerai. In tal caso, otterrai il valore di gioco calcolato e il seme di briscola scelto.
Breve nota: ovviamente questo è un algoritmo molto semplificato. Nel giudicare una mano ci sono troppe strategie ed esperienze di quante potremmo mai affrontare in una sfida come questa.
Ingresso
Ogni carta ha un identificativo univoco. La prima parte è la tuta ( C lubs, S pad, H earts, D iamonds), la seconda parte è il valore che viene dato da questa mappatura:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Entrambe le parti combinate formano una carta. Il valore viene prima, poi arriva il seme. Puoi prendere le carte in qualsiasi formato desideri.
Produzione
Se la mano è giocabile, ottieni il valore del gioco e il seme di briscola scelto (l'ordine non ha importanza). In caso contrario, l'output "passa".
Regole
- Come accennato, puoi prendere l'input nel formato più conveniente per te. Esempi vedi sotto nei casi di test.
- L'input può essere fornito da argomenti della riga di comando, input dell'utente o argomenti della funzione.
- L'output può essere fornito come valore di ritorno o può essere semplicemente stampato sullo schermo.
- Le carte nell'input non possono essere ordinate in alcun modo. Il tuo programma deve essere in grado di gestire qualsiasi ordine di carta casuale.
- Il conteggio dei byte più basso vince!
Casi test
L'input nei casi di test sarà un elenco di stringhe a 2 caratteri.
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
Spiegazione:
- Due Jack di fila con i Club come briscola. Quindi il valore del gioco è 3 x 12 = 36
- Tre Jack di fila mancano con Spades come briscola. Quindi il valore del gioco è 4 x 11 = 44
- Sono consentite solo un massimo di 4 carte vincenti, quindi passerai.
- Sei carte vincenti con picche ma nessun asso non-briscola, quindi passerai.
Se alcune regole non sono chiare, vai avanti e commenta. Sono cresciuto con questo gioco, quindi per me è difficile giudicare se ho descritto tutto in modo sufficientemente dettagliato.
E ora ... Buona programmazione!
modifica: Come mi è stato sottolineato nei commenti (grazie a isaacg), esiste una regola che conta i seguenti trionfi successivi dopo i 4 Jack nel "fattore Jack" in modo che possa arrivare fino a 11. Per mantenere semplice questa sfida e per non confondere le persone, le regole che ho proposto inizialmente rimarranno come sono. Quindi il fattore massimo rimane a 5.