giovedì 27 gennaio 2011

answer to life the universe and everything = 42

Soluzione 1:

#include <stdio.h>
 
#define SEI    1 + 5
#define NOVE   8 + 1
 
int main()
{
    printf( "Il significato della vita: %d\n", SEI * NOVE );
    return 0;
}
 
 
 
Soluzione 2
 
#include <stdio.h>
#include <string.h>
 
int main()
{
   char * question="answer to life the universe and everything"; 
   /* Se non esiste una risposta più complessa e profonda allora forse */
   printf("La risposta a '%s' è : %d\n",question,strlen(question));
   return 0;
}

mercoledì 5 gennaio 2011

Quick Sort

//  quickSort
//
//  This public-domain C implementation by Darel Rex Finley.
//
//  * This function assumes it is called with valid parameters.
//
//  * Example calls:
//    quickSort(&myArray[0],5); // sorts elements 0, 1, 2, 3, and 4
//    quickSort(&myArray[3],5); // sorts elements 3, 4, 5, 6, and 7

void quickSort(int *arr, int elements) {

  #define  MAX_LEVELS  300

  int  piv, beg[MAX_LEVELS], end[MAX_LEVELS], i=0, L, R, swap ;

  beg[0]=0; end[0]=elements;
  while (i>=0) {
    L=beg[i]; R=end[i]-1;
    if (L<R) {
      piv=arr[L];
      while (L<R) {
        while (arr[R]>=piv && L<R) R--; if (L<R) arr[L++]=arr[R];
        while (arr[L]<=piv && L<R) L++; if (L<R) arr[R--]=arr[L]; }
      arr[L]=piv; beg[i+1]=L+1; end[i+1]=end[i]; end[i++]=L;
      if (end[i]-beg[i]>end[i-1]-beg[i-1]) {
        swap=beg[i]; beg[i]=beg[i-1]; beg[i-1]=swap;
        swap=end[i]; end[i]=end[i-1]; end[i-1]=swap; }}
    else {
      i--; }}}

Texas Hold'em

