Dojo@Centro 12/06/2013 – O Jogo da Velha Google!!

terça-feira, 25 junho 2013

Salve jogadores!!

Perdoem-me pelo atraso deste post. Minha semana foi bem enrolada.

No dojo de 12/06/2013 tivemos mais uma oportunidade de resolver um problema proposto pela Gigante de Mountain View Google” em sua anual competição de algoritmo, o Google Code Jam.
Contamos com a presença de 5 jogadores e um novato:
Andre Oliveira
Flávio Amieiro
Jonatas Emidio
Otávio Cardoso
Carlos Cunha
Filipe Sales (Novato)
Para quem ainda não sabe, o problema proposto foi o Tic-Tac-Toe , também conhecido como Jogo da Velha, carinhosamente apelidado pela Google de Tic-Tac-Toe-Tomek , por se tratar de uma evolução da lógica tradicional do jogo.
Tivemos também algumas coincidências relacionando o nosso código com o dia em questão.

Só lembrando… Este foi o Dojo do dia dos namorados ou Dia de São Valentim.

Pasmem!! Após os primeiros turnos de programação o resultado do nosso código estava exatamente assim.
2013-06-25

Tradução para os mais lentos: Carinha mandando beijinho, seguida de coração, seguido de carinha impressionada retornando ao final disso tudo um ‘Rolando’ e Bem no dia dos namorados. Será que é a Matrix tentando nos dizer algo?
Pois bem, sem demais delongas, este é o nosso código final postado no GitHub, que por “incressa que parível” foi finalizado antes da retrospectiva!

Flapjack-feliz
xoxo, (‘T’), (‘x’), (‘0’), <3+
Problema++
Novato++
Ar condicionado
Mate
Evolução do problema
xoxo no dia dos namorados
Pão de queijo
Dojo por default
Solução
Comida

flapjack-triste
Pouca gente+
Terminamos o problema
Recepção para o novato foi meio campenga

A Íparos agora está se tornando o espaço #CurtoCircuito. Para saber mais, leia o post da @CissaBelem sobre ele – é uma versão bastante simplificada sobre o espaço, veja outras informações na fan page do espaço e também veja o http://curto-circuito.org/ :D.

E se você gostou de tudo isso, esteja conosco na próxima 4º feira, na  Av Treze de Maio, 13 – 6° andar – Cinelândia, entre 18:30 e 19:00. Só não tem dojo@Centro se a 4º feira for dia de feriado . Qualquer dúvida, é só mandar email para o  grupo (google groups) do dojo, alguém do grupo sempre responde as dúvidas conforme for possível ou um tweet com a hashtag #dojoRio.

Você é muito bem vindo, de verdade :D .

Até a próxima o/.


Dojo@Centro 5/06/2013 – Pintando árvores

domingo, 9 junho 2013

Olá, pessoas queridas. Tudo bem?

No dojo@centro da última quarta feira, o problema que tentamos resolver foi o seguinte:

Dada uma árvore binária, só podemos pintar o nó se o nó pai já estiver pintado. Cada nó possúi um valor correspondente e a ordem da pintura é multiplicada ao valor do nó, correspondendo ao tempo de pintar o nó. Sabendo disso, qual é o menor tempo para pintar todos os nós da árvore?

Com isso, temos um conjunto de nós pintados e um conjunto de nós candidatos a serem pintados e temos que encontrar a ordem dos nós que resulta no menor tempo de pintura. O problema original pode ser visto aqui

No tópico do dojo deste dia, foi postada uma consideração sobre o problema:

É um problema de job scheduling. Parto do princípio que a maior tarefa existente, quando for possível fazer (i.e. o pai já tiver sido colorido), necessariamente vai trazer o maior ganho imediato *e global*. Isso significa, em outras palavras, que a maior tarefa precisa ser executada necessariamente logo depois da tarefa pai dela. Assim, eu posso mesclar os dois nós em uma tarefa só (pois elas sempre precisam ser executadas juntas). Mas, para isso, precisei generalizar o problema.

