Advertisement
Pearlfromsu

combs permutations etc

Jun 4th, 2023
1,128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.30 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. namespace CombConsole {
  5.     public class Comb {
  6.         public static IEnumerable<List<T>> SubSetsGeneration<T>(T[] input) {
  7.             var resList = new List<List<T>>();
  8.             int n = input.Length;
  9.             int[] a = new int[n + 1];
  10.             while (a[n] != 1) {
  11.                 var list = new List<T>();
  12.                 for (int i = 0; i < n; i++)
  13.                     if (a[i] == 1)
  14.                         list.Add(input[i]);
  15.                 resList.Add(list);
  16.                 int j = 0;
  17.                 while (a[j] == 1) {
  18.                     a[j] = 0;
  19.                     j++;
  20.                 }
  21.                 a[j] = 1;
  22.             }
  23.             return resList;
  24.         }
  25.         public static IEnumerable<List<T>> RepetitionPlacing<T>(T[] input, int k) {
  26.             var resList = new List<List<T>>();
  27.             int n = input.Length;
  28.             int[] b = new int[k];
  29.             while (b[k - 1] != n - 1) {
  30.                 var list = new List<T>();
  31.                 for (int i = 0; i < k; i++)
  32.                     list.Add(input[b[i]]);
  33.                 resList.Add(list);
  34.                 int j = 0;
  35.                 while (b[j] == n - 1) {
  36.                     b[j] = 0;
  37.                     j++;
  38.                 }
  39.                 b[j]++;
  40.             }
  41.             return resList;
  42.         }
  43.         public static IEnumerable<List<T>> Combinations<T>(T[] input, int k) {
  44.             var resList = new List<List<T>>();
  45.             int n = input.Length;
  46.             int[] b = new int[k];
  47.             for (int i = 0; i < k; i++)
  48.                 b[i] = i;
  49.             int ii = 0;
  50.             while (ii != -1) {
  51.                 var list = new List<T>();
  52.                 for (int i = 0; i < k; i++)
  53.                     list.Add(input[b[i]]);
  54.                 resList.Add(list);
  55.                 int mx = n - 1;
  56.                 ii = k - 1;
  57.                 for (; ii >= 0; ii--) {
  58.                     if (b[ii] < mx) {
  59.                         b[ii]++;
  60.                         for (int j = ii + 1; j < k; j++)
  61.                             b[j] = b[j - 1] + 1;
  62.                         break;
  63.                     }
  64.                     mx = b[ii] - 1;
  65.                 }
  66.             }
  67.             return resList;
  68.         }
  69.         public static IEnumerable<List<T>> Premutations<T>(T[] input, int k) {
  70.             var resList = new List<List<T>>();
  71.             int n = input.Length;
  72.             int[] b = new int[k];
  73.             for (int i = 0; i < k; i++)
  74.                 b[i] = i;
  75.             int ii = 0;
  76.             while (ii != -1) {
  77.                 var list = new List<T>();
  78.                 for (int i = 0; i < k; i++)
  79.                     list.Add(input[b[i]]);
  80.                 resList.Add(list);
  81.                 int mx = n - 1;
  82.                 for (ii = k-1; ii >= 0; ii--) {
  83.                     if (b[ii] < mx) {
  84.                         b[ii]++;
  85.                         for (int j = ii + 1; j < k; j++)
  86.                             b[j] = b[j - 1] + 1;
  87.                         break;
  88.                     }
  89.                     mx = b[ii] - 1;
  90.                 }
  91.             }
  92.             return resList;
  93.         }
  94.     }
  95.     class Program
  96.     {
  97.         static void Main(string[] args)
  98.         {
  99.             //Comb cb = new Comb();
  100.             /*for (double mx = 1.0; mx <= 100; mx++)
  101.             {
  102.                 double pro = 1;
  103.                 for (double i = 1.0; i <= mx; i += 1.0)
  104.                     pro *= (1.0 - (i / 365.0));
  105.                 Console.WriteLine($"{mx}: {1-pro}");
  106.  
  107.             }*/
  108.             /*int i = 0;
  109.             foreach(var item in Comb.SubSetsGeneration(new int[] { 1, 2, 3, 4, 5}))
  110.                 Console.WriteLine("{0}: {1}", ++i, String.Join(", ", item));
  111.             */
  112.             /*int j = 0;
  113.             foreach (var item in Comb.RepetitionPlacing(new int[] { 1, 2, 3, 4, 5 }, 2).OrderBy(el => el.Count()))
  114.                 Console.WriteLine("{0}: {1}", ++j, String.Join(", ", item));*/
  115.  
  116.             int k = 0;
  117.             foreach (var item in Comb.Combinations(new int[] { 1, 2, 3, 4, 5 }, 4).OrderBy(el => el.Count()))
  118.                 Console.WriteLine("{0}: {1}", ++k, String.Join(", ", item));
  119.  
  120.  
  121.             //Console.WriteLine(cb.ToString());
  122.         }
  123.     }
  124. }
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement