1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
   |  
Set FSO = CreateObject("Scripting.FileSystemObject")
 
dim taille,liste_de_base,fin,nombre_de_diviseurs_multiples,temps_de_depart,fichier_final,nombre_possibilites,taille_plus_longue_possibilite
 
Sub initialisation()
	Dim choix,depart,ligne_fin,infos
	choix = MsgBox("Reprendre le calcul? OUI" & chr(13) & "Recommencer à zéro?   NON",4)
	If choix = 7 Then ' Si choix = NON
		taille = InputBox("Tapper la taille du nouveau tableau")
		For i = 1 to taille
			liste_de_base = liste_de_base & i & "_"
		Next
		Set fichier_a_traiter = FSO.CreateTextFile("fichier_a_traiter.txt",true)
		For depart = 1 to taille
			fichier_a_traiter.WriteLine depart & "_" & "*" & modifie(liste_de_base,depart)
		Next
		fichier_a_traiter.Close
		Set fichier_final = FSO.CreateTextFile("resultat_algorithme_juniper_green_version2.txt",true)
		fichier_final.WriteLine "Algorithme de Juniper Green. Taille du tableau : "	& taille
		fichier_final.WriteLine "Nombre actuel de possibilités;Taille de la plus longue possibilité;Possiblité la plus longue;Temps de traitement"
		fichier_final.Close
		nombre_possibilites = 0
		taille_plus_longue_possibilite = 0
		temps_de_depart = Time
	Else
		Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",1)
		Do While Not fichier_final.AtEndOfStream
			ligne_fin = fichier_final.ReadLine
		Loop
		infos = Split(ligne_fin,";")
		nombre_possibilites = infos(0)
		taille_plus_longue_possibilite = infos(1)
		temps_de_depart = infos(3)
	End If		
	fin = FALSE
End Sub
 
Function lister_diviseurs_multiples(nombre,liste_a_traiter)
	Dim candidat,temp
	nombre_de_diviseurs_multiples=0
	While liste_a_traiter<>""
		candidat = Left(liste_a_traiter,Instr(liste_a_traiter,"_")-1)
		If nombre MOD candidat = 0 OR candidat MOD nombre = 0 Then
			temp=temp & candidat & "_"
			nombre_de_diviseurs_multiples = nombre_de_diviseurs_multiples + 1
		End If
		liste_a_traiter = Right(liste_a_traiter, Len(liste_a_traiter)-Instr(liste_a_traiter,"_"))
	Wend
	lister_diviseurs_multiples = temp
End Function
 
Function cherche_diviseurs_multiples(liste,position)
	Dim temp
	temp = liste
	If position = 1 Then
		cherche_diviseurs_multiples = Left(temp,InStr(temp,"_")-1)
	Else
		For i=1 to position-1
			temp = Mid(temp,InStr(temp,"_")+1)
			cherche_diviseurs_multiples = Left(temp,InStr(temp,"_")-1)
		Next
	End If
End Function
 
Function modifie(liste,nombre)
	Dim temp
	temp = liste
	If InStr(temp,"_" & nombre & "_") = 0 Then
		modifie = Mid(temp,Instr(temp,"_")+1)
	Else
		modifie = Replace(temp,"_" & nombre & "_","_")
	End If
End Function
 
Sub etudier_chaine(x)
	nombre_possibilites = nombre_possibilites + 1
	Dim a,b
	a = x
	b = Split(a,"_")
	If Ubound(b) > taille_plus_longue_possibilite Then
		taille_plus_longue_possibilite = Ubound(b)
		Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",8)	
		fichier_final.WriteLine nombre_possibilites & ";" & taille_plus_longue_possibilite & ";" & x & ";" & temps_de_traitement()
		fichier_final.Close
	End If
End Sub
 
Function temps_de_traitement()
	Dim a
	a = Hour(temps_de_depart)*3600 + Minute(temps_de_depart)*60 + Second(temps_de_depart)
	temps_de_traitement = Hour(Time)*3600 + Minute(Time)*60 + Second(Time) - a
End Function
 
Sub traitement()
	fin = TRUE
	Set fichier_a_traiter = FSO.OpenTextFile("fichier_a_traiter.txt",1)
	Set fichier_temp = FSO.CreateTextFile("temporaire.txt",true)
 
	Dim ligne,chaine,liste_restante,liste_diviseurs_multiples,temp,a,b,numero_ligne_a_traiter
 
	numero_ligne_a_traiter = 0
	liste_diviseurs_multiples = ""
	While liste_diviseurs_multiples = "" AND NOT fichier_a_traiter.AtEndOfStream
		numero_ligne_a_traiter = numero_ligne_a_traiter + 1
		ligne = fichier_a_traiter.ReadLine
		chaine = Left(ligne,InStr(ligne,"*")-1)
		liste_restante = Mid(ligne,InStr(ligne,"*")+1)
		If liste_restante = "" Then
			etudier_chaine(chaine)
		Else
			a = Replace(Mid(chaine,InStrRev(chaine,"_",Len(chaine)-1)+1),"_","")
			b = liste_restante
			liste_diviseurs_multiples = lister_diviseurs_multiples(a,b)
			If liste_diviseurs_multiples = "" Then
				etudier_chaine(chaine)
			Else
				fin = FALSE
				For i=1 to nombre_de_diviseurs_multiples
					temp = cherche_diviseurs_multiples(liste_diviseurs_multiples,i)
					fichier_temp.WriteLine chaine & temp & "_*" & modifie(liste_restante,temp)
				Next
			End If
		End If
	Wend
 
	Do While Not fichier_a_traiter.AtEndOfStream
		fichier_temp.WriteLine fichier_a_traiter.ReadLine
	Loop
	fichier_temp.Close
	fichier_a_traiter.Close
	FSO.DeleteFile("fichier_a_traiter.txt")
	FSO.MoveFile "temporaire.txt","fichier_a_traiter.txt"
End Sub
 
 
 
' ********************      PROGRAMME PRINCIPAL      ******************************
initialisation()
passage = 0
While fin = FALSE
	traitement()
Wend
 
Set fichier_final = FSO.OpenTextFile("resultat_algorithme_juniper_green_version2.txt",8)
fichier_final.WriteLine chr(13) & " ------------         FIN         ---------------------" & chr(13)
fichier_final.WriteLine "Nombre total de possibilités : " & nombre_possibilites & "     Temps total de traitement : " & temps_de_traitement()
fichier_final.Close
 
Wscript.Echo "Terminé" | 
Partager