No problema original, as tarefas tem um tempo para ficarem prontas (inicialmente todas tem tempo 1) e a penalidade é dada pelo tempo do final (não pelo do início). Mudei para o tempo ser calculado a partir do início da tarefa pela função linear at + b. Então, inicialmente, todas as tarefas, que tinham penalidade a*t, passam a ter penalidade a*t + a, onde a é a penalidade da tarefa como descrita pelo problema. Toda vez que mesclo duas tarefas cujas penalidades são a*t + b e c*t + d, onde a primeira precisa ser executada antes da segunda, tenho que a nova penalidade é:
penalidade(A+B) = (a + c)*t + (b + d) + c*duração(A)
duração(A+B) = duração(A) + duração(B)
O “c*duração(A)” é porque enquanto A está executando, a tarefa B está acumulando penalidades proporcionais ao tempo perdido executando A.
Se a maior tarefa não tem nenhum pai na árvore (ou seja, ela pode ser executada imediatamente), executo e incremento o tempo. Senão, vou reduzindo a árvore efetuando esses merges.
Mantenho a lista de tarefas ordenadas usando set (e não uma heap, principalmente porque preciso poder remover uma tarefa no meio da lista), e para simplificar as operações na árvore, mesclo duas tarefas usando union-find (para evitar ter que percorrer as tarefas filhas atualizando seus pais).
A solução que conseguimos está no repositório Github do dojoRio
Este dojo também teve uma versão de brigadeiro feito pela Cissa Belém para comemorar o aniversário do Elias Tandel. Os dojos de aniversário estão com problemas muito bons, creio que em honra ao aniversariante :), mas além disso, o Elias trouxe uma notícia que explodiu várias cabeças: CSS 3 é Turing Complete
E os participantes que se lambuzaram de tinta foram :
  • Thiago Belem
  • Juan Lopes
  • Otávio Cardoso
  • Andre Oliveira
  • Álvaro Justen
  • Elias Tandel
  • Carlos Cunha
  • Jacqueline Abreu
  • Diego Volpato

E as pinturas bonitinhas que a galera curtiu foi:

  • Problema “profundo” – o falso problema simples, aquele que tem enunciado com aparência de fácil, que só revela a complexidade na hora de implementar +++++++
  • Novatos e o retorno de  participantes antigos ++
  • Novatos
  • Menos bullying com as linguagens
  • Nova versão de brigadeiros bel[eé]m +++++++
  • A vinda da Val Parajara, do Diego Volpato, do Júlio Marins e do Leonardo Alberto (Leobeto)
  • Aniversário do Elias Tandel +
  • Comida +++
  • CSS 3 Turing Complete +++
  • Ruby +++
  • Retorno ao dojo
  • Árvore (Estrutura de Dados)
  • Rule 110

E as manchas no chão que teremos que limpar foram:

  • Falatório ++++++
  • Ar condicionado não está funcionando direito ++++
  • Israel e Claudio Berrondo não puderam vir +
  • Fonte de dojotimer não estava ok
  • Entender um pouco mais de ruby
  • Webdings +++
  • CSS 3 não deveria ser turing complete (está fazendo mais do que deve)
  • O dojo começou tarde ++
  • Explicar várias vezes o problema atrasa o andamento do dojo
  • [] != NIL
  • Bel[eé]m fêmea, vulgo Cissa, não participou
  • Receber ligações telefonicas na hora em que está pilotando
  • O problema pareceu não estar muito adequado a ser feito seguindo a lógica do TDD. A implementação da solução foi muito exaustiva
  • Poucas bebidas
  • Apesar de menor, ainda teve momentos de bullying com as linguagens
  • Não consegui participar ++

E este foi o dojo@Centro desta semana e semana que vem tem mais. Se você quer mostrar para a sua namorada ou namorado que programação também pode ser feita em grupo e divertida, pode levar a pessoa ao próximo dojo :).

A Íparos agora está se tornando o espaço #CurtoCircuito. Para saber mais, leia o post da @CissaBelem sobre ele – é uma versão bastante simplificada sobre o espaço, veja outras informações na fan page do espaço e também veja o http://curto-circuito.org/ :D.