Alcune regole
  • Quando un giocatore chiama "all-in" a meno del rilancio minimo (3 CB) le azioni dei giocatori tra ed il mazziere (dealer o bottone) e lui sono limitate alla semplice chiamata (call) o al lasciare (fold). Ossia chi ha già parlato/bussato non può rilanciare sull'all-in di chi parla dopo di lui. I giocatori che invece si trovano tra colui che chiama "all-in" e il bottone possono chiamare o bussare, ma anche rilanciare (raise) in quanto non hanno ancora parlato.
  • In molte sale da gioco è proibito alzare le carte dal tavolo, la pena è di lasciare la giocata con fold automatico.
  • Il giocatore è tenuto a mostrare le cinque carte migliori, quindi non è valido mostrare le carte servite (pocket cards) in due tempi successivi in quanto risulterebbe nulla o lasciata la seconda carta.
  • In un torneo "sit & go" quando viene eliminato un giocatore si dovrà attendere il transito del bottone-dealer prima di escluderne la posizione dal buio e dal controbuio, così che ognuno paghi regolarmente il buio e il controbuio.
  • Il flop dev'essere servito in una sola volta, mostrando cioè le tre carte insieme, così che i giocatori non possano intuire o far capire nulla alla vista di una sola carta per volta.
  • Le Fiches o chips o gettoni che ogni giocatore possiede devono esser tenuti ben in vista e soprattutto vanno mostrati i gettoni di valore più grande. Alla richiesta degli altri giocatori ognuno è tenuto a contare le proprie fiches rimaste.
  • Se un giocatore decide di mostrare le proprie carte allora dovrà mostrarle al tavolo intero scoprendole.
  • Ogni sala da gioco ha le sue regole, informarsi bene se le azioni o le dichiarazioni sono vincolanti al fine dell'azione. Un all-in può esser chiamato a voce o può corrispondere al porre il proprio ammontare in fiches (stack) nel piatto.
  • È in genere segno di maleducazione non parlare l'inglese se al tavolo vi sono giocatori stranieri, in quanto non capirebbero le vostre dichiarazioni.
  • Quando un giocatore dichiara il proprio punto deve necessariamente scoprire tutte e due le carte, onde evitare incomprensioni.
  • È vietato interrompere il gioco per motivi non inerenti ad esso.
  • È vietato tenere il telefono acceso, ma in alcuni casi è consentito.
  • È vietato lanciare troppo le carte, quando si folda o quando si scoprono (showdown).
  • È vietato offendere il croupier o un giocatore a causa della propria sfortuna.
  • È vietato dopo che un giocatore vince, perché uno o più giocatori hanno lasciato, chiedere al croupier di girare le carte che sarebbero uscite, di solito il turn o il river.
  • Quando il tempo per prendere la propria decisione di gioco è scaduto, se questa non è stata presa, la mano del giocatore verrà automaticamente passata quindi persa.
  • La puntata minima deve essere necessariamente uguale o maggiore al grande buio (big blind).
  • Il rilancio minimo deve essere necessariamente uguale o maggiore al doppio grande buio.
  • Sul tavolo da gioco c'è una linea ellittica che delimita lo spazio tra giocatori (la parte compresa tra loro e la linea) e gioco ormai fatto (la parte compresa tra linea ed il mazziere). Se i giocatori svolgono un'azione ponendo un ammontare di fiches aldilà della linea divisoria senza parlare, quell'azione è categorica e non può essere smentita. Quell'azione può essere solo una chiamata, se l'ammontare posto è uguale a quello precedente o non eccede nemmeno del suo 50%; oppure può essere un rilancio se è maggiore almeno del suo 50%.
  • Se un giocatore non ha il proprio ammontare in fiches pari al grande buio, egli è automaticamente 'all in' e giocherà solo per il piatto composto dal suo 'all in' più la stessa quota per ogni giocatore che gioca, il resto delle puntate e dei rilanci successivi viene separato e destinato agli altri giocatori.
  • Se il mazziere nel distribuire le carte ne scopre una per errore, viene annullata la mano se la carta scoperta è tra le prime due distribuite, altrimenti la eliminerà (brucerà) prima di girare il flop, mettendola in quel momento scoperta al centro del tavolo e continuando a servire le carte darà la successiva al giocatore successivo, mentre il giocatore a cui è stata bruciata la carta riceverà il suo cambio come ultima carta servita.
Se un giocatore punta tutto l'altro deve puntare l'uguale somma.

Expected value

Nel Texas Hold'em, e più in generale in tutte le specialità a community cards, la mano di un giocatore non è quasi mai completamente certa fino alla fine. Tuttavia, egli spesso continuerà a puntare e a rilanciare, così aumentando la posta, basandosi principalmente sulle carte personali (hole cards), sulle carte comuni già scoperte dal mazziere, sulla quantità di gettoni presenti nel piatto, sul monte gettoni proprio e dell'avversario, sul profilo dello stesso e sulla propria immagine al tavolo. Per questo entrano in gioco ragionamenti che tirano in ballo argomenti di probabilità e teoria delle decisioni, specialmente il valore atteso.[3]
Ogni sforzo che il giocatore fa non è altro che uno sforzo, consapevole o no, mirato a fare scelte col più elevato Valore Atteso (Expected Value in inglese) possibile. L'expected value (EV) si può interpretare facilmente come l'ammontare della vincita (o perdita) che si realizza in media in una scommessa. Se per esempio l'EV di una scommessa è di 130$, allora ogni volta che accettiamo quella scommessa vinciamo 130$ (in media sul lungo periodo; vedi legge dei grandi numeri).[3][4]
Supponiamo ora di giocare una mano di Texas Hold'em limit 10$-20$ e di arrivare al river con un tris di assi, con coppia di assi in mano, e sul tavolo A-K-Q-10-3. L'avversario punta 20$ in un piatto di 90$. Stimiamo che la probabilità che il nostro avversario abbia un J per la scala sia del 70% e che la probabilità di essere vincenti sia quindi del 30%? Calcoliamo l'EV:
  1. possibili risultati: l'avversario ha il J, l'avversario non ha il J;
  2. probabilità associate: 70% (70 / 100 = 0,7) e 30% (30 / 100 = 0,3);
  3. vincita associata a ogni risultato: -20$, +90$;
  4. probabilità per vincita e somma: 0,7 * ( − 20$) + 0,3 * 90$ = 13$;
  5. L'Expected Value è positivo (+13$) quindi dovremmo chiamare.
