devaneios online

posts recentes

Novo Código da Estrada ap...

Kit Assalto ?

Kiva, um ano

coisas...

Actividades sexuais!

CUIDADOS SEXUAIS PARA APO...

MusiCÃO ...

Bugs Bunny, pelo 'pai'

Arrumar a mala é fácil

Vinnie Jones ensina a sal...

mini boss

Ge Ni Al

...

A importância dos detalhe...

Angry football birds?

Publicidade criativa

Hmm.. medo de motoqueiros...

Garfield?

gatos (desta vez com água...

Silicone com fartura

Publicidade

subscrever feeds

arquivos

Julho 2013

Setembro 2012

Agosto 2012

Julho 2012

Maio 2012

Março 2012

Janeiro 2012

Dezembro 2011

Novembro 2011

Outubro 2011

Setembro 2011

Agosto 2011

Julho 2011

Junho 2011

Maio 2011

Abril 2011

Março 2011

Fevereiro 2011

Janeiro 2011

Dezembro 2010

Novembro 2010

Outubro 2010

Setembro 2010

Agosto 2010

Julho 2010

Junho 2010

Maio 2010

Abril 2010

Março 2010

Janeiro 2010

Julho 2009

Junho 2009

Abril 2009

Março 2009

Fevereiro 2009

Janeiro 2009

Dezembro 2008

Novembro 2008

Outubro 2008

Agosto 2008

Julho 2008

Junho 2008

Maio 2008

Abril 2008

Março 2008

Fevereiro 2008

Janeiro 2008

Terça-feira, 21 de Outubro de 2008

Codebits 2008 - Quiz V - A minha solução

Conforme prometido, e agora que este 'quiz' já terminou, deixo aqui a minha solução.

Se bem se recordam, eu fiquei cheio de pica porque já conhecia estas imagens. Quer dizer... já as tinha visto e tinha ideia do que eram. Sendo assim pensei para comigo "Ah... Eu sei o que isto é. Eu consigo quebrar isto!" Não foi assim tão simples. Muita gente sabia o que era e a prova é que fui o 20º a apresentar a solução.

Primeiro tinhamos que perceber o que era isto:

QRCode do quiz V

 

Isto é um QRCode. Quer dizer... não é bem, mas eu na altura nem reparei.

E, cheio de pica, fiz o seguinte:

 

#1 - Guardar a imagem no meu PC. Cálculei que fosse necessária alguma manipulação da mesma, e não me enganei.

 

#2 - Procurar descodificadores online. Andei pelo google, e distraí-me quando percebi a quantidade brutal de descodificadores para usar no telemóvel, Tentei uns quantos, mas não havia meio de conseguir um que fosse compatível com o meu telefone. Às tantas desisti de usar o telemóvel e acabei por usar o ZXing.

 

#3 - Tentar descodificar a imagem. O ZXing rejeita-a dizendo "Isto não é um QRCode". Bolas...Sera fácil demais... Bem, aí comecei a manipular a imagem. Passei o verde para branco, e nada... Inverti o preto com o branco e nada...

 

#4 - Reparei então que os exemplos de QRCodes tinham sempre 2 quadrados alinhados na margem esquerda. "O Cabr$%#% rodou isto!" (Desculpa JP). Toca de abrir o gimp e rodar a imagem 90 graus. Continua a não dar.... Nova inversão de cores e nada... Fiz mais algumas coisa mas nada funcionava. Desisti e fui dormir...

 

#5 - No dia seguinte, e conforme já relatei, ouvi uns colegas a passarem pelos mesmos passos... até que um deles fala numa rotação em torno do eixo vertical.

Bolas! Podia ser isso.. Era mesmo porque ele até leu a pergunta em voz alta.

Não sei se foi consciente ou não mas o certo é que nem ouvi bem a pergunta.

 

#6 - Já novamente em casa, fui experimentar de novo... Rotação, inversão de cores e de repente o ZXing "cospe" cá para fora:

"Para o quinto desafio, o zarolho consultar: Quantas vogais em ababab no decimo que termina com inveja?"

 

#7- Inicialmente pensei que fosse novo trocadilho e que precisasse de alguma outra manipulação. Zarolho? ababab? Quem é o zarolho?

Obviamente que é Camões... Décimo? Só pode ser o décimo canto dos Lusíadas.

Fui a www.oslusiadas.com e confirmei que o décimo canto termina com a palavra enveja, forma arcaica de inveja.

 

#8 - Aqui espalhei-me ao comprido. Não sei bem porque, meti na cabeça que era para contar apenas as vogais da última estrofe. Mais propriamente as vogais das 6 primeiros versos (ababab) da estrofe. No caso, seriam as vogais dos versos:

 

Ou fazendo que, mais que a de Medusa,
A vista vossa tema o monte Atlante,
Ou rompendo nos campos de Ampelusa
Os muros de Marrocos e Trudante,
A minha já estimada e leda Musa
Fico que em todo o mundo de vós cante,

 

#9 - Resolvi ensair os meus parcos conhecimentos de perl e fiz um programazito que contava as vogais. Novo problema. Não dava conta certa. Depois de algum debug descobri que o problema tinha a ver com as vogais acentuadas - á e ó.

Não fosse por isso, contei-as (e recontei-as várias vezes) à mão. Eram exactamente 80. Enviei um mail com a resposta.

 

#10 - Recebi um mail de volta, passado algum tempo, e dizia "São mais. muitas mais". Só aí se fez luz. Era o canto todo, não era apenas a última estrofe.

 

#11 - Voltei à página dos Lusíadas, e gravei o texto num ficheiro. Iniciei a análise do texto. Cada estrofe começa pelo número. Depois uma linha em branco, depois dez linhas de versos e nova linha em branco para começar tudo de novo. 11 linhas para cada estrofe. Para contar as vogais interessavam-me apenas as linhas 3 a 8, inclusivé.

Agora já não podia contar as letras a olho. Era mesmo necessário fazer um programa.

 

Fiz um ciclo while:

 

while ($line=<STDIN>)
{
    $x = ($. % 11) ;
    if ( ($x > 2) && ($x < 9) )  # if it's between 3 and 8 (ababab)

    {

 

O $. é o número da linha actual. % é o operador de módulo. Se x contiver valores entre 3 e 8 é porque a linha actual é para contar as vogais.

Converti tudo para letras minúsculas:

 

$_ = lc($line);
 

Aqui experimentei várias maneiras de contar as vogais. Simples comparações, expressões regulares de perl, todas me davam valores errados. Continuava a não conseguir processar bem as vogais acentuadas.

Foi aqui que tive um momento "Ah!" e resolvi o problema assim:

 

$count += tr/aeiou// ;

$count += (tr/áàâãéèêíìóòôõúù// ) / 2 ;

 

O operador tr (translate?) substitui os caracteres e devolve o número de caracteres substituídos. Na primeira linha considera as vogais sem acentos e vai incrementando o contador count. Na segunda analisa as vogais acentuadas e soma metade do valor retornado. (O tr sobre as vogais acentuadas dava-me sempre o dobro, porque os caracteres acentuados são representados com 2 bytes. Não é exactamente assim, mas é "close enough"). Ao dividir o valor por dois estava a somar apenas 1 por cada vogal acentuada.

Cheguei ao valor de 12598. Que enviei por mail. Realmente é muito diferente de 80.

 

Final: Recebi um mail a confrmar que estava certo. Mas, sinceramente, não estava à espera de ter esta trabalheira toda! Ufa! Já não tenho idade para isto,

 

AR

 

 

 

 

sinto-me: velho
tags: ,
publicado por AReis às 21:53
link do post | comentar | favorito
|

Publicidade

disclaimer
AReis
My Tech blog
Aquecedores a óleo
Arrendar Casa
Classificados grátis

pesquisar

 

tags

todas as tags

LibraryThing

Publicidade