\documentclass[a4paper, oneside, 10pt]{article}
\usepackage[unicode]{hyperref}
\usepackage[utf8x]{inputenc}
\usepackage[english]{babel}
\usepackage{graphicx}
\graphicspath{{media/}}
\date{\today}
\title{}
\author{}
\begin{document}



\subsection{\texorpdfstring{Camila Bassi Fernandes da Silva}{Camila Bassi Fernandes da Silva}}
\label{sec:camila_bassi_fernandes_da_silva}


\includegraphics[keepaspectratio=true,width=0.8\textwidth]{bie5782/01_curso_atual/alunos/trabalho_final/camila.bassi.silva/15134811_1231483720259068_956257790184726469_n}


Sou bióloga, formada pelo Instituto de Biociências da USP e, atualmente, sou mestranda em Genética no IB, aluna da Profa. Dra. Maria Rita Passos Bueno do grupo de pesquisa de Fissura labiopalatina. Junto com o mestrado, exerço a profissão de Perita Criminal no Instituto de Criminalística de São Paulo, onde trabalho de acordo com uma escala de plantão, o que possibilita a conciliação das duas atividades.

\subsection{\texorpdfstring{I. Meus exercícios}{I Meus exercicios}}
\label{sec:i_meus_exercicios}


Tabela com acesso aos meus exercícios resolvidos: \href{http://ecologia.ib.usp.br/bie5782/doku.php?id=bie5782:01_curso_atual:alunos:tab2}{Meus exercícios}

\subsection{\texorpdfstring{II. Trabalho final}{II Trabalho final}}
\label{sec:ii_trabalho_final}


\subsubsection{\texorpdfstring{a) Proposta 1: Montagem de escala de plantões}{a Proposta 1 Montagem de escala de plantoes}}
\label{sec:a_proposta_1_montagem_de_escala_de_plantoes}


\textbf{Contextualização}

Quando se trabalha seguindo uma escala de plantão, em que não há um horário de trabalho fixo, podendo variar entre os dias da semana e períodos de turnos, é necessária a montagem de uma escala, que modifica mensalmente de acordo com alguns fatores como: número de dias por mês e distribuição igualitária de turnos (diurno e noturno). Além disso, uma escala de plantões deve respeitar um descanso mínimo de 36 horas de um plantão ao outro. Tais fatores são mais dificultados ainda, quando esses funcionários também se revezam para trabalhar em duas unidades distintas e não devem realizar menos que 12 plantões ao mês, podendo ocorrer dupla de funcionários em alguns turnos (normalmente noturno).

\centering\includegraphics[keepaspectratio=true,width=0.8\textwidth]{bie5782/01_curso_atual/alunos/trabalho_final/camila.bassi.silva/escala}


Diante de tais dificuldades, que são enfrentadas mensalmente, a criação de uma função pouparia esse trabalho que, atualmente, é feito manualmente. Dessa forma, a proposta é desenvolver uma função que gere uma escala de funcionários com descanso mínimo de 36 horas, distribuição igualitária de turnos (diurno e noturno) e de unidades (unidades 1 e 2), e inclusão de duplas em alguns noturnos, variando de acordo com o número de dias no mês. 

\textbf{Planejamento da função}

\textbf{Entrada:} escala (\texttt{ferias}, \texttt{ano}, \texttt{mes}, \texttt{dir}, \texttt{arquivo})
\begin{itemize}
  \item \texttt{ferias} = indicar quem sairá de férias ou licença prêmio (de 1 a 11)
  \item \texttt{ano} = ano desejado para montar a escala (2018 a 2020)
  \item \texttt{mes} = mês desejado para montar a escala (de 1 a 12)
  \item \texttt{dir} = diretório em que será salvo o arquivo
  \item \texttt{arquivo} = nome do arquivo em pdf (default=escala.pdf)
\end{itemize}