L'EV ci indica se una scommessa è conveniente (EV positivo) oppure no (EV negativo), ma non ci dice niente riguardo al risultato della nostra scommessa presa singolarmente.[4] Nell'esempio della monetina abbiamo EV positivo (+10$), ma se otteniamo tre volte croce abbiamo perso 540$.[3]
Nel poker ogni volta che decidiamo di fare bet, fold o raise (puntare, lasciare la mano, o rilanciare in italiano) effettuiamo una scelta che può essere caratterizzata da un EV positivo o negativo. Teoricamente, alla fine di ogni partita avremo guadagnato tanto più quante più decisioni ad EV positivo avremo preso, e perso tanto meno quante più decisioni a EV negativo avremo evitato. Talvolta nel poker capita che, sia un bet o un raise, abbiano entrambi EV positivo: in questo caso il giocatore con esperienza deve saper individuare quale sia la mossa con EV maggiore. Quando si gioca a poker non si ha il tempo per calcolare precisamente l'expected value di una determinata mossa e, spesso, non si sa neanche se la mossa fatta sia vantaggiosa o meno (se abbia EV positivo o negativo). Questo avviene poiché il Poker è un gioco le cui informazioni disponibili di volta in volta sono incomplete e quindi, anche volendo, non potremmo calcolare con assoluta certezza ed in ogni momento il valore atteso di un particolare bet o fold poiché non abbiamo a disposizione i dati numerici per effettuare tale calcolo.
Spesso i giocatori professionisti, lontano dal tavolo, cercano di valutare l'EV di una determinata giocata facendo delle ipotesi sul comportamento degli avversari (il bluff è una componente che può inficiare la valutazione dell'expected value) e sulle carte che hanno in mano. Queste analisi (spesso molto utili) richiedono tempo e difficilmente possono essere effettuate durante una partita.

Probabilità e Odds

Probabilità: affermare che una determinata carta ha il 13% della probabilità di uscire significa che, in media, le carta in questione esce 13 volte ogni 100 tentativi. Supponendo di avere 6-7 a cuori in mano mentre sul tavolo ci sono Asso di cuori, Q di cuori, 2 di picche, 5 di quadri e di voler fare colore al river, si ragiona in questo modo: le carte sconosciute sono 46 (52 carte totali meno 4 sul tavolo meno 2 in mano) le carte di cuori rimaste sono 9 (13 carte di cuori totali meno 2 sul tavolo meno 2 in mano). La probabilità di fare colore è di 9 / 46. Il calcolo è il seguente: (9 / 46) = 0,2 = 20%.
Odds: dire che un evento è 15 contro 1 sfavorito ("15 to 1 odds" in inglese) significa che, in media, questo evento non si ripeterà per 15 volte per ogni volta che si presenta. Nell'esempio precedente possiamo quindi esprimere lo stesso concetto dicendo che il colore è 80 contro 20 sfavorito (4 contro 1, 4 to 1 odds). Per passare dalle odds alla probabilità si procede come segue:
  1. siano x i casi sfavorevoli per ogni caso favorevole (nell'esempio precedente, 4)
  2. si esegue il calcolo 1 / (x + 1)
  3. il risultato è uguale alla probabilità associata all'esito favorevole (nell'esempio precedente si ha 1 / (4 + 1) = 0,2 = 20% quindi 4 to 1 odds corrisponde al 20% delle probabilità di esito favorevole)
