Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```C#
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using static System.Console;
- namespace pinter_8.A._1_multiplying_permutations
- {
- class Program
- {
- static void display(Dictionary<int, int> f)
- {
- foreach (var key in f.Keys.OrderBy(elt => elt)) Write($"{key} "); WriteLine();
- foreach (var key in f.Keys.OrderBy(elt => elt)) Write($"{f[key]} "); WriteLine();
- }
- static void display(List<List<int>> cycles)
- {
- foreach (var cycle in cycles)
- {
- Write("(");
- foreach (var i in cycle) Write(i);
- Write(")");
- }
- WriteLine();
- }
- static Dictionary<int, int> permutation(string s) =>
- Enumerable.Range(1, s.Count())
- .Zip(
- s.Select(elt => elt - '0'),
- (k, v) => (key: k, value: v))
- .ToDictionary(kv => kv.key, kv => kv.value);
- static List<int> get_cycle(Dictionary<int,int> f, int i)
- {
- var result = new List<int>();
- while(true)
- {
- if (result.Contains(i)) return result;
- result.Add(i);
- i = f[i];
- }
- }
- static List<List<int>> permutation_to_disjoint_cycles(Dictionary<int, int> f) =>
- Enumerable.Range(1, f.Keys.Max())
- .Aggregate(
- new List<List<int>>(),
- (result, i) =>
- result.SelectMany(elt => elt).Contains(i) ? result :
- f[i] == i ? result :
- result.Concat(new List<List<int>> { get_cycle(f, i) }).ToList());
- static void display_permutation_as_disjoint_cycles(string s)
- {
- display(permutation(s)); WriteLine();
- display(permutation_to_disjoint_cycles(permutation(s)));
- WriteLine("--------------------");
- }
- static void Main(string[] args)
- {
- display_permutation_as_disjoint_cycles("492517683");
- display_permutation_as_disjoint_cycles("749238165");
- display_permutation_as_disjoint_cycles("795312486");
- display_permutation_as_disjoint_cycles("987436512");
- }
- }
- }
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement