using System.Collections.Generic;
private static readonly Random Rand = new Random();
private const int TotalStudents = 28;
private const int TotalLanguages = 24;
private const int TotalWeeks = 7;
private const int TotalProblems = 28;
public static void Main()
if (Students.Length != TotalStudents) {
throw new InvalidOperationException("Invalid students list length");
if (Languages.Length != TotalLanguages) {
throw new InvalidOperationException("Invalid languages list length");
if (Problems.Length != TotalProblems) {
throw new InvalidOperationException("Invalid problems list length");
IDictionary<string, ISet<(int lang, int problem)>> langsPerStudent = new Dictionary<string, ISet<(int lang, int problem)>>(TotalStudents);
foreach(string student in Students) {
langsPerStudent.Add(student, GetRandomIndexes(TotalLanguages, TotalProblems, TotalWeeks));
PrintLanguagues(langsPerStudent);
Console.WriteLine("Hello World");
private static ISet<(int lang, int problem)> GetRandomIndexes(int totalLanguages, int totalProblems, int totalWeeks) {
if (totalLanguages < 1 || totalWeeks < 1 || totalProblems < 1 || totalWeeks > totalLanguages || totalWeeks > totalProblems) {
throw new ArgumentException("Bad length or total");
ISet<int> languages = new HashSet<int>();
ISet<int> problems = new HashSet<int>();
while(languages.Count < totalWeeks) {
languages.Add(Rand.Next(totalLanguages));
while(problems.Count < totalProblems) {
problems.Add(Rand.Next(totalProblems));
if (languages.Count != totalWeeks) {
throw new InvalidOperationException("Invalid number of languages.");
if (problems.Count != totalProblems) {
throw new InvalidOperationException("Invalid number of problems.");
return languages.Zip(problems, (lang, problem) => (lang, problem)).ToHashSet();
private static void PrintLanguagues(in IDictionary<string, ISet<(int lang, int problem)>> langsPerStudent) {
foreach(string student in langsPerStudent.Keys) {
ISet<(int langIndex, int problemIndex)> assigment = langsPerStudent[student];
string languages = string.Join("|", assigment.Select(x => $"{Problems[x.problemIndex]} con {Languages[x.langIndex]}"));
Console.Out.WriteLine($"{i++}|{student}|{languages}");
private static readonly string[] Languages = new []{
private static readonly string[] Students = new []{
"1088966 ACEVEDO SANCHEZ, ELIAS JOSE",
"1095332 BELLO POLANCO, JUAN LUIS",
"1088820 CAAMAÑO MARTINEZ, JUSTIN ERNESTO",
"1096046 CABRERA RAMIREZ, FERNANDO JOSE",
"1069118 CONTRERAS JIMENEZ, THAIS",
"1076992 CUADRADO PÉREZ, JEAN MICHAEL",
"1055808 CUEVAS MATOS, EMMANUEL",
"1092585 GARCIA ALMONTE, SIMON DAVID",
"1092636 GARCÍA-DUBUS MEJÍA, SAMUEL ALEJANDRO",
"1096089 GRASSALS MERCEDES, JEFFREY",
"1085531 GRULLON OLIVERO, AXEL",
"1076915 GURIDI RODRÍGUEZ, ANTONIO CARLOS",
"1093756 GUZMAN GOMEZ, ANGEL DANIEL",
"1097821 JIMÉNEZ BERNABEL, MIGUEL ERNESTO",
"1085970 LORA BELTRE, JORGE LUIS",
"1067087 MELENDEZ NUÑEZ, ERNESTO JOSE",
"1078057 MENDOZA PEÑA, JEAN CARLOS",
"1065816 PACHECO LUCIANO, JACK DAMIOLIX",
"1093566 PEREZ SANTANA, EMILY ESTHER",
"1089624 PUCHEU PEGUERO, MARIO ERNESTO",
"1097861 RAMÍREZ TEJADA, FELIPE SEBASTIAN",
"1098839 RODRIGUEZ TAVERAS, PORFIRIO JESUS",
"1088452 ROQUE BURGOS, CARLOS RAFAEL",
"1094998 ROSA REYES, LUIS MIGUEL",
"1077703 TRINIDAD PERALTA, LEISCAR NOE",
"1094675 UREÑA BISONO, MIGUEL EDUARDO",
"1095352 UREÑA VARGAS, ENMANUEL",
"1088563 VELOZ ARENCIBIA, OSCAR"
private static readonly string[] Problems = new []{
"1. Persistencia Aditiva",
"2. Persistencia Multiplicativa",
"3. Números Aráb => Romanos",
"4. Números Romanos => Aráb",
"5. Validar número romano",
"13. Kata Pagination Seven",
"16. String Transformations",
"17. Arrays run-length Encoding and Decoding",
"18. Ordenar arreglo y eliminar duplicados",
"19. Find numbers greater than average of array",
"20. Convertir Decimal a Binario (b10 <-> b2)",
"21. Convertir Decimal a Octal (b10 <-> b8)",
"22. Convertir Decimal a Hexa (b10 <-> b16)",
"23. Convertir Binario a Octal (b2 <-> b8)",
"24. Convertir Octal a Hexa (b8 <-> b16)",
"25. Convertir colores RGB a HEX",
"26. Convertir colores HEX a RGB",
"27. Isomorphic Strings",
"28. Balanced groupings (), {}, y []"