'
' Welcome to GDB Online.
' GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
' C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
' Code, Compile, Run and Debug online from anywhere in world.
'
Public Structure tCASE ' variable des cases
Public Pietinee As Integer ' compte les piétinages
Public TypeCase As Integer ' 0 pas de nid, -1 avec nid, -2 ecrase 1 fois ..., =autres : pietinage freindly coef (pas implemente)
End Structure
Module VBModule
' Parametres
Const cNBR_CASES As Integer = 150000 ' nombre de cases dans le champ
Const cNBR_PAS_MAX As Integer = 300000 ' max nombre de pas
Const cCASE_PAR_PAS As Integer = 3 ' nombre de cases pietinees par pas
Const cNBR_NID As Integer = 10 ' nombre de nids
Const cEST_NID As Integer = -1 ' < 0 pour compte nbr de fois pietine
Const cPAS_NID As Integer = 0
Sub Main()
Dim Champ(cNBR_CASES + cCASE_PAR_PAS - 1) As tCASE ' permet de poser le pied sur la derniere case sans planter :-)
Dim iPas, iNid, n, iRnd, iCompteCasePietinees, iCountNidEcrases As Integer
Dim sngChrono As Single = Timer
iCompteCasePietinees = 0 : iCountNidEcrases = 0
'
' On Demarre
Console.WriteLine (VBCRLF + " --- Placement des Nids au Hasard ---")
Console.WriteLine ( " ------------------------------------")
' Place les cNBR_NID nids au hasard
For iNid = 1 To cNBR_NID
Randomize
iRnd = 1 + Int(cNBR_CASES * Rnd) ' index case au hasard
While Champ(iRnd).TypeCase = cEST_NID ' pas deux nids sur la même case
iRnd = 1 + Int(cNBR_CASES * Rnd)
End While
Champ(iRnd).TypeCase = cEST_NID ' nid en iRnd
Console.WriteLine (" Nid(" + Str(iNid) + ") place en case #" + Str(iRnd) + " EST UN NID")
Next iNid
Console.WriteLine (" ------------------------------------")
' On commence à marcher
Console.WriteLine(VBCRLF + " EN AVANT MARCHE !" + VBCRLF)
For iPas = 1 to cNBR_PAS_MAX ' fait cNBR_PAS_MAX pas
Randomize
iRnd = 1 + Int(cNBR_CASES * Rnd) ' tire une case au hasard
For n = 0 To cCASE_PAR_PAS - 1 ' pietine le nombre de cases successives correspondant a un pas
If Champ(iRnd + n).TypeCase < 0 Then ' est un Nid
Champ(iRnd + n).TypeCase -= 1
If Champ(iRnd + n).TypeCase = -2 Then ' nid ecrase pour la premiere fois
iCountNidEcrases += 1
Console.WriteLine(Str(iCountNidEcrases) + " eme Nid ecrase une premiere fois en case #" _
+ Str(iRnd + n) + " apres " + Str(iPas) + " pas.")
Else ' nid deja ecrase
Console.WriteLine(" Au pas " + Str(iPas) + " nid ecrase pour la " _
+ Str(-(Champ(iRnd + n).TypeCase + 1)) + " fois en case #" + Str(iRnd + n))
End If
Else ' n'est pas un nid
Champ(iRnd + n).Pietinee += 1 ' incremente le compte des pietinage de cette case
End If
If Champ(iRnd + n).Pietinee < 2 Then iCompteCasePietinees += 1 ' increment le compte des cases pietinees si premiere fois
Next n
If iCountNidEcrases >= cNBR_NID Then
Console.WriteLine (VBCRLF + " === Dernier nid ecrase : je termine ===" + VBCRLF)
iPas += 1
Exit For
eND iF
Next iPas
Console.WriteLine (" ------------------------------------")
Console.WriteLine(VBCRLF + Str(iCompteCasePietinees) + " cases pietinees sur un total de " + Str(cNBR_CASES) + " cases, pour " _
+ Str(iPas - 1) + " pas effectues et " + Str(cCASE_PAR_PAS) + " cases pietinees par pas")
Console.WriteLine (" ------------------------------------")
Console.WriteLine (VBCRLF + " --- Temps d'execution : " + Str(Timer - sngChrono) + " secondes")
Console.WriteLine (" ------------------------------------")
End Sub
End Module