Mathematics & c#

Fermé
chmaykil Messages postés 8 Date d'inscription samedi 21 juillet 2012 Statut Membre Dernière intervention 5 mars 2020 - Modifié le 5 mars 2020 à 08:54
 Utilisateur anonyme - 5 mars 2020 à 09:47
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
A voir également:

2 réponses

yg_be Messages postés 23408 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 décembre 2024 Ambassadeur 1 557
5 mars 2020 à 08:48
bonjour, as-tu une question?
0
Utilisateur anonyme
5 mars 2020 à 09:47
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


0