Newsgroup: it.sport.calcio.napoli
Titolo: Quesito per i cervelloni del NG

Abbiamo a disposizione i numeri che vanno dallo 0 al 9.
 
Poi abbiamo 5 caselle.
 
Dobbiamo formare sequenze uniche delle caselle riempite SOLO da 2 numeri.
 
Le altre caselle vengono riempite da una X.
 
Quindi, tanto per capirci, facendolo manualmente, cominceremmo così:
 
00XXX
0X0XX
0XX0X
0XXX0
 
—————
 
01XXX
0X1XX
0XX1X
0XXX1
 
eccetera
 
Dovrebbe esistere una formula/algoritmo per calcolare tutte le possibili 
combinazioni, giusto?
 
Qualcuno che mi trova la formula?

 Qualcuno che mi trova la formula?
 
Vediamo se ci prendo.
Dati 10 numeri, esistono (10 2) (da visualizzare in verticale: si tratta del coefficiente binomiale) possibili coppie di numeri.
Vedendo cio' che hai postato, per ogni coppia di numeri ordinata, esistono x-1 combinazioni (dove x e' la lunghezza della stringa che stai generado, ovvero in questo caso 5).
Quindi direi che la formula potrebbe essere (x-1)*(10 2), dove l' ultima parentesi e' da leggere "dieci su due binomiale" ed e' pari a (10!)/[(2!)*(8!)]=45.
Ergo nel tuo caso dovresti avere 180 possibili combinazioni.
 
 
Fammi sapere se ci ho preso :P.


 
Mamma mia. Ma che é greco?? :D
C'é poco da fare, io e la matematica stiamo proprio "appiccicati".
 
Scherzi a parte, cercheró di rileggere la tua soluzione con piú 
attenzione. Avevo cominciato provando a scrivere un po di codice con un 
algoritmo, ma avevo un approccio molto piú rudimentale. Intanto grazie 
per aver speso del tempo per risolvere il problema.

 per aver speso del tempo per risolvere il problema.
 
Per una breve infarinata di calcolo combinatorio, guardati qualche video 
di sto canale:
 
https://www.youtube.com/watch?v=LJXEENsSAJA
 
 
 
Sto ragazzo riesce a spiegare in maniera semplice concetti alquanto 
rognosi da capire come questi...

 Vedendo cio' che hai postato, per ogni coppia di numeri ordinata, esistono x-1 combinazioni (dove x e' la lunghezza della stringa che stai generado, ovvero in questo caso 5).
 
Non sono 20?
 
lui ha scritto(per la coppia 01) solo:
 
01XXX
0X1XX
0XX1X
0XXX1
 
 
Ma ci sono anche altre combinazioni, il totale "dovrebbe" essere: 5*4=20 
se sequenze come  01XXX e 10XXX sono considerate diverse.
20/2=10 se invece sono considerate uguali.
 
Quindi 45*20 nel primo caso, 45*10 nel secondo...
 
 
 


 
Scusate eh. Cerco di riformularlo nella maniera piú semplice possibile.
 
Le caselle sono 5.
Debbo trovare tutte le combinazioni possibili in base a questo criterio:
 
"Ogni combinazione DEVE contenere 2 caratteri presi dai numeri che vanno 
da 0 a 9."
 
Capito?
 
Quindi, ogni sequenza contiene 2 numeri e 3 caselle vuote (le 
simbolzzavo con la X per renderlo piú leggibile).
 
Siccome io e la matematica non ci siamo mai presi piú di tanto stavo 
cominciando a ragionare nella maniera
piú semplice possibile provando a scrivere le combinazioni manualmente.
 
Per cui, la prima combinazione sarebbe:
 
00XXX
 
La seconda 0X0XX
 
e cosí via.
 
Siccome l'obiettivo é quello di scrivere un algoritmo con codice di 
programmazione la cosa piú semplice sarebbe
quella di risolvere il problema cercando di capire l'algoritmo/la 
formula proprio scrivendo del codice.
 
Non so che nozioni avete di programmazione, ma tanto per usare un 
linguaggio tra i piú comuni come javascript
io avevo cominciato scrivendo:
 
var numero_di_caselle = 5;
var array_caratteri = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
 
A questo punto l'idea é quella di stampare sulla pagina tutte le 
combinazioni possibili facendo un loop.
 
Immagino si tratti di fare dei loop ad incastro nel quale quello 
principale dovrebbe essere:
 
for(a=0;a<numero_di_caselle.length;a++)
 
Ecco, il loop iniziale credo di averlo identificato. Il problema é 
scrivere il resto :D
 

 per aver speso del tempo per risolvere il problema.
 
Ricordo un esame all'università in cui un professore ci propose un problema simile in cui
chiedeva di scrivere un programma che fosse in grado di aprire una cassaforte con
combinazione numerica di N cifre.
Ricordo solo che usava un algoritmo ricorsivo con tecnica di backtraking. Prova a buttarci
un occhio, personalmente di algoritmica c'ho sempre capito poco quindi di sbariare
di domenica mattina non c'ho proprio voglia. Al massimo ti metto un link :P
 
http://it.wikipedia.org/wiki/Backtracking
 
 
Ciro


Ah e io invece pensi abbia voglia di sbariare su queste cose la domenica 
mattina?? :P
Cmq ho idea che come dici tu la ricorsivitá debba essere usata per 
facilitare il compito (o sia addirittura indispensabile).

cut
 
mi sembra tu stia cercando un semplice algoritmo di brute force
http://janosch.woschitz.org/a-simple-brute-force-algorithm-in-c-sharp/