====== Lidia Sumie Yano ====== {{:01_curso_atual:alunos:trabalho_final:lidiayano:img-20180128-wa0000-1.jpg?200|Lidia Yano :)}} Mestranda em Fisiologia Geral do Instituto de Biociências da Universidade de São Paulo (IB-USP) no Laboratório de Fisiologia Respiratória e Metabolismo Energético. Título do projeto de pesquisa: "Efeitos de altas temperaturas e do termoperíodo sobre a capacidade metabólica dos tecidos em Lithobates catesbeianus (Shaw, 1802)." ---- ===== Meus Exercícios ===== Link para a página com os exercícios resolvidos -> [[.:exec]] ---- ===== Proposta do Trabalho Final ===== ==== Plano A (Principal): JO-KEN-PÔ! ==== {{ :01_curso_atual:alunos:trabalho_final:lidiayano:jo-ken-po.jpg?nolink |Jô - Quem? - Pooo}} === Contextualização === O Jokenpô tradicional é uma modalidade de jogo infantil praticado entre duas pessoas que demanda decisões rápidas e auxilia no desenvolvimento cognitivo, mas isso não impede que adultos também o pratiquem pra decidir quem vai lavar a louça LOL //O jogo é simples:// Ambos os jogadores escolhem ao mesmo tempo uma opção de objeto (pedra, papel ou tesoura) e sinalizam um formato característico com a mão referente a cada objeto escolhido. O objeto vencedor é definido por uma regra cíclica de forma que cada um dos objetos tem as mesmas chances de “vencer” e “perder” para um determinado objeto, como esquematizado na imagem abaixo: {{ :01_curso_atual:alunos:trabalho_final:lidiayano:jokenpo.png?direct&200 |}} //As únicas opções de final são:// Jogador 1 ganha, Jogador 2 ganha ou empate. O empate ocorre quando o mesmo elemento é apresentado pelos dois jogadores, sendo assim, repete-se o procedimento até que um deles ganhe. Atualmente este jogo apresenta muitas variantes dependendo do nível de complexidade e possibilidades, como por exemplo o aumento na número de elementos que, além de aumentar a complexidade das relações de “perder” e “ganhar” entre eles permite com que mais jogadores participem da mesma partida. Entretanto, para esta atividade proposta, seguirá a regra tradicional jogando o operador contra a máquina e adicionado da possibilidade de escolha em ser realizado apenas uma vez, melhor de 3 ou melhor de 5 partidas. **Que vença o melhor!** === Planejamento da Função === == 1) Entrada == * ''jokenpo(x)'' * ''x'' = é o número de partidas sendo (1) para uma vez, (3) para melhor de 3 ou (5) para melhor de 5 partidas. == 2) Verificação de Parâmetros == * ''x'' = Só pode ser 1, 3 e 5. * Se não, escreve: "Ow! Você só pode escolher entre 1, 3 ou 5 partidas!!" == 3) Pseudo-código == - Cria uma matriz ''tab.res'' de quem ganha, perde e empata. {{ :01_curso_atual:alunos:trabalho_final:lidiayano:tab_resultado.png?nolink&300 |}} - Cria uma tabela de pontuação chamada ''tab.pontos'' com 1 linha e 2 colunas com valores NAs e títulos das colunas como "operador" e "computador":{{ :01_curso_atual:alunos:trabalho_final:lidiayano:tab_pontos.png?nolink&300 |}} - Escreve a instrução geral do jogo: **“Escolha entre pedra, papel ou tesoura e o programa escolherá um destes elementos aleatoriamente. Saiba que tesoura ganha de papel, papel ganha de pedra e pedra ganha de tesoura. Boa sorte!”** - Se ''jokenpo(1)'': - Comando interativo: "Escolha uma opção: (pedra/papel/tesoura)" e guarda no objeto ''linha1'' - Escolhe aleatoriamente um das opções e guarda no objeto ''coluna1'' - Busca ''[linha1,coluna1]'' da matriz ''tab.res'' - Se o resultado for ''empate'': - repete a interação, a escolha aleatória, e a busca do resultado até que o resultado seja diferente de ''empate'' - Se o resultado for ''ganha'' : - Adiciona “1” na coluna [1] do objeto ''tab.pontos'' e adiciona “0” na coluna [2] - Retorna a tabela ''tab.pontos'' e uma frase: **"Parabéns, você é o vencedor!"** - Se o resultado for ''perde'' : - Adiciona “0” na coluna [1] de ''tab.pontos'' e adiciona “1” na coluna [2] - Retorna a tabela ''tab.pontos'' e a frase: **"Que pena... mais sorte na próxima vez!"** - Se ''jokenpo(3)'': - Gera um ciclo: - Comando interativo: "Escolha uma opção: (pedra/papel/tesoura)" e guarda no objeto ''linha(i)'' - Escolhe aleatoriamente um das opções e guarda no objeto ''coluna(i)'' - Busca ''[linha(i),coluna(i)]'' da matriz ''tab.res'' - Se o resultado for ''empate'': - não faz nada e retorna as opções, uma frase de empate - Se o resultado for ''ganha'': - Soma 1 a coluna [1] da ''tab.pontos'' , retorna ''tab.pontos'', e as opções e uma frase **"Parabéns, você é o vencedor!"** - Se o resultado for ''perde'': - Soma 1 a coluna [2] da ''tab.pontos'', retorna ''tab.pontos'', as opções e uma frase **"Que pena... mais sorte na próxima vez!"** - Se o ''OPERADOR == 2'': para e retorna ''tab.pontos'' e a frase **"Fim de jogo! Voce ganhou!"** - Se o ''COMPUTADOR == 2'': para e retorna ''tab.pontos'' e a frase **"Fim de jogo! Não foi dessa vez...tente da próxima!"** - Se o ''OPERADOR == COMPUTADOR'': retorna a frase: **"Empate de pontos! Este será o último jogo!"** - Se ''jokenpo(5)'': - Gera um ciclo: - Comando interativo: "Escolha uma opção: (pedra/papel/tesoura)" e guarda no objeto ''linha(i)'' - Escolhe aleatoriamente um das opções e guarda no objeto ''coluna(i)'' - Busca ''[linha(i),coluna(i)]'' da matriz ''tab.res'' - Se o resultado for ''empate'': - não faz nada e retorna as opções, uma frase de empate - Se o resultado for ''ganha'': - Soma 1 a coluna [1] da ''tab.pontos'' , retorna ''tab.pontos'', e as opções e uma frase - Se o resultado for ''perde'': - Soma 1 a coluna [2] da ''tab.pontos'', retorna ''tab.pontos'', as opções e uma frase de perdeu - Se o ''OPERADOR == 3'': para e retorna ''tab.pontos'' e a frase **"Parabéns, você é o vencedor!"** - Se o ''COMPUTADOR == 3'': para e retorna ''tab.pontos'' e a frase **"Fim de jogo! Não foi dessa vez...tente da próxima!"** - Se o ''OPERADOR == 2'' e ''COMPUTADOR == 2'': retorna a frase: **"Empate de pontos! Este será o último jogo!"** Oi, Lidia, tudo bele? Achei a função divertida, um pouco simples mas acho que você pode pensar em maneiras de como complementá-la para ficar mais interessante pro usuário e desafiadora para ti. Podemos seguir com ela se a gente tentar pensar em como aprimorar. Por exemplo, fiquei me perguntando o porquê de limitar o número de partidas a até 5... Porque não usar um número real positivo como argumento e seguir o jogo? Se por acaso fosse par ou desse empate, valeria oferecer a rodada de desempate. Use sua criatividade para caprichar mais, sei que Jokenpo é um jogo simples por essência mas lembre-se que você tem liberdade poética para produzir uma novidade em prol do seu aprendizado! Me escreve se quiser conversar sobre ideias e/ou qualquer dúvida que venha a ter. Estou à disposição =) [[barretoj@usp.br|Julia Barreto]] ---- ==== Plano B: TOP SECRET! ==== Ao mesmo tempo que a internet tem facilitado nossas vidas, o acesso a informações pessoais tem se tornado mais acessível para qualquer outra pessoa. Redes sociais, bancos etc, fornecem uma senha pessoal ou pedem para que o usuário as criem para facilitar a memorização, mas nem sempre estes códigos pessoais de acesso apresentam um nível de dificuldade suficiente para impedir de serem hackeadas. Sendo assim, é comum que as empresas exijam uma série de características durante a criação da senha para evitar este tipo de complicação como, por exemplo, incluir letras maiúsculas e minúsculas, números e até caracteres especiais. Por outro lado isto demanda tempo e, convenhamos, criatividade também. Portanto, o objetivo desta função é oferecer senhas (podendo ser aleatórias ou não) baseada nem alguns requisitos fornecidos pelo usuário. == 1) Entrada == * senha(''n.letras'', ''n.LETRAS'', ''n.num'','' n.caract'' , ''palavra'', ''mix'', ''invertido'') * ''n.letras'' = número de letras do alfabeto minúsculas (classe:interger, ''n.letras''>= 0) * ''n.LETRAS'' = número de letras do alfabeto maiúsculas (classe:interger, ''n.LETRAS''>= 0) * ''n.num'' = quantidade de números (classe:interger, ''n.num''>= 0) * ''n.caract'' = número de caracteres especiais (classe:interger, ''n.caract''>= 0) * ''palavra'' = vetor contendo as letras da palavra separadas dentro do objeto * ''mix'' = * Se ''TRUE'' , realizará mistura aleatória de ''n.letras'' e/ou ''n.LETRAS'' e/ou ''n.num'' e/ou '' n.caract'' e/ou ''palavra'' . * Se ''FALSE'', é mantido nesta mesma ordem. * ''invertido'' = * Se ''TRUE'', realizará a substituição das letras de ''palavra'' por números que possuem aparência semelhante. * Se ''FALSE'', é mantido. == 2) Verificação de Parâmetros == * ''n.letras'', ''n.LETRAS'', ''n.num'', ''n.caract'' = são números inteiros, maiores ou iguais a zero. Se não, escreve: **" O número precisa ser inteiro e maior ou igual a zero"** * ''palavra'' = é um vetor que contêm apenas uma letra em cada casa. Se não, escreve: **"A palavra deve ser escrita dentro de um vetor cada letra individualmente (ex. 'p','a','l','a','v','r','a')** == 3) Pseudo-código == - Criar um objeto com todas as letras minúsculas do alfabeto grego (''l'') - Criar um objeto com todas as letras maiúsculas do alfabeto grego (''L'') - Criar um objeto com os números de 0 a 9 (''n'') - Criar um objeto com os caracteres especiais básicos mais comuns como #,@,% etc (''ce'') - Criar uma matriz com os números que se parecem com as letras maiúsculas e minúsculas (''inv'')(por exemplo: A é 4, S é 5 etc..) - Cria o objeto ''senha'' para armazenar as informações - Se ''n.letras != 0'' : - Cria um objeto (''letras'') a partir do objeto ''l'' aleatoriamente com essa quantidade - Adiciona ao objeto ''senha'' - Se ''n.LETRAS != 0'' : - cria um objeto (''LETRAS'') a partir do objeto ''L'' aleatoriamente com essa quantidade - Adiciona ao objeto ''senha'' - Se ''n.num != 0 '' : - cria um objeto (''num'') a partir do objeto ''n'' aleatoriamente com essa quantidade - Adiciona ao objeto ''senha'' - Se ''n.caract != 0 '' : - cria um objeto (''caract'') a partir do objeto ''ce'' aleatoriamente com essa quantidade - Adiciona ao objeto ''senha'' - Se ''palavra != NULL '' : - Adiciona ao objeto ''senha'' - Se ''mix == TRUE'' - Então pega o objeto ''senha'' e mistura aleatoriamente - Se ''invertido == TRUE'' - Então substitui cada letra do vetor de ''palavra'' por sua correspondente da tabela ''inv'' - Adiciona ao objeto ''senha'' == Saída == Retorna o objeto ''senha'' Oi de novo! Achei a proposta interessante e útil mas, ainda sim, é simples. Seguir com essa seria necessário pensar em como poderia complementá-la para ficar mais instigante. Valeria estabelecer valores default para cada argumento e quem sabe tentar encaixar controles de fluxo. Sobre a saída, além da senha, poderia entregar uma dica ou lembrete para ela ou mesmo retomar quais são os requisitos que ela preencheu. [[barretoj@usp.br|Julia Barreto]] ---- ===== O Trabalho Final ===== A proposta escolhida foi o Plano A: Jokenpo, porém com algumas modificações e acréscimos: - Segui a sugestão feita em colocar o primeiro argumento de número de partidas (''n.partidas'') como qualquer número inteiro, positivo e diferente de zero. - Adicionalmente, foi acrescentado um argumento que permite a escolha do ''estilo'' de jogo: tradicional ou mais complexa, com 5 elementos. - Foi acrescentado imagens com frases que aparecem em determinados momentos utilizando o pacote ''magick'' - Foi acrescentado também o pacote ''crayon'' para colorir frases * Link para a página da função ''jokenpo()'' -> [[.:jokenpo()]] * Link para a página do ''help'' da função -> [[.:help]]