Per passare dalla probabilità di riuscita agli odds si procede come segue:
  1. sia y la probabilità di riuscita (nell'esempio precedente y= 20% = 0,2)
  2. si esegue il calcolo (1 − y) / y
  3. il risultato rappresenta le odds (nell'esempio precedente si ha (1 − 0,2) / 0,2 = 4 quindi le odds sono 4 contro 1)
Le probabilità andrebbero corrette (weighted) a seconda dei giocatori rimasti in gioco e delle fasi di gioco. Per esempio nella fase iniziale se 8 giocatori passano e ne rimangono solo due in gioco è ragionevole supporre che i giocatori che si sono ritirati non avessero avuto carte alte mentre quelli rimasti sì, considerando inferiore l'eventualità di bluff. Nella fase finale di un torneo questo concetto perde di valore mentre entra in gioco una relazione tra punteggio in mano e posto al tavolo e valutando una maggiore incidenza dei bluff.

(Poker) Probabilità

Il poker, sotto molti aspetti, ha una fondamentale base matematica: è infatti necessario conoscere la probabilità che si verifichi una certa combinazione piuttosto che un'altra, per regolarsi di conseguenza.
Per calcolare la probabilità che esca un tipo di carta (jack, 10...) la formula è:
p = \frac{4-m}{\,52\,-\,n }

dove p=probabilità, m=carte già uscite dello stesso tipo (jack, 9...) e n=carte già uscite+2.
Le probabilità che esca una carta di un certo seme sono:
p = \frac{13-m}{\,52\,-\,n }

dove m=carte dello stesso seme già uscite. Infine, la formula per calcolare la probabilità che esca una certa carta (per esempio fante di picche) è:
p = \frac{1}{\,52\,-n } Il calcolo della probabilità che escano due o più carte non viene riportato, in quanto complicato e poco utile.

(Poker) Il linguaggio del corpo

Molti giocatori esperti vincono grazie ad un'acuta osservazione degli avversari: ecco alcuni elementari consigli.
Queste regole sono valide in linea di massima. Per esempio, un giocatore può grattarsi il mento solo perché ha un normale prurito.
1. Non usare sempre la stessa tattica: cerca a volte di variare lo schema per essere imprevedibile.

2. Se un giocatore è molto aperto e chiacchierone e, dopo avere osservato le proprie due carte e quelle sul campo, interrompe un discorso bruscamente ha ottime combinazioni; se mostra ostentatamente di essere soddisfatto probabilmente è un bluff.

3. Se un giocatore di norma abbastanza quieto (o semplicemtne non agitato) inizia a lanciare con arroganza fiches sul tavolo è probabile che stia bluffando.

4. Se un giocatore, dopo avere osservato le carte, osserva o giocherella le proprie fiches, o si dimostra impaziente (anche quando il dealer mette le carte), probabilmente ha una buona mano. La stessa cosa vale per un giocatore che, da annoiato, alza la testa, erige il busto e/o si guarda in giro con interesse.

5. In alcuni casi un giocatore fa finta di niente o si dimostra indifferente, o scherza con un compagno: in queste situazioni vuole evitare di scoraggiare un'eventuale puntata.

6. Un giocatore con ottime carte spesso si dimostra meno nervoso del solito; al contrario, se ha una pessima combinazione può succedere che si irriti per cose che, di solito, non lo infastidiscono.

7. Alcuni segni possono mostrare insicurezza o difficoltà:
1.Tenere il busto indietro, allontanandolo dal tavolino, e il capo rivolto verso il basso.
2.Tenere le gambe accavallate.
3.Toccarsi il mento o gli occhi e mordersi il labbro inferiore.

8. Al contrario, altri possono mostrare che un giocatore crede di avere buone combinazioni:
1.Tenere il busto chino o proteso sul campo.
2.Alzare la testa.
3.Aprire le gambe e sfregarsi le mani.

9.Casi in cui il giocatore è sicuro di sé:
1.Appoggiarsi allo schienale della sedia con le mani dietro la testa.
2.Appoggiare le mani sui fianchi.
3.Premere le punte delle dita di entrambe le mani l'una contro l'altra formando una sorta di piramide, mentre i gomiti sono posti sul tavolo o in grembo.

10.Casi in cui il giocatore non è sicuro di sé:
1.Stringere le dita sulle carte.
2.Massaggiarsi gli zigomi, il collo o le orecchie.
3.Grattarsi la testa.