Problemas Aritméticos (2015/1)

alias Project Euler

Para os cursos de graduação em Matemática Aplicada e Engenharias.

Motivação

Programar é uma atividade que envolve comunicar um propósito (realizar alguma tarefa) ao ser mais burro do mundo: um computador. Mas nem sempre basta dar (todas!) as instruções - às vezes, dado o tamanho da tarefa, é preciso se preocupar com o tempo que esta vai tomar.

Este curso almeja combinar o aprendizado de uma linguagem de programação com a preocupação constante de escrever um programa eficiente. Os problemas do Project Euler estão organizados em dificuldade progressiva, o que permite ir aprofundando o conhecimento de programação sem, entretanto, perder de vista o objetivo de escrever programas rápidos. E a definição de "rápido" será relativamente clara: que o programa rode em menos de 1 minuto, a "regra de honra" do Project Euler.

Indicações práticas

Mesmo que, oficialmente, não haja pré-requisitos, vale a pena já ter feito alguma programação antes. Não necessariamente em um curso, é claro. O mais importante é ter motivação para resolver os problemas todas as semanas!

E que linguagem eu uso? Bom, a minha resposta (conforme acima) é sempre "a que você quer aprender", pois é assim que o Project Euler funciona melhor. Mas o que fazer em caso de dúvida? Se alguns amigos sugerem uma, outros sugerem outra, você ouviu falar de mais três... sugiro que você me mande um email. Se você não tem nenhuma sugestão de linguagem (!!!) e faz graduação em "exatas", você pode usar o iPython notebook.

Ementa subliminar

Ao longo de uma seleção dos 70 primeiros problemas do Project Euler, vamos ter oportunidade de falar de:

  • algoritmos (ordenação, busca, ...),
  • estruturas de dados (arrays, listas, conjuntos, ...), e
  • técnicas de programação (como testar se o seu programa roda rápido o suficiente, como escrever uma função que você possa reutilizar em problemas seguintes, ...)
  • 2015/1
    • Tabela de problemas, parâmetros e tempos (em construção)
    • Planejamento do curso
    • Semana 1: Medindo a performance dos seus programas.
      Comparativo do problema 1 (em inglês)
      Em sala: 1, 4; em casa: 2, 3, 5
    • Semana 2: Números primos
      Em sala: 7, 9; em casa: 10, 12
    • Semana 3: Força bruta
      Em sala: 6, 8, 91; em casa: 11, 21
    • Semana 4: Programaçao dinâmica
      Em sala: 14, 15; em casa: 18, 21
      Alguns números para o problema 15 generalizado (k = 3 passos para a direita consecutivos no máximo):
    • Semana 5: Recorrência
      Em sala: 24; em casa: 25
    • Semana 6: Força bruta II
      Em sala: 23, 27, 28, 30; em casa: 29, 31
    • Semana 7: Recorrência II: Geradores e continuações
      Em sala: 32, 34; em casa: 35
    • Semana 8: Teoria dos Números
      Em sala: 26, 33, em casa: 37, 44
    • Semana 9: Teoria dos Números II
      Em sala: 41, 45, 48 em casa: 51
    • Semana 10: Geradores e BruteForce
      Em sala: 61, 68
    • Semana 11: Frações contínuas, Pell bis
      Em sala: 64, 65, 66
    • Semana 12: Revisao de geradores
      Em sala: 78, 98
    • Semana 13: Finish
      Em sala: 94, 88
    • Semana 14: Projeto
    • Semana 15: Projeto
    • Semana 16: Projeto, relatório até dia 15 de julho
    • Semana 17: Apresentaçoes dos projetos dia 15 de julho
    • Semana 18: Apresentaçoes dos projetos dias 20 e 22 de julho
UFRJ Departamento de Matemática Aplicada - Instituto de Matemática - UFRJ
Valid XHTML 1.1 Valid CSS! Desenvolvido por: Bernardo Freitas Paulo da Costa Inspirado do padrão: TIC/UFRJ