Salve, Grisu59.
Se non ho capito male, cerchi qualcosa che gestisca e mandi in output una gran quantità di dati derivanti da processi di calcolo combinatorio (permutazioni e combinazioni di numeri, con o senza ripetizioni).
I due nomi che mi vengono subito in mente sono Mathematica di Stephen Wolfram e Matlab.
Sono entrambi a pagamento e, da quel che so, nemmeno troppo economici (il primo è un programma scientifico molto avanzato di calcolo simbolico che potrebbe facilmente fare ciò che chiedi, a patto di conoscere la sua sintassi; il secondo lavora prevalentemente con le matrici di dati ed è più orientato al calcolo numerico - sempre con sintassi dedicata).
Un'altra possibilità potrebbe essere quella di scrivere i programmi direttamente a mano: poiché si tratta - almeno nel primo passo - di calcolo combinatorio, una volta trovata la formula generale per il caso che ti riguarda, si tratterebbe solo di dire alla macchina cosa moltiplicare e cosa dividere per avere rapidamente (secondo la disponibilità del processore e della RAM, ovvio) lo sviluppo delle sequenze.
Un Matematico con un po' di conoscenze nel settore potrebbe facilmente formalizzare il problema e darti la formula finale, che opportunamente tradotta sarebbe di facile gestione nelle mani anche di un programmatore non espertissimo.
Per maggiori informazioni ti rimando a questa semplice introduzione, accessibile anche ai non iniziati.
Per il secondo passo, la sequenza potrebbe essere sviluppata in più tappe successive; azzardo una scaletta:
Confronto della lunghezza della stringa di input (assegnata da te e nota) con tutte quelle di output del precedente; sulla base di questo dato, sfruttamento per il confronto delle sole stringhe con lunghezza uguale a quella di input.
Mediante un sistema posizionale, verificare in più cicli le corrispondenze tra le cifre della stringa di input e quelle rese disponibili da 1). Specificamente:
2.1) Far conteggiare le corrispondenze singole.
2.2) Per quelle multiple, agire così: ogni volta che c'è una corrispondenza singola un contatore - con etichetta "Corrispondenza singola" - scatta di una unità e fa accedere la coppia "stringa di input & stringa passata dalla macchina" alla fase successiva, in cui si controllano le coincidenze doppie sulle restanti cifre dei due numeri in ballo.
2.3) I superstiti di questo passo vengono ripassati alla ricerca di triple e così via.
Stampa a video dei risultati in una tabella per colonne con somma finale delle occorrenze (= coincidenze) per ogni tipologia: singole, doppie, triple etc.
Ripetizione del processo per ciascuna sequenza di input (in numero variabile da 1 a 1000, sempre con un sistema di cicli che faccia girare la macchina finché non abbia esaurito ciò che tu le avrai dato in pasto).
Riassunto finale a video dei risultati col solito sistema delle colonne e delle somme.
Avendo una macchina abbastanza potente e tempo sufficiente, si dovrebbe poter riuscire a risolvere tutto senza sforzi mostruosi (creato il primo loop, è tutto uguale); lascio comunque la parola a un programmatore per i dettagli tecnici, in cui confesso di non essere attualmente in grado di potermi addentrare.
Saluti.