Um escritório (vamos chamá-lo de "O Escritório") reduzirá o tempo perdido em 2019, consolidando as festas de aniversário do escritório. Quaisquer duas pessoas com um aniversário entre segunda e sexta-feira (inclusive) da mesma semana serão comemoradas com uma festa de aniversário compartilhada em algum momento da semana. As pessoas cujos aniversários acontecem no sábado ou no domingo não recebem nenhuma festa.
Algumas pessoas não gostam de compartilhar uma festa de aniversário com pessoas que não compartilham seu aniversário real. Eles ficarão com muita raiva de ter uma festa de aniversário compartilhada .
Vamos simular um escritório e encontrar a primeira semana em que alguém fica muito irritada sobre sua festa de aniversário do Shared .
O desafio
Escreva um programa ou função que produza o primeiro número da semana ISO de 2019 em que alguém em um escritório simulado fica muito irritado com a festa de aniversário compartilhada , sujeito às seguintes regras básicas:
- insira um número inteiro N > 1, que é o número de trabalhadores no escritório.
- os N aniversários em si são distribuídos uniformemente aleatoriamente de 1º de janeiro a 31 de dezembro (ignore 29 de fevereiro).
- mas as semanas úteis para determinar as Festas de Aniversário Compartilhadas são as Datas da Semana ISO de 2019, que são entre 2019-W01-1 (2018-12-31) e 2019-W52-7 (2019-12-29). Uma nova semana ISO começa toda segunda-feira. (Acho que isso é tudo o que você realmente precisa saber sobre as semanas da ISO para esse desafio).
- para as pessoas N no escritório, cada uma tem uma chance de 1/3 de ter um tipo de personalidade de festa de aniversário compartilhada com muita raiva , então você terá que simular isso também.
- mas eles não ficarão zangados se a festa for compartilhada com pessoas que têm o mesmo aniversário.
- gerar o número da semana ISO (o formato exato para isso é flexível, desde que o número da semana esteja claro) para a primeira ocorrência de uma pessoa com muita raiva . Se não houver pessoas zangadas, você pode produzir qualquer coisa que não seja confundida com uma semana ISO ou o programa poderá errar, etc.
Algumas suposições simplificadoras:
- como mencionei, ignore completamente a edição de 29 de fevereiro (uma complicação desnecessária)
- ignore os feriados públicos (esta é uma comunidade internacional, portanto nossas férias serão diferentes) e apenas presuma que o escritório esteja aberto todos os dias da semana.
Regras
Isso é código-golfe. A resposta mais curta em bytes para cada idioma vence. Brechas padrão proibidas.
Boas explicações sobre o código.
Exemplos Trabalhados
Exemplo artificial 1 com entrada N = 7. A primeira e a segunda colunas são aleatórias, conforme descrito nas regras (mas não são realmente aleatórias aqui, é claro).
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2018-12-31 W01 In the 2019 ISO week date year
Y 2018-12-31 W01 Same birthday, so no anger happens
N 2019-02-05 W06
Y 2019-03-15 W11 No anger happens because other W11 b-day is a Saturday
N 2019-03-16 W11
N 2019-09-08 W36 My birthday!
Y 2019-12-30 - Not in the 2019 ISO week date year
Portanto, nenhuma raiva acontece. O programa ou função pode gerar um erro ou gerar algo que não seja confundido com um número da semana ISO.
Exemplo 2 com N não especificado.
Angry Type
Person? Birthday ISO Week Comment
================================================================================
N 2019-01-19 W03
Y 2019-02-04 W06
N 2019-02-05 W06 No anger because not an angry person
... ... ... (No angry people until...)
Y 2019-03-12 W11 Very Angry Person!
N 2019-03-14 W11
... ... ... ...
A saída seria W11
ou algo equivalente.