\textbf{Verificando os parâmetros:}
\begin{itemize}
  \item \texttt{ferias} é um número inteiro de 1 a 11? Se não, escreve: ,,ferias precisa ser um numero inteiro entre 1 e 11."
  \item \texttt{ano} é igual a 2018, 2019 ou 2020? Se não, escreve: ,,ano precisa ser igual a 2018, 2019 ou 2020."
  \item \texttt{mes} é um número inteiro de 1 a 12? Se não, escreve: ,,mes precisa ser um numero inteiro entre 1 e 12."
  \item \texttt{arquivo} contém caracter .pdf? Se não, escreve: ,,arquivo precisa ser extensão .pdf"
\end{itemize}


\textbf{Pseudo-código:}
\begin{enumerate}
  \item Criação de vetor contendo números de 1 a 11 representando os funcionários, em que:

  \begin{enumerate}
    \item Uma pessoa será removida mensalmente, caso esteja de férias ou de licença prêmio;
    \item Apenas uma pessoa poderá sair de férias para cada mês;
    \item Todo mês deve ter uma pessoa de férias;
    \item O funcionário que estará de férias será indicado pelo usuário no argumento \texttt{ferias}.
  \end{enumerate}
  \item Criação de data frame contendo dia, mês, ano e dias da semana de 01/05/2018 a 30/04/2020.
  \item Escolha de ano e mês no data frame para montagem de escala feita pelo usuário nos argumentos \texttt{ano} e \texttt{mes}, respectivamente.
  \item Criação de uma matriz com 5 colunas representando \emph{unidade 1 dia}, \emph{unidade 2 dia}, \emph{unidade 1 noite.2}, \emph{unidade 2 noite} e \emph{unidade 1 noite}.
  \item Número de linhas da matriz definido pelo ano e mês gerados no data frame, após a escolha do usuário. O número de linhas representará o número de dias no mês.
  \item A coluna \emph{unidade 1 noite.2} poderá aparecer ou não na matriz de acordo com o número de dias no mês/número de linhas da matriz, com as seguintes condições:
  \item A coluna permanecerá se o número de dias do data frame escolhido multiplicado pelo número de turnos (2 turnos) e pelo número de unidades (2 unidades) for diferente do número de funcionários ativos (10 funcionários ativos) multiplicado pelo número mínimo de plantões por mês (12 plantões por mês), ou seja, (4*número de dias ≠ 120);
  \item Caso seja igual, a coluna será removida.
  \item Uma vez que a coluna permaneça, serão preenchidas apenas as linhas 8, 9, 14, 15, 20, 21, 26 e 27 desta coluna, representando as formações de duplas.
  \item Após os passos acima, a estrutura da matriz estará pronta para iniciar a montagem.
  \item A montagem da matriz ocorrerá da seguinte forma:

  \begin{enumerate}
    \item Preencher a matriz com o vetor de funcionarios ativos com as seguintes condições:

      \begin{enumerate}
      \item Se forem 28 dias (ou linhas): seguir a sequência normalmente;
      \item Se forem 29 dias: iniciar a sequência, não preencher os dias 8, 9, 14 e 15 da coluna \emph{unidade 1 noite.2} e seguir a sequência;
      \item Se forem 30 dias: seguir a sequência normalmente;
      \item Se forem 31 dias: iniciar a sequência, não preencher os dias 8 e 9 da coluna \emph{unidade 1 noite.2} e seguir a sequência.
    \end{enumerate}
    \item Após o preenchimento, inverter a ordem das colunas para \emph{unidade 1 dia}, \emph{unidade 1 noite}, \emph{unidade 1 noite.2} (se estiver presente), \emph{unidade 2 dia} e \emph{unidade 2 noite}.
    \item Posteriormente, inverter as colunas \emph{unidade 1 dia}+\emph{unidade 1 noite} com \emph{unidade 2 dia} +\emph{unidade 2 noite} apenas nas seguintes linhas:

      \begin{enumerate}
      \item 6 a 10 para todos, exceto para 28 dias, que será de 6 a 9;
      \item 16 a 20 para todos;
      \item 26 a último dia do mês para todos, exceto para 29 dias, que será de 28 e 29.
    \end{enumerate}
    \end{enumerate}
  \item Unir a matriz gerada com as informações de dia do mês e dia da semana do data frame.
  \item Salvar o arquivo no formato tabela em pdf, contendo as colunas com unidades/turnos e as linhas com os dias e os dias da semana com a distribuição final dos funcionários.
