chester's blog

technology, travel, comics, books, math, web, software and ramblings

FISL 11, cruzalinhas e iG Code Golf

Jul 25, 2010

A edição desse ano do Fórum Internacional Software Livre foi interessante como de costume: palestrantes de renome e a troca de experiências dentro e fora do evento com as pessoas que fazem o software livre acontecer seguramente justificam passar esses dias em Porto Alegre. Esse ano fiz dois lances bacanas por lá:

O primeiro foi preparar e apresentar uma palestra-relâmpago sobre o cruzalinhas (slides aqui, vídeo em breve). Resolvi fazer isso na última hora, e me surpreendi com o interesse de pessoas de outras cidades (Manaus, Campinas, Florianópolis e da própria Porto Alegre) em fazer a mesma coisa, já que, segundo esse pessoal, a dificuldade em obter informações sobre o transporte público é a mesma.

O outro foi participar do Code Golf do iG, uma proposta inusitada, na qual são apresentados cinco problemas de programação. Eles são relativamente simples – o desafio é escrever o menor código-fonte que resolva cada um.

Claro que um código Python é bem menor que o seu equivalente Java, e por isso haviam categorias isoladas para cada linguagem suportada (Perl, Python, PHP, Java e Ruby). Fui o vencedor da categoria Java, com os códigos que estão no final do post.

Um aviso: NUNCA escreva código assim, a não ser que esteja participando de um Code Golf. O objetivo era sempre reduzir o tamanho e compensar a proibição de imports explícitos. Isso tem um custo: a performance quase sempre é horrível, a legibilidade é zero, é quase impossível modificar. Senti esse último lance na prática: tive que fazer uma gambiarra na questão 4 (o formato da entrada mudou, e o fix apropriado implicaria em reescrever tudo) – o tamanho dobrou e fui penalizado por isso.


Minhas soluções para o Code Golf (enunciados aqui)

Problema 1:

public class c{public static void main(String x[])throws Exception{int a=,b=1,c,i;for(i=Integer.parseInt(x[]);i>;i--){System.out.print(b+(i==1?"":", "));b=b+a;a=b-a;}}}

Problema 2:

public class c{public static void main(String x[]) throws Exception{char m,s[]=x[].replace(" ","").toLowerCase().toCharArray(),i=;int f[]=new int[255],c,l=s.length;boolean p=true;for(;i<l;i++){p=p&&s[i]==s[l-i-1];f[s[i]]++;}System.out.println((p?"":"Não é ")+"Palíndrome");while(true){m=;for(i=;i<255;i++){m=f[m]>f[i]?m:i;}if(f[m]==)return;System.out.println(f[m]+" "+m);f[m]=;}}}

Problema 3:

public class c{public static void main(String x[]) throws Exception{long a=,m=,b,c,F=0xFFFFFFFF;int i,j=;for(;j<2;j++){c=;for(i=;i<4;i++)c=c*256+Integer.parseInt(x[j].split("\\.")[i]);a=m;m=c;}a=a|(F-m);b=32;for(c=0xFF000000l;c>;c/=256){System.out.print(((a&c)>>(b-=8))+(b==?" /":"."));}for(b=32;(m&1)==;m/=2)b--;System.out.print(b);}}

Problema 4:

public class c{static int h=-1;static void w(int i){if(h!=i)System.out.print(i+" ");h=i;}public static void main(String y[])throws Exception{String[]x=(y[]+",-,"+y[1]).split(",");int m,l=x.length,n[]=new int[l],p=,i=,a=;for(;i<l;i++)if(x[i].equals("-")){a=i;p=i+1;}else n[i]=Integer.parseInt(x[i]);for(i=;(i<a&&p<l);){if(n[i]<n[p]){m=n[i];i++;}else{m=n[p];p++;}w(m);}for(;i<a;i++)w(n[i]);for(;p<l;p++)w(n[p]);}}

Problema 5:

