Sei sulla pagina 1di 17

1

Progetto libro: 17-29: unautobiografia di difficile lettura


Appendice 1 Il gioco di Filippo e Giacomo.
Forzando molto le condizioni da rispettare in via preliminare, si possono inventare molti giochi sulla falsariga di quello in questione. Sono tutti accomunati dal fatto di essere basati sulle caratteristiche intrinseche delle sottrazioni tra due numeri formati dallo stesso numero di cifre. E possibile considerare numeri palindromi o simmetrici ed arrivare a una dissociazione (parziale o totale) tra le singole cifre del sottraendo e le corrispondenti del minuendo. Un ruolo cruciale in tutto ci rivestito dal prestito eventualmente effettuato da una cifra del sottraendo a beneficio di quella ad essa adiacente.

In particolare, le relazioni che intercorrono tra le cifre simmetriche (rispetto allipotetico centro della differenza) sono le medesime se consideriamo minuendi di 5 e 6 cifre, 7 e 8 cifre, 9 e 10 cifre. Possiamo poi osservare che, per i numeri composti da 3-5-7-9 cifre, la cifra centrale del risultato della sottrazione 9.

Ragionando sul caso in questione (7 cifre) come se dovessimo fare manualmente i conti con carta e penna, notiamo subito che il sottraendo ha sempre le ultime 3 cifre minori del minuendo e dunque risulta necessario effettuare il prestito da parte della cifra centrale. Poich era originariamente uguale al suo corrispondente, la cifra centrale del sottraendo risulta sempre inferiore di una unit allomologa del minuendo: la quarta cifra del risultato sar pertanto un 9. Ci valido solo per numeri formati da un numero dispari di cifre. Per i numeri con cifre pari, la somma dei valori delle due cifre pi interne (adiacenti tra loro) sar invece sempre uguale a 8 (eccezion fatta per i numeri composti da due sole cifre). Nello specifico si presentano i seguenti casi:

Come esempio riprendiamo il caso della sfida tra Filippo e Giacomo: 9754320 0234579= ----------------9519741

(Conoscendo le ultime 3 cifre della differenza, si pu ricavare in un battibaleno lintero risultato della sottrazione). Assunto: la somma delle cifre simmetriche del risultato della sottrazione. Effettuata con due numeri rispondenti alle caratteristiche stabilite, sempre costante ed ha i valori riportati precedentemente per il sistema di numerazione decimale -. Per verificare che sono valide le relazioni mostrate in precedenza, procediamo per induzione partendo dallassunto, che sappiamo vero per n-1 cifre e dimostrandolo per n+1. Se la cifra una sola si ha: a
a = -----(a-a) [a ]

a-a=x1

x1=0

(che ovvio)

Passando al caso di due cifre si ha:


a b

b a = ----------------------------((a-a)-b) ((b+10)-a)

a-1-b=x1 b+10-a=x2

x1+x1=9=cost a=x1+b+1

Infine mostriamo il caso in cui il numero in questione sia formato da tre cifre: a b c c b a = ----------------------------------------------((a-1)-c) ((b-1)+10-b) ((c+10)-a)

a-1-c=x1

a=x1+c+1

x1+x3=9=cost

b+9-b=x2 c+10-a=x3

x2=9 x1=-x3+9

x2=9=cost a=x1+c+1

E cos via, fino al caso di un numero composto da 10 cifre (che sar trattato tra poco); verifichiamo la validit della regola nel caso di un numero di sette cifre:

a b c d e f g g f e d c b a = -----------------------------------------------------------------------------------------------------(a-g) (b-f) ((c-1)-e) ((d-1)+10-d) ((e-1)+10-c) ((f-1)+10-b) ((g+10)-a)


Semplificando:

a b c d e f g g f e d c b a = -----------------------------------------------------------------------------------------------------(a-g) (b-f) (c-e-1) (9) (e-c+9) (f-b+9) (g-a+10)

Posto che equazioni:

, risulta il seguente sistema di