\end{enumerate}


\textbf{Saída:}
\begin{itemize}
  \item Arquivo no formato pdf que conterá a escala criada em que:

  \begin{itemize}
    \item Se for de 28 dias: 12 plantões com a distribuição de no mínimo 5 e no máximo 7 plantões para cada turno/unidade;
    \item Se for de 29 dias: 12 plantões com a distribuição de no mínimo 5 e no máximo 7 plantões para cada turno/unidade;
    \item Se for de 30 dias: 12 plantões com a distribuição de 6 plantões para cada turno/unidade;
    \item Se for de 31 dias: 13 plantões com a distribuição de no mínimo 5 e no máximo 8 plantões para cada turno/unidade.
  \end{itemize}
  \end{itemize}


\textbf{Comentários gerais:} Sua proposta está clara e bem organizada. Ela se propõe a resolver um problema relevante e acho que ela poderia ser bem útil. Seu algoritmo já está bem desenvolvido, então você pode começar a pensar em como tornar a função mais geral. Em outras palavras: ela está específica para um determinado contexto e seria mais interessante dar mais liberdade para o usuário especificar as características do seu local de trabalho.

\textbf{Para pensar:}
      \begin{itemize}
  \item Por que a função só considera 11 funcionários? Seria bacana torná-la mais geral para que ela possa ser empregada em outros contextos. Como você faria para que a função considere um número variável de funcionários?
  \item Seguindo o mesmo questionamento do último ponto levantado, a premissa de que “todo mês deve ter uma pessoa de férias” é específica de um contexto. Por que não torná-la mais geral também? 
  \item A função se limita ao período de 01/05/2018 a 30/04/2020. Vamos tentar romper essa premissa também? Eu pesquisei um pouco e acho que, apesar de não ser simples, é possível criar o dataframe para qualquer mês e ano. Além disso, do jeito que está colocado, toda vez que a função for rodada, será necessário criar primeiro o calendário completo para depois extrair o mês de interesse. Acho que isso pode ser otimizado também.
  \item Bônus (só para pensar mesmo): como você faria para a sua função levar em consideração as restrições de horário de cada funcionário?
\end{itemize}


\textbf{Sugestões:}
\begin{itemize}
  \item Ao invés de usar números para representar os funcionários, você poderia ter um argumento na sua função com um arquivo que tenha uma lista dos nomes. 
  \item Você colocou o argumento “arquivo” para o usuário especificar o nome que ele deseja usar. Caso não seja especificado, o nome padrão é “escala.pdf”. Eu imagino que você tenha feito isso para o usuário especificar o mês e o ano para o qual a escala está sendo montada. Se for isso mesmo, existe como salvar o arquivo com um nome que inclui uma parte padrão (“escala\_”) e outra variável (“10.2018”). Dessa forma, você evitaria que o usuário insira o nome manualmente e garantiria que os arquivos gerados pela função tenham sempre o mesmo padrão de nome.
  \item Os critérios para distribuição dos funcionários nos plantões são novamente específicos (e.g.: número mínimo de plantões por mês e unidades). Todos esses números poderiam entrar como argumentos da função para torná-la mais abrangente.
  \item Por que você optou pelo arquivo no formato .pdf? Não é tão simples criar um dataframe com esse formato no R. Existem outros mais simples e talvez até mais úteis por permitirem que o usuário faça modificações a posteriori.
