Fazendo um cronograma

Então .. alguém recentemente me pediu para fazer um cronograma para eles e eu concordei. Quando me sentei para fazer isso, percebi que era mais difícil do que eu pensava. É apenas um horário para dar turnos a 4 pessoas, de dia ou de noite.

Pensei em algo assim:

for Monday to Saturday {
  for(i=0;i<people.length;i++){
    if (person[i].available()){
      person.worksDay()
      person is now not available.
    }
  }

  for(i=0;i<people.length;i++){
    if (person[i].available()){
      person[i].worksNight()
      person[i] is now not available.
    }
  }
}

Portanto, a idéia por trás desse algoritmo é que, para cada dia, uma pessoa é designada para um turno diurno ou noturno. Uma pessoa está disponível se não tiverem trabalhado apenas um turno e não estiverem de férias. É de segunda a sábado. Como você provavelmente pode dizer, dadas as pessoas A, B, C, D, a tarefa seria assim (se ninguém estiver de férias):

Mon A B
Tue C D
Wed A B
Th  C D
Fri A B
Sat C D

Acho que isso funciona, mas é um pouco óbvio. A pessoa que me perguntou queria ver opções diferentes. Existe uma maneira melhor de fazer isso para ver mais do que apenas essa opção? Ou existe mesmo um programa que faça isso para você?

questionAnswers(3)

yourAnswerToTheQuestion