Nel caso di 10 cifre si ottiene ununica combinazione possibile; infatti: 9876543210 0123456789= -------------------------9753086421 Dunque, poich questo lunico caso (in un sistema di numerazione base 10) che rispetta la condizione , lunico risultato ammissibile 9753086421. Tale valore si ricava immediatamente dal sistema

a+l=9 a+i=9 c+h=9 d+g=9 e+f=9 x1+x10=10 x2+x9=9 x3+x8=9 x4+x7=9 x5+x6=8

a=9 b=8 c=7 d=6 e=5 f=4 g=3 h=2 i=1 l=0

La legge che identifica in maniera univoca i 10 valori delle somme delle cifre del risultato, nel caso in cui il numero al quale deve essere sottratto il suo inverso sia espresso nel sistema decimale, la seguente successione:

( { [

) ( ) ]

Cio, i valori di an sono: a1=0; a2=9; a3=a4=18; a4=a6=27; a7=a8=36; a9=a10=45. Il numero delle possibili combinazioni numeriche (che danno luogo ad uno dei risultati che soddisfano le equazioni precedenti) pari al complesso dei numeri ai quali deve venire sottratto il proprio inverso; la formula , per qualsiasi tipo di sistema numerico,
( )

(dove N rappresenta il numero di caratteri numerici nel sistema considerato,

mentre K il numero delle cifre del minuendo; K quindi corrisponde al numero di cifre disponibili). Nel sistema decimale si ha:

1 cifra (K=1)C=10 2 cifre (K=2)C=45 3 cifre (K=3)C=120 4cifre (K=4)C=210

6 cifre (K=6)C=210 7 cifre (K=7)C=120 8 cifre (K=8)C=45 9 cifre (K=9)C=10

5 cifre (K=5)C=252
Graficamente:

10 cifre (K=10)C=1

Come si evince dalla figura, la casistica pi grande si ha in corrispondenza di un numero formato da 5 cifre. La partita tra Filippo Martinetti e il suo amico un chiaro esempio di questa legge. La situazione la seguente: Il numero di cifre di sottraendo, minuendo e differenza 7, e le tre ultime cifre di questultima sono 741. Utilizzando le relazioni tra le cifre simmetriche di un numero di 7 cifre, Phil ne deduce facilmente che la differenza 9519741. A questo punto Giacomo (senza curarsi di aver comunicato due dati ridondanti) fornisce 4 cifre non simmetriche tra loro del minuendo (nello specifico le ultime 4). Filippo non deve fare altro che risolvere mentalmente un secondo sistema di equazioni per ottenere lintera sequenza numerica:

( ( {( ) )

) {

Si cos ricavato che: 9754320 0234579=

------------------9519741

Le cifre del risultato non sono completamente libere, ma, a seconda del numero in questione, possono variare entro degli intervalli prestabiliti: ci dipende anche dal numero delle cifre che compongono il minuendo e dunque il risultato. Di seguito si riporta lintera sequenza (il risultato espresso nella forma a c e g i l h f d b). 1 cifra: a=0 2 cifre: 0a8 ; 1b8 3 cifre: 1a8 ; c=9 ; 1b8 4 cifre: 3a9 ; 0 c6 ; 2d8 ; 1b7 5 cifre: 4a9 ; 1c6 ; e=9 ; 2d7 ; 1b6 6 cifre: 5a9 ; 3c7 ; 0e4 ; 4f8 ; 2d6 ; 1b5 7 cifre: 6a9 ; 4c7 ; 1e4 ; g=9 ; 4f7 ; 2d5 1b4 8 cifre: 7a9 ; 5c7 ; 3e5 ; 0g2 ; 6h8 ; 4f6 ; 3d4 ; 1b3 9 cifre: 8a9 ; 5c6 ; 4e5 ; 1g2 ; i=9 ; 6h7 ; 4f5 ; 2d3 ; 1b2 10 cifre: a=9 ; c=7 ; e=5 ; g=3 ; i=0 ; e=8 ; h=6 ; f=4 ; d=2 ; b=1 Da questa serie di dati si evince che, eccettuato il caso limite si una cifra, lintervallo entro cui possono variare le cifre dato dal numero delle cifre previste dal sistema numerico utilizzato (ad esempio nel sistema decimale N=10) diminuite del numero di cifre di cui composto il risultato della sottrazione; a tale risultato si deve aggiungere ununit: ( ) Le leggi che governano le sottrazioni in questione sono in definitiva:
2 cifre: a b b a = --------------x1 x2

[a > b]

x1=a-b-1 x2=b-a+10

b=a-x1-1 x1+x2=9

3 cifre: a b c c b a = --------------x1 x2 x3 b=b c=a+x3-10 x2=9 x1+x3=9

[a > b > c]

c+10-a=x3 b-1+10-b=x2 a-1-c=x1

4 cifre: a d b c d c b a = d+10-a=x4 c-1+10-b=x3 b-1-c=x2 a-d=x1 d=a+x4-10 c=b+x3-9 x1+x4=10 x2+x3=9

[a > b > c > d]

------------------x1 x2 x3 x4 5 cifre: a b c d e e d c b a = ----------------------x1 x2 x3 x4 x5

[a > b > c > d > e]

e+10-a=x5 d-1+10-b=x4 c-1+10-c=x3 b-1-d=x2 a-e=x1

c=c e=a+x5-10 d=b+x4-9 x3=9 x1+x5=10 x2+x4=8

6 cifre: a b c d e f f e d c b a = [a > b > c > d > e > f] -------------------------x1 x2 x3 x4 x5 x6 f+10-a=x6 e-1+10-b=x5 d-1+10-c=x4 c-1-d=x3 b-e=x2 a-f=x1 f=a+x6-10 e=b+x5-9 d=c-x4-9 x1+x6=10 x2+x5=9 x3+x4=8

7 cifre: [a > b > c > d > e > f > g] a b c d e f g g f e d c b a = ------------------------------x1 x2 x3 x4 x5 x6 x7 g+10-a=x7 f-1+10-b=x6 e-1+10-c=x5 d-1+10-d=x4 c-1-e=x3 b-f=x2 a-g=x1 d=d e=c+x5-9 f=b+x6-9 g=a+x7-10 x1+x7=10 x2+x6=9 x3+x5=9 x4=9

8 cifre: [a > b > c > d > e > f > g > h] a b c d e f g h h g f e d c b a = ----------------------------------x1 x2 x3 x4 x5 x6 x7 x8 h+10-a=x8 g-1+10-b=x7 f-1+10-c=x6 e-1+10-d=x5 d-1-e=x4 h=a+x8-10 g=b+x7-9 f=c+x6-9 e=d+x5-9 x1+x8=10

c-f=x3 b-g=x2 a-h=x1 9 cifre: : [a > b > c > d > e > f > g > h > i] a b c d e f g h i i h g f e d c b a = -------------------------------------x1 x2 x3 x4 x5 x6 x7 x8 x9 i+10-a=x9 h-1+10-b=x8 g-1+10-c=x7 f-1+10-d=x6 e-1+10-e=x5 d-1-f=x4 c-g=x3 b-h=x2 a-i=x1

x2+x7=9 x3+x6=9 x4+x5=8

e=e i=a+x9-10 h=b+x8-9 g=c+x7-9 f=d+x6-9 x1+x9=10 x2+x8=9 x3+x7=9 x4+x6=8 x5=9

CASI PARTICOLARI:
1 cifra: a b = -----x1

x1=a-a

x1=0

10 cifre: : [a > b > c > d > e > f > g > h > i > l] a b c d e f g h i l l i h g f e d c b a = -------------------------------------------x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 9876543210 0123456789= ------------------------9753086421 a=9 b=8 c=7 d=6 e=5 f=4 g=3 h=2 i=1 l=0 x1+x10=10 x2+x9=9 x3+x8=9 x4+x7=9 x5+x6=8

10

Vi unulteriore dettaglio. Per ogni siffatta operazione, purch abbia come minuendo un numero di almeno 4 cifre ( ), si verifica la seguente propriet. Identificando con A il primo elemento (a partire da sinistra) del risultato, con B lultimo elemento che si trova nella met sinistra del sottraendo (escludendo la cifra centrale nel caso di numeri formati da un totale di cifre dispari), con C lelemento pi a sinistra della met destra del risultato e con D la cifra allestrema destra, si ha che la differenza tra A e B sempre inferiore di due unit rispetto a quella tra C e D.

(A-B)-(C-D)=2=cost
Si tratta di una semplice conseguenza delle condizioni preliminarmente imposte, ma che pu portare a un notevole risparmio in termini di tempo, nellambito di un gioco mnemonico del tipo di quello praticato dai personaggi del romanzo. Qui di seguito sono riportati i casi di 5 e 6 cifre, ma quanto detto vale altres per i restanti 5 casi.

Ci, in alcuni casi, pu facilitare il conteggio mentale. Si sfruttano le concatenazioni delle differenze da ambo le parti del risultato1; una volta che rimane come ultima incognita A, B, C oppure D, sar sufficiente osservare qual il corrispondente valore nellaltra met del numero e procedere a ritroso. In conclusione riportiamo due esempi per chiarire il tutto. Es1: 87543210 01234578= --------------------86308632 Nellesempio A=8, B=0, C=8, e D=2. Dunque avremo A-B=8 e C-D=6. Lidentit pertanto verificata. Se non conoscessimo ad esempio A e volessimo estrapolarne velocemente il valore, basterebbe osservare che C-D=6 e dovendo, nel nostro caso, per forza risultare A-0=6+2, risulta immediato dedurre che A=8, anche senza ricordarsi nello specifico che x1+x8=10. Es2: 9643 1 1346 9=
1

Appare ovvio infatti che, nelle nostre condizioni iniziali, a-c=a-b+b-c ; a-d=a-b+b-c+c-d e cos via

11

------------8 2 9 x5 2 In questo caso x5, la nostra incognita, corrisponde a B. Sapendo che A-B=6 e che x5-2 deve essere pari a 4, si deduce immediatamente x5=6. Il discorso potrebbe essere approfondito ulteriormente, ma il modo pi pratico e veloce (tranne che per appassionati come Phil) resta quello di avvalersi di unapplicazione in grado di eseguire automaticamente tutte queste operazioni.

Un semplice programma in linguaggio C, che copre tutta la casistica della versione classica del gioco, il seguente:

/*************************************************************** * * * PHIL VS YOU * * * ****************************************************************/ /*MACROES*/ #include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> #define N 11 #define K 10 /*MAIN*/ int main (void) { /* DICHIARAZIONE VARIABILI */ int n_cifre, i, resto, k, j, l; int x[N], y[K]; char line [71]; char string [81]; char stringa [61]; /* INIZIALIZZAZIONE VARIABILI */ n_cifre = 0; x[0] = 0; y[0] = 0;

12

/* INPUT-OUTPUT */ printf ("Digita il numero di cifre di cui e' composto il risultato, purche' sia tra 2 e 10:\n"); fgets (line, sizeof (line), stdin); sscanf (line, "%d", &n_cifre); if (n_cifre<2 || n_cifre>10) { printf ("%c", '\a'); printf ("Leggi bene le istruzioni!!!\n"); return 1; } if (n_cifre != 10) { printf ("Digita la prima meta' delle cifre del risultato meno una se il numero e' formato da un numero dispari di cifre, la prima meta' delle cifre altrimenti!\n"); resto=n_cifre%2; if (resto == 0) { printf ("Dunque hai scelto un numero formato da una quantita' di cifre pari, ma va' bene lo stesso!\n"); for(i=0; i<n_cifre/2; i++) { printf ("scrivi %da cifra:\n", i+1); fgets(string, sizeof(string), stdin); sscanf(string, "%d", &x[i]); } } else { for(i=0; i<(n_cifre-1)/2; i++) { printf ("Scrivi %da cifra:\n", i+1); fgets (string, sizeof(string), stdin); sscanf (string, "%d", &x[i]); } } /* ALGORITMO PER LA DETERMINAZIONE DEL RISULTATO */ if(n_cifre == 2) { x[1]=9-x[0]; } if(n_cifre == 3) { x[2]=9-x[0];

13

x[1]=9; } if(n_cifre == 4) { x[3]=10-x[0]; x[2]=8-x[1]; } if(n_cifre == 5) { x[4]=10-x[0]; x[3]=8-x[1]; x[2]=9; } if(n_cifre == 6) { x[5]=10-x[0]; x[4]=9-x[1]; x[3]=8-x[2]; } if(n_cifre == 7) { x[6]=10-x[0]; x[5]=9-x[1]; x[4]=8-x[2]; x[3]=9; } if(n_cifre == 8) { x[7]=10-x[0]; x[6]=9-x[1]; x[5]=9-x[2]; x[4]=8-x[3]; } if(n_cifre == 9) { x[8]=10-x[0]; x[7]=9-x[1]; x[6]=9-x[2]; x[5]=8-x[3]; x[4]=9; } } else { if(n_cifre == 10) { x[0]=9; x[1]=7;

14

x[2]=5; x[3]=3; x[4]=0; x[5]=8; x[6]=6; x[7]=4; x[8]=2; x[9]=1; } } /* OUTPUT PARZIALE */ printf("\n\nIl risultato completo della sottrazione e':\n"); for(k=0; k<n_cifre; ++k) { printf(" %d", x[k]); } printf("\n\n"); /* INPUT-OUTPUT FINALE */ if(n_cifre == 2) { for(j=0; j<1; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[1]=y[0]-x[0]-1; } if(n_cifre == 3) { for(j=0; j<=1; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[2]=y[0]+x[2]-10; } if(n_cifre == 4) { for(j=0; j<=1; ++j) {

15

printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[3]=y[0]+x[3]-10; y[2]=y[1]+x[2]-9; } if(n_cifre == 5) { for(j=0; j<=2; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[4]=y[0]+x[4]-10; y[3]=y[1]+x[3]-9; } if(n_cifre == 6) { for(j=0; j<=2; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[5]=y[0]+x[5]-10; y[4]=y[1]+x[4]-9; y[3]=y[2]+x[3]-9; } if(n_cifre == 7) { for(j=0; j<=3; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[6]=y[0]-x[0]; y[5]=y[1]-x[1]; y[4]=y[2]-x[2]-1;

16

} if(n_cifre == 8) { for(j=0; j<=3; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[7]=y[0]+x[7]-10; y[6]=y[1]+x[6]-9; y[5]=y[2]+x[5]-9; y[4]=y[3]+x[4]-9; } if(n_cifre == 9) { for(j=0; j<=4; ++j) { printf("Digita %da cifra del sottraendo\n", j+1); fgets(stringa, sizeof(stringa), stdin); sscanf(stringa, "%d", &y[j]); } y[8]=y[0]+x[8]-10; y[7]=y[1]+x[7]-9; y[6]=y[2]+x[6]-9; y[5]=y[3]+x[5]-9; } /* SCRITTURA RISULTATI */ if (n_cifre != 10) { printf("Tu, sul tuo foglio di carta, hai scritto:\n\n"); for(l=0; l<n_cifre; ++l) { printf(" %d", y[l]); } printf(" -\n"); for(l=(n_cifre-1); l>=0; --l) { printf(" %d", y[l]); } printf(" =\n"); for(l=0; l<=n_cifre; ++l) {

17

printf("--"); } printf("\n"); for(k=0; k<n_cifre; ++k) { printf(" %d", x[k]); } printf("\n\n"); } /* CASO PARTICOLARE DI n_cifre = 10 */ if(n_cifre == 10) { for(j=0; j<=2; ++j) { printf("\n"); } printf("Sul tuo foglio di carta hai scritto:\n\n"); printf(" 9 8 7 6 5 4 3 2 1 0 -\n 0 1 2 3 4 5 6 7 8 9 = \n----------------------\n 9 7 5 3 0 8 6 4 2 1\n\n\n\n\n\n"); } return 0; } #undef N #undef K