\end{itemize}


\subsubsection{\texorpdfstring{b) Proposta 2: Jogo Sudoku}{b Proposta 2 Jogo Sudoku}}
\label{sec:b_proposta_2_jogo_sudoku}


\textbf{Contextualização}

Sudoku é um jogo de raciocínio em que o objetivo é preencher os números de 1 a 9 em cada espaço vazio de uma matriz $9 \times 9$, de forma que o número não se repita na mesma linha, coluna ou blocos de números ($3 \times 3$). Assim como qualquer outro jogo, o Sudoku também apresenta diferentes níveis de dificuldade, que será determinado pelo número de espaços vazios. Quanto maior a dificuldade, mais espaços vazios deverão ser preenchidos.

\centering\includegraphics[keepaspectratio=true,width=0.8\textwidth]{bie5782/01_curso_atual/alunos/trabalho_final/camila.bassi.silva/sudoku}


Muitas pessoas tem o hábito de comprar revistas com esses jogos em bancas de jornal constantemente. Esses gastos poderiam ser economizados se fosse possível gerar esses jogos e imprimir do seu próprio computador.
Dessa forma, a proposta é criar uma função que irá gerar diferentes sudokus de níveis variados (fácil, médio ou difícil) para as pessoas imprimirem, sem precisar sair de casa.

\textbf{Planejamento da função}

\textbf{Entrada:} sudoku (nivel, resposta, dir, arquivo)
\begin{itemize}
  \item \texttt{nivel} = nível de dificuldade (1 = Fácil, 2 = Médio, 3 = Difícil)
  \item \texttt{resposta} = Jogo acompanhado da resposta (sim) ou não (nao)
  \item \texttt{dir} = diretório em que será salvo o arquivo
  \item \texttt{arquivo} = nome do arquivo em jpeg (default=sudoku.jpeg)
\end{itemize}


\textbf{Verificando os parâmetros:}
\begin{itemize}
  \item \texttt{nivel} é igual a 1, 2 ou 3? Se não, escreve: ,,nivel precisa ser igual a 1 (facil), 2 (medio) ou 3 (dificil)."
  \item \texttt{resposta} é um caracter sim ou nao? Se não, escreve: ,,resposta precisa ser igual a sim ou nao."
  \item \texttt{arquivo} contém caracter .jpeg? Se não, escreve: ,,arquivo precisa ser extensão .jpeg."
\end{itemize}


\textbf{Pseudo-código:}
\begin{enumerate}
  \item Criação de matriz $9 \times 9$ com NA.
  \item Para cada célula da matriz:

  \begin{enumerate}
    \item Criação de vetor de números de 1 a 9;
    \item Substituir números deste vetor que já existam na mesma linha da célula por NA;
    \item Substituir números deste vetor que já existam na mesma coluna da célula por NA;
    \item Substituir números deste vetor que já existam no bloco $3 \times 3$ ao qual esta célula pertence por NA;
    \item Eliminar os NA's gerados no vetor de 1 a 9;
    \item Selecionar amostra aleatória dos números que restaram no vetor.
  \end{enumerate}
  \item Substituir aleatoriamente números por espaços dependendo do nível de dificuldade selecionado pelo usuário no argumento \texttt{nivel}, em que:

  \begin{enumerate}
    \item Nível 1 (Fácil) - Substituição de 36 a 42 números por espaços;
    \item Nível 2 (Médio) - Substituição de 43 a 49 números por espaços;
    \item Nível 3 (Difícil) - Substituição de 50 a 56 números por espaços.
  \end{enumerate}
  \item A matriz criada será salva no formato de imagem jpeg acompanhada da resposta, caso o usuário desejar no argumento \texttt{resposta}.
\end{enumerate}


\textbf{Saída:}
\begin{itemize}
  \item Arquivo no formato jpeg que conterá o sudoku criado com ou sem a resposta