public class c{public static void main(String x[])throws Exception{int c,p,t=,v[]={1,3,3,5,10,50};while((c=System.in.read())>-1){p=("pcbtar".indexOf(c));t+=p>-1?v[p]:;}System.out.print(t);}}

Coders At Work (Peter Seibel)

Jul 14, 2010

Coders At Work, Peter SeibelDepois de ter curtido tanto as entrevistas com os fundadores das startups mais famosas no Founders At Work, eu esperava que o Coders at Work – fosse ser ainda mais bacana. Afinal, a lista de entrevistados é diversificada e impressionante: vai de gente mais “próxima” como os criadores do memcached, JavaScript e JSON até decanos como Fran Allen e Donald Knuth, cujos méritos acadêmicos e na indústria tornam desnecessárias quaisquer apresentações.

Super Munchkin

Jul 12, 2010

Eu até curto um jogo de cartas/tabuleiro mais elaborado, mas tenho alergia àqueles onde você queima horas aprendendo para só aí começar a jogar decentemente e se divertir. Felizmente o @btco me apresentou o Munchkin – jogo de cartas que, segundo o próprio fabricante, “captura a essência da experiência da aventura-em-masmorra, sem aquela parafernália de RPG” – o que seria uma afirmação à toa, se o fabricante em questão não fosse a própria Steve Jackson Games¹ – pioneira do gênero RPG nos EUA.

Esse tipo de humor auto-depreciativo mostra o diferencial do Munchkin: ao invés de vender a ilusão de que uma mecânica complexa demonstra algum tipo de superioridade intelectual dos participantes (como fazem tantos RPGs e jogos de carta/tabuleiro por aí), ele se baseia em um conjunto simples de regras. Os detalhes mais cabeludos ficam por conta de cada carta, facilitando muito o aprendizado e tornando-o divertido de imediato.

O jogo original deu origem a variantes temáticas – a que eu tenho, claro, é o Super Munchkin, na qual jogadores e monstros são, respectivamente, super-heróis e vilões. Assim como o original satiriza o gênero RPG medieval, esse não poupa os comics da ironia: a carta “erro de continuidade” anula tudo o que foi feito numa batalha (causando grande confusão), o nível do jogador sobe com cartas do tipo ”cueca pra fora da roupa”, e por aí vai. cartas de munchkin Um pré-requisito é entender inglês – não apenas para interpretar as cartas, mas para apreciar o humor nerd em cada uma delas. A Devir lançou uma versão nacional do original, mas parece que esgotou e não se encontra mais em lugar nenhum. O melhor é importar (ou procurar um pouco por aqui) e encarar o idioma.

¹ Quem leu o livro-reportagem The Hacker Crackdown deve lembrar que o serviço secreto americano investigou de forma truculenta a empresa quando soube que um dos seus colaboradores (responsável pelo GURPS Cyberpunk) circulava no submundo hacker – pesquisa de campo é isso aí, o resto é resto.

tilewriter – desenhando ladrilhos em JavaScript

Jun 20, 2010

Eu fiquei vidrado no layout de “ladrinhos” do logotipo do site do RHoK, que lembra os micros de 8 bits sem deixar de ser moderno, e pensei “taí, vou roubar me inspirar criar um trabalho artístico derivativo para o próximo update visual do meu blog”.

O chato é que não apenas sou um zero à esquerda em GIMP/PhotoShop, mas também queria algo que pesasse menos no carregamento. Solução: programar.

O canvas do HTML5 viria a calhar, mas o suporte dos browsers ainda está longe do ideal. Resolvi, então, criar uma biblioteca minimalista para fazer desenhos nesse estilo usando elementos de HTML.

Urban Fact (Fato Urbano) / RHoK #1 SP

Jun 7, 2010

O Random Hacks of Kindness (RHoK) reuniu programadores em vários locais do mundo simultaneamente ao longo do último fim-de-semana, com o objetivo de desenvolver ferramentas que possam ajudar a lidar com os desafios gerados pelo risco de desastres naturais.

