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)
-
public class c{public static void main(String x[])throws Exception{int a=0,b=1,c ,i;for(i=Integer.parseInt(x[0]);i>0;i--){System.out.print(b+(i==1?"":", "));b=b+ a;a=b-a;}}}
-
public class c{public static void main(String x[]) throws Exception{char m,s[]=x [0].replace(" ","").toLowerCase().toCharArray(),i=0;int f[]=new int[255],c,l=s.l ength;boolean p=true;for(;i<l;i++){p=p&&s[i]==s[l-i-1];f[s[i]]++;}System.out.pri ntln((p?"":"Não é ")+"Palíndrome");while(true){m=0;for(i=0;i<255;i++){m=f[m]>f[i ]?m:i;}if(f[m]==0)return;System.out.println(f[m]+" "+m);f[m]=0;}}}
-
public class c{public static void main(String x[]) throws Exception{long a=0,m=0 ,b,c,F=0xFFFFFFFF;int i,j=0;for(;j<2;j++){c=0;for(i=0;i<4;i++)c=c*256+Integer.pa rseInt(x[j].split("\\.")[i]);a=m;m=c;}a=a|(F-m);b=32;for(c=0xFF000000l;c>0;c/=25 6){System.out.print(((a&c)>>(b-=8))+(b==0?" /":"."));}for(b=32;(m&1)==0;m/=2)b-- ;System.out.print(b);}}
-
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[0]+",- ,"+y[1]).split(",");int m,l=x.length,n[]=new int[l],p=0,i=0,a=0;for(;i<l;i++)if( x[i].equals("-")){a=i;p=i+1;}else n[i]=Integer.parseInt(x[i]);for(i=0;(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]);}}
-
public class c{public static void main(String x[])throws Exception{int c,p,t=0,v []={1,3,3,5,10,50};while((c=System.in.read())>-1){p=("pcbtar".indexOf(c));t+=p>- 1?v[p]:0;}System.out.print(t);}}



Eu fiquei vidrado no layout de "ladrinhos" do logotipo do 







Uma
Continuando o assunto do 