E se você gostou de tudo isso, esteja conosco na próxima 4º feira, na  Av Treze de Maio, 13 – 6° andar – Cinelândia, entre 18:30 e 19:00. Só não tem dojo@Centro se a 4º feira for dia de feriado . Qualquer dúvida, é só mandar email para o  grupo (google groups) do dojo, alguém do grupo sempre responde as dúvidas conforme for possível ou um tweet com a hashtag #dojoRio.

Você é muito bem vindo, de verdade :D.

Até a próxima o/.


DojoRio@Centro 29/05/2013 – Preparem suas mentes, pois está na hora do BrainF*ck !

quarta-feira, 5 junho 2013

Salve Jogadores!!

Neste dojo do dia 29/05/2013, nossas mentes foram submetidas a uma super terapia de choque. Nós fomos expostos a um problema que utiliza o BrainF*ck!

cerebro-homer-0803-1

Para quem não sabe, BrainF*ck é uma linguagem de programação esotérica ou esolang desenhada para desafiar e confundir a cabeça dos programadores, sem contar que se trata de uma Turing Completa (linguagem de programação ou máquina abstrata que tem o mesmo poder de processamento de uma máquina de Turing).

Neste dia, nós criamos um interpretador de BrainF*ck implementado em python. O problema fez tanto sucesso que surgiram algumas ideias mirabolantes como a de criar um interpretador de python escrito com BrainF*ck ou até mesmo rodar um dojo com esta esolang.

Para os curiosos de plantão, segue o código no GitHub: 20130529 – brainf_ck – python /

Neste dia tivemos casa cheia, com pelo menos dezessete seres viventes e pensantes. Opa!! Não podemos deixar de lembrar que a cor vermelha do monitor voltou a funcionar. Ou seja, foi um dia de muita festa!!!

Jogadores do Dia:

Otávio Cardoso
Juan Lopes
Israel Teixeira
Flávio Amieiro
Jonatas Emidio
Patrick Porto
Eduardo Stalinho
Andre Oliveira
Thiago Belem
Carlos Cunha

Carinhas Felizes:

Feliz

Problema+++++
BrainFuck++++
Maquina de Turing+
Jaq me deu bronca
Pessoas novas+++++
Pessoas velhas
Comida++
Elefante do PHP
O retorno do vermelho+++
Saraivadas e patadas
Pessoal animado
Python++
next()
Excelente recepção
Horário
Doces
Tempo para a retrospectiva
Muita gente
Bolo salgado+
Explicação do dojo pelo Stalinho
Bastante Pessoas+
Pessoas que retornarem
Debora veio
Frase do Carlos
Comentário do Israel
comecei a ter um linguagem
Dinâmica de cooperação

Carinhas Tristes:

Triste

Tomei bronca da Jaq
Que que a Cissa colocou no bolo?
Esqueci de novo a comida
Cheiro de macho+
Cheguei no meio/sai no meio
Não Dojei
Fogo amigo
Cheguei atrasado
Não programei
Me pareceu que faltou muito para terminar
Pouco salgado
Pessoas agitadas
Python
Dia do ódio
Bagunça
Testes que não falham
Sem salgados
Calor
Sem case no python
Falatório
Cavaladas
Alguns não codaram
Fome
Vambora que jogo chato vem.
Em alguns momentos achei difícil de te acompanhar.
Loop infinito
Conversa na hora errada.

Não importa o que acontecer, sempre terá dojo nas 4º feiras, começando em torno das 18:30 – 19:00 em algum lugar do Rio de Janeiro.

Gostou da gente? O dojo@Centro é realizado na Íparos/Hacker Space #CurtoCircuito – Av Treze de Maio, 13 – 6° andar – Cinelândia, entre 18:30 e 19:00 de todas as quartas feiras (menos feriados) . Qualquer dúvida, é só mandar email para o  grupo (google groups) do dojo, alguém do grupo sempre responde as dúvidas conforme for possível.

Você é muito bem vindo :D

Até a próxima :D