internal Student[] StudentInstances { get; set; }
public static void Main()
Program pg = new Program();
int[] result = pg.findSignatureCounts(new int[]{3, 2, 1});
for (int i = 0; i < result.Length; i++)
Console.Write($"{result[i]},");
private void InitializeStudents(int[] students)
StudentInstances = new Student[students.Length];
for (int i = 0; i < students.Length; i++)
StudentInstances[i] = new Student(students[i], this);
private int[] findSignatureCounts(int[] arr)
int[] signatures = new int[arr.Length];
for (int i = 0; i < StudentInstances.Length; i++)
StudentInstances[i].RotateBook();
signatures[i] = StudentInstances[i].CurrentBook.Signatures;
if(StudentInstances[i].CanPass == false)
Program StudentInstanceProvider { get; set; }
internal Student(int id, Program studentInstanceProvider)
this.StudentInstanceProvider = studentInstanceProvider;
CurrentBook = new Book(this);
internal int Id { get; set; }
internal Book CurrentBook { get; set; }
internal bool CanPass { get; set; }
internal void Accept(Book book)
Console.WriteLine($"Current book owner = {CurrentBook.Owner.Id}, this.Id = {this.Id}");
if (this.CurrentBook.Owner.Id == this.Id)
internal void RotateBook()
StudentInstanceProvider.StudentInstances[this.Id - 1].Accept(this.CurrentBook);
internal int Signatures { get; set; }
internal Student Owner { get; set; }
internal Book(Student student)