Question detecter des nombres consecutifs

Plus d'informations
il y a 11 ans 5 mois #18250 par usopp
bonjour,

je galère pour trouver le bon algo qui me permet de retourner les nombres consécutifs en précisant combien de nombres consécutifs ont été trouvés ( pas facile a expliquer) :unsure:

exemple de données en entrée

[code:1]$exemple=@(1,3,4,5,7,8,23,33,34,35,36,63)

$exemple.count
12[/code:1]
en sortie j'aimerais avoir un truc du genre
[code:1]1,1 (1)
3,5 (3)
7,8 (2)
23,23 (1)
33,36 (4)
63,63 (1)
somme: (12)[/code:1]

si quelqu'un a une idée !? merci ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 5 mois #18251 par Laurent Dardenne
Un essai :
[code:1]
function Split-Sequence{
#Prerequis: la collection doit être triée
param([int[]]$List)
$Count=$List.Count
$Suite=New-Object System.collections.Arraylist
if ($Count -lt 2)
{
if ($Count -eq 1)
{
Write-debug \"One item send \"
[void]$Suite.Add($List[0])
}
else
{
Write-debug \"Zero item\"
}
#force l'émission d'un tableau d'un élément
return ,@(,$Suite)
}
for ($i = 0; $i -lt ($Count-1); $i++)
{
$Current=$List[$i]
Write-debug \"traite $Current\"
$Next=$List[$i +1]
if (($Current -ne $Next) -and ($Current -eq $Next-1))
{
Write-debug \"Add current sequence $Current\"
[void]$Suite.Add($Current)
}
else
{
[void]$Suite.Add($Current)
Write-debug \"New suite. Send : $suite\"
#implicit Write-output
,$Suite
$Suite=New-Object System.collections.Arraylist
}
}
}# Split-Sequence

$sbTest={
$exemple=$base|sort-object
$Result=Split-Sequence $exemple
$ofs=','
Write-host \"Result.count = $($result.count)\"
$result|% {\"$_\"}
Write-Host ('-' *40)
}

$base=@()
&$sbTest

$base=@(1)
&$sbTest

$base=@(1,1,4,4,33)
&$sbTest

$base=@(1,3,4,5,7,8,23,33,34,35,36,63)
&$sbTest
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 5 mois #18253 par usopp
Réponse de usopp sur le sujet Re:detecter des nombres consecutifs
:whistle: merci !

je vois des trucs interresant
&$sbTest
return ,@(,$Suite)
Write-Host ('-' *40)
:ohmy: je vais avoir de la recherche a faire lol

sinon if (($Current -ne $Next) -and ($Current -eq $Next-1))

je faisait un truc du genre if($current -eq $list[$i+1]+1) c'est plus class le avec $Next-1, et j'avais pas fait le $count-1 dans le for ($i = 0; $i -lt ($Count-1); $i++)

je vais essayer d'adapter tout cela dans mon code pour voir ! merci beaucoup! :side:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 5 mois #18254 par usopp
Réponse de usopp sur le sujet Re:detecter des nombres consecutifs
bon ben je galere toujours autant ..:angry:

Laurent ton script me sort

[code:1]
Result.count = 1
1
Result.count = 4
1
1
4
4
Result.count = 5
1
3,4,5
7,8
23
33,34,35,36
[/code:1]

surment le count-1 qui pose probleme car il prend pas en compte le dernier nombre et cela affiche aussi les nombre de la suite alors que j'aimerais avoir que le min et max

j'essaye de le modifier pour qu'il me sorte :

[code:1]$base=@(1,4,33)
1,1 : 1
4,4 : 1
33 : 1
total count = 3[/code:1]
(: 1 est le nombre de chiffre dans la suite)

[code:1]$base=@(1,3,4,5,7,8,23,33,34,35,36,63)
1,1 : 1
3,5 : 3
7,8 : 2
23,23 : 1
33,36 : 4
63,63 : 1
total count = 12[/code:1]
j'essaye avec measure... pour le min et max
et je reflechi a une function recursive mais ...:unsure:<br><br>Message édité par: usopp, à: 20/10/14 10:30

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 5 mois #18255 par usopp
Réponse de usopp sur le sujet Re:detecter des nombres consecutifs
j'ai trouvé une solution semble t il c'est pas propre mais c'est mieux que rien :)

[code:1]
$exemple=@(1,3,4,5,7,8,23,33,34,35,36,63)

$verif=\&quot;false\&quot;
$compteur = 1
for ($i = 0; $i -lt ($Count); $i++)
{
$Current=$exemple[$i]
$Next=$exemple[$i +1]
if($verif -eq \&quot;false\&quot;«»)
{
write-host -nonewline \&quot;$Current - \&quot;
}

if ($Current -eq $Next-1)
{
$verif=\&quot;true\&quot;
$compteur++
}
else
{
write-host \&quot;$Current : $compteur\&quot;
$verif=\&quot;false\&quot;
$compteur = 1
}
}

1 - 1 : 1
3 - 5 : 3
7 - 8 : 2
23 - 23 : 1
33 - 36 : 4
63 - 63 : 1
[/code:1]
:woohoo:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 5 mois #18256 par Laurent Dardenne
usopp écrit:

il prend pas en compte le dernier nombre

Exacte, comme quoi construire un jeux de test n'est pas du luxe.
Ceci résoud ce pb :
[code:1]
for ($i = 0; $i -le ($Count-1); $i++)
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.102 secondes
Propulsé par Kunena