Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Algoritmo "crosscheck" tra array

    Ciao raga,
    posto in questa sezione solo perchè sto sviluppando in js, ma cmq il mio problema è concettuale, quindi va bene anche un algoritmo in linguaggio naturale o pseudocodice .
    Espongo:
    Possiedo un array che contiene dei valori ammissibili per un dato campo:
    Codice PHP:
    ammissibili = [val1] [val2] [val3] [val4
    ed una variabile che mi indichi il numero massimo di questi utilizzabili contemporaneamente:
    Codice PHP:
    max 
    Ora, gli array da verificare sono dei seguenti tipi (alla loro destra trovate il risultato della validazione):
    Codice PHP:
    1)   [val1] -- OK!
    2)   [val1] [val3] -- OK!
    3)   [val1] [val2] [val3] -- NO! (ho superato MAX)
    4)   [val1] [val1] -- NO! (Ho sintassi errata doppione)
    5)   [val6] [val5] -- NO! (tutti i valori sono inammissibili)
    6)   [val5] [val2] -- NO! (ho un valore non ammissibile
    Per facilitarmi un pò il compito, il risultato resta cmq "ok" o "no" senza specificare il tipo di errore.

    Sto impazzendo da vari giorni per cercare di fare qualcosa di "pulito" per implementare questa soluzione in js ma ogni volta che credo di aver trovato la strada giusta, uno dei check fallisce (ad esempio ora non mi valida l'ultima situazione).

    Potete darmi una mano a capire come procedere?

    Grazie...

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non so se sia "pulito" ...
    codice:
     <script>
     var ammiss = new Array(1,2,3,4,5);
     var max = 2;
     function valida(arr) {
    	if (arr.length>max) return false;
    	
    	rv = true; // valore di ritorno
    	nv = 0; // numero di valori passati ammissibili
    	for (var i=0; i<arr.length; i++) {
    		for (var j=0; j<ammiss.length; j++) { // verifico che sia un valore ammissibile
    			if (arr[i]==ammiss[j]) nv++;
    		}
    		for (var j=i+1; j<arr.length; j++) { // verifico doppioni
    			if (arr[i]==arr[j]) rv=false;
    		}
    	}
    	return (rv && (nv==arr.length));
     }
    
     alert("1"+" "+valida([1])); // ok
     alert("1,2"+" "+valida([1,2])); // ok
     alert("1,2,3"+" "+valida([1,2,3])); // no
     alert("1,1"+" "+valida([1,1])); // no
     alert("6,7"+" "+valida([6,7])); // no
     alert("1,6"+" "+valida([1,6])); // no
     </script>
    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3

    http://www.mtbvulture.net

    Inutile dire che ti amo, vero?
    Vunziona tutto alla grande, ottimo algoritmo... e anke ottima pulizia (anke se ovviamente causa modifike mie è diventato sporco )
    Mi sono permesso di aggiungere due break nei due if interni (per nn far continuare il for e risparmiare 1 pò di tempo), mi funziona e credo che nn ho inficiato il funziomanento.

    Beh.. grazie ancora... se mi dai un tuo riferimento o sito mi farebbe piacere citarti nella mia tesi di laurea.

    CIAO!

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Continua a frequentare il forum: le occasioni per restituire il favore non ti mancheranno.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.