O esforço foi patrocinado e liderado por gente do Google, Yahoo!, Microsoft, NASA e do Banco Mundial, e eu não só tive a oportunidade de participar da primeira edição de São Paulo, que aconteceu aqui na Fundação Getúlio Vargas (FGV), mas também tive a alegria de ter o projeto do meu grupo, o Urban Fact, premiado com o segundo lugar.

cruzalinhas

Jun 4, 2010

O site da SPTrans oferece várias informações sobre as linhas de ônibus, trem e metrô que operam na cidade de São Paulo. A navegação, entretanto, deixa um pouco a desejar – razão que leva as pessoas a alternativas como o Tô a Pé e o eficiente sistema de rotas do Google Maps.

Este último resolve bem a minha vida, mas às vezes tudo o que eu quero é saber quais ônibus passam por um determinado local. Ou ainda: quais, dentre eles, passam por um segundo local, e quais passam entre este e um terceiro, i.e., quais minhas opções para ir do ponto A ao ponto B, e dele ao ponto C, e por aí em diante.

Misturando essa demanda com um desejo de colocar as informações de itinerário do transporte público de São Paulo nas mãos da população, desenvolvi o cruzalinhas. A aplicação ainda precisa de muitas melhorias (eu diria que é “beta”, mas o que não é?) mas já permite responder às perguntas acima.

Como de costume, o código-fonte é livre (licença MIT), e esse post vai falar um pouco sobre o funcionamento do mesmo.

cruzalinhas

The 99

May 15, 2010

The 99: OriginsOs webcomics ainda são o melhor lugar para buscar inovação em quadrinhos, por conta da ausência de editores/intermediários e da disponibilidade. Mas de vez em quando os quadrinhos tradicionais revelam surpresas agradáveis como The 99 – ou The Ninety-Nine *para alguns, e *al-tisa’a wa tisaun‎ para outros.

Entenda Lost

Apr 27, 2010

Em uma lista de e-mail o @lucasfontes resumiu bem (e me autorizou a publicar) tudo o que você precisa saber sobre essa série:

Primeira temporada: Assim.. um aviao caiu numa ilha…. e uh… essa ilha tem umas pessoas… e uh…. essas pessoas vao tentar atacar os caras do aviao. nota da producao: JURAMOS q as pessoas nao estao mortas, vcs vao adorar essa serie!

Segunda temporada: Uh… as pessoas da ilha sao malvadas e andam descalco.. eles tem um lider q nunca aparece nota da producao: a trama esta apenas comecando, teremos 15 temporadas, action figures e canecas de cafe

Terceira temporada: Uh…. agora as pessoas da ilha nao tem computador, internet e satelite….. e o lider na verdade nem existe.. eh tudo invencao.. Mataram o Santoro com apenas 2 falas em 3 temporadas… nota da producao: eles nao estao mortos…tudo sera explicado, no seu tempo.

Quarta temporada: Tem um cara q consegue sair e voltar da ilha… acho q precisamos trazer aquele lider de volta hein? nota da producao: precisamos comecar matar os personagens caros ( tipo o Michael ), CGI esta mais barato q filmar em Ibiza

Quinta temporada: Vamo leva todo mundo pra fora da ilha, dar um final feliz, e rezar pra NBC cancelar a gente pra nao precisarmos explicar a farofa q fizemos nas temporadas anteriores nota da producao: precisamos dar um tempo…. ( entre quinta e sexta, teve quase 1 ano de espera )

Sexta temporada: Fodeu galere… vamos ter q explicar tudo! O lider existe, vamo mata ele, colocar um outro malvadao na historia. E agora a grande sacada do show……. eles estao mortos. nota da producao: se o final nao colar, a gente ainda consegue fazer um dvd com uns extras e tal….. AH, e ainda temos algumas daquelas canecas pra vender!