\end{itemize}


\textbf{Comentários gerais:} Eu gostei da ideia, mas acho que se for seguir adiante com esse plano, seria necessário pensar em outras ações para a função realizar. Seu principal desafio vai ser pensar no pseudo-código para gerar diferentes versões do jogo. Eu fiz uma pesquisa rápida e vi que é possível criar um jogo de sudoku em apenas algumas linhas de comando. Acho que você pode fazer essa função como um desafio pessoal, mas me parece que seria pouco para a proposta da disciplina.

\textbf{Para pensar:}
\begin{itemize}
  \item Por que a função tem o argumento “arquivo”? 
  \item A função só gera um tipo de jogo de sudoku. Como você faria para ela gerar matrizes de jogos diferentes cada vez que é rodada? 
  \item Inicialmente, a matriz vai estar vazia. Sendo assim, não vai ter nenhum número na linha/coluna/bloco cujo correspondente no vetor seria substituído. O passo 2 do pseudo-código precisa ser repensado.
\end{itemize}


\textbf{Sugestões:}
\begin{itemize}
  \item Que tal o usuário definir o tamanho do sudoku? Ele não precisar ser sempre $9 \times 9$.
  \item Além de gerar jogos, a função poderia também solucionar jogos. Para isso, você poderia ter um argumento do tipo caractere para o usuário especificar qual ação ele deseja realizar. 
  \item Por que você optou pelo arquivo no formato .pdf? Não é tão simples criar um dataframe com esse formato no R. 
\end{itemize}


\begin{center}
\line(1,0){250}
\end{center}



\textbf{Conclusão:} Camila, eu gostei bastante das suas propostas. Apesar de ter me empolgado com o sudoku, acho que você deve investir no Plano A. No momento que você matar o algoritmo para gerar o jogo, a função vai ficar muito simples. Acho que vai ser um desafio interessante você se propor a tornar o Plano A mais generalizado. Se quiser conversar, pode me mandar um e-mail (carolina.mendonca@usp.br) e a gente combina um horário. Bom trabalho! ;-)

Carol Mendonça

\subsection{\texorpdfstring{III. Links para o trabalho final}{III Links para o trabalho final}}
\label{sec:iii_links_para_o_trabalho_final}


Para o trabalho final, resolvi seguir com o plano A, seguindo as recomendações da Carol. A minha função se chama escala e diferentemente do que propus anteriormente, ela funciona para um número variável de funcionários, sendo mais geral, mas servindo para apenas uma unidade de trabalho, cumprindo os pré requisitos de descanso de no mínimo 36 horas e com distribuição do mesmo número de plantões para cada funcionário e aproximadamente igualitária de plantões diurnos e noturnos.
\begin{itemize}
  \item Link para a página da minha função: \href{http://ecor.ib.usp.br/doku.php?id=05_curso_antigo:r2018:alunos:trabalho_final:camila.bassi.silva:escala}{.:Escala}
  \item Link para a página de ajuda da minha função: \href{http://ecor.ib.usp.br/doku.php?id=05_curso_antigo:r2018:alunos:trabalho_final:camila.bassi.silva:help}{.:Help}
\end{itemize}


\subsection{\texorpdfstring{IV. Limitações da função}{IV Limitaoes da funao}}
\label{sec:iv_limitaoes_da_funao}


A função executa por meio de um sorteio de dias, podendo gerar escala que não respeita descanso ou então não executa na primeira tentativa. Dessa forma, caso isso aconteça, recomenda-se que a função seja executada novamente. 
A função também funciona para 6 e 8 funcionários, mas ao longo dos testes realizados, foram verificados com alta frequência diversos erros na distribuição de plantões e de descanso.
Entretanto, não houve tempo hábil para corrigir tais limitações, uma vez que necessitei de um tempo para reestruturar a proposta inicial e tornar a função mais geral.

\end{document}
