Question detecter des nombres consecutifs
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
il y a 11 ans 5 mois #18250
par usopp
detecter des nombres consecutifs a été créé 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)
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
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)
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 5 mois #18251
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:detecter des nombres consecutifs
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]
[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.
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
il y a 11 ans 5 mois #18253
par usopp
merci !
je vois des trucs interresant
&$sbTest
return ,@(,$Suite)
Write-Host ('-' *40)
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!
Réponse de usopp sur le sujet Re:detecter des nombres consecutifs
je vois des trucs interresant
&$sbTest
return ,@(,$Suite)
Write-Host ('-' *40)
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!
Connexion ou Créer un compte pour participer à la conversation.
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
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 ..
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 ...
<br><br>Message édité par: usopp, à: 20/10/14 10:30
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 ...
Connexion ou Créer un compte pour participer à la conversation.
- usopp
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 34
- Remerciements reçus 0
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=\"false\"
$compteur = 1
for ($i = 0; $i -lt ($Count); $i++)
{
$Current=$exemple[$i]
$Next=$exemple[$i +1]
if($verif -eq \"false\"«»)
{
write-host -nonewline \"$Current - \"
}
if ($Current -eq $Next-1)
{
$verif=\"true\"
$compteur++
}
else
{
write-host \"$Current : $compteur\"
$verif=\"false\"
$compteur = 1
}
}
1 - 1 : 1
3 - 5 : 3
7 - 8 : 2
23 - 23 : 1
33 - 36 : 4
63 - 63 : 1
[/code:1]
[code:1]
$exemple=@(1,3,4,5,7,8,23,33,34,35,36,63)
$verif=\"false\"
$compteur = 1
for ($i = 0; $i -lt ($Count); $i++)
{
$Current=$exemple[$i]
$Next=$exemple[$i +1]
if($verif -eq \"false\"«»)
{
write-host -nonewline \"$Current - \"
}
if ($Current -eq $Next-1)
{
$verif=\"true\"
$compteur++
}
else
{
write-host \"$Current : $compteur\"
$verif=\"false\"
$compteur = 1
}
}
1 - 1 : 1
3 - 5 : 3
7 - 8 : 2
23 - 23 : 1
33 - 36 : 4
63 - 63 : 1
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 5 mois #18256
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:detecter des nombres consecutifs
usopp écrit:
Ceci résoud ce pb :
[code:1]
for ($i = 0; $i -le ($Count-1); $i++)
[/code:1]
Exacte, comme quoi construire un jeux de test n'est pas du luxe.il prend pas en compte le dernier nombre
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.077 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- detecter des nombres consecutifs