Mathematics & c#

Signaler
Messages postés
8
Date d'inscription
samedi 21 juillet 2012
Statut
Membre
Dernière intervention
5 mars 2020
-
Messages postés
14462
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 juillet 2020
-
Bonjour,

Je cherche à faire quelque chose du genre j’ai une liste comme (123, 321,132)

Et je cherche une formule qui me permettra d’avoir une valeur distincte pour chaque élément. Genre faire 1+2+3 ou 3+2+1 ou 1+3+2 dans cette situation sa donnera toujours 6 (ce n'est pas bon)

Moi je cherche une combinaison qui me permettra d’avoir une valeur distincte pour chaque combinaison.
exemple (qui dans certaines situation fonctionne pas) : la somme de chiffre * index
123 --> 1*0 + 2*1 + 3*2

code:
var sumstick = new List<string>();

            for (var i = 0; i <= 1000; i++)
            {
                var tick = DateTime.UtcNow.Ticks.ToString();

                var ticks = tick.Select(x => int.Parse(x.ToString()));

                var ticksSum = 0;

                var index = 1;

                foreach (var item in ticks)
                {
                    ticksSum = ticksSum + (item * index);

                    index++;

                }

               // sums.Add(new Tuple<string, string>(tick, ticksSum.ToString()));

                sumstick.Add(ticksSum.ToString());

            }

             var isduplicate = sumstick.Count != sumstick.Distinct().Count();

Merci

2 réponses

Messages postés
11461
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 juillet 2020
655
bonjour, as-tu une question?
Messages postés
14462
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
3 juillet 2020
553
Bonjour à tous les deux.

Non seulement, il n'y a pas de question, mais en plus
Et je cherche une formule qui me permettra d’avoir une valeur distincte pour chaque élément.
or, tu as des "ticks" en entrée.
Par définition les "ticks" sont tous différents.
D'ailleurs, même ton explication part de valeurs différentes
(123, 321,132)



PS1:
se servir de var à tout bout de champ est contre productif. C# est un langage fortement typé, var a été introduit à la framework 3 (ou 3.5), avec l'apparition de Linq pour pouvoir stocker des résultats temporaire de requêtes quand ce résultat ne constitue pas un type existant.

Son utilisation oblige le système à faire l'analyse de la variable pour en découvrir les propriétés, les méthodes et le type sous jacent quand ils existe, bref plein de temps perdu.

                var tick = DateTime.UtcNow.Ticks.ToString();//c'est une string

                var ticks = tick.Select(x => int.Parse(x.ToString()));// c'est un IEnumerable<int>

                //.....
                var isduplicate = sumstick.Count != sumstick.Distinct().Count();//c'est un bool

En mettant directement le bon type, tu vas gagner en temps d'exécution.

PS2:
En plus du var ceci
                var tick = DateTime.UtcNow.Ticks.ToString();//c'est un long

                var ticks = tick.Select(x => int.Parse(x.ToString()));// c'est un IEnumerable<int>

Convertit un long en string, puis chaque caractère de la chaine en int. C'est pareil les conversion prennent du temps, au départ tu as un nombre, qu'il suffit de diviser par 10 et conserver le reste.
            long tick = DateTime.UtcNow.Ticks;
            Console.WriteLine("Tick: {0}",tick);
            List<int> ticks = new List<int>();
            while(tick > 0)
            {
                int reste = (int)(tick % 10);
                ticks.Insert(0,reste);
                tick /= 10;

                Console.WriteLine("Reste: {0}", reste);
                Console.WriteLine("Tick: {0}", tick);
            }

J'ai ajouté des traces dans la console pour te montrer le résultat