Re: [Rio-pm] Número no final do package

2014-05-04 Thread breno
Só de curiosidade: http://returnvalues.useperl.at (especificamente,
http://returnvalues.useperl.at/values.html)

Eu costumo botar "1" em trabalhos profissionais, e "42" em projetos
open-source. Em alguns módulos do SDL a gente botou "all your base are
belong to us", e o Dancer exporta a DSL "true" e recomenda seu uso nas
apps feitas com ele.

Qual o seu valor de retorno favorito? :D


[]s

-b

2014-05-03 18:30 GMT-03:00 Bruno Buss :
> Os dois 1os resultados do Google...
>
> http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package
> http://stackoverflow.com/questions/3606528/why-do-you-have-to-put-a-1-at-the-end-of-a-perl-5-module
>
> 2014-05-03 18:03 GMT-03:00 Aureliano Guedes :
>>
>> Ola monges,
>>
>> tenho uma dúvida meio idiota:
>> "O que é aquele número no final do módulo??"
>>
>> exemplo:
>>
>> package Meu::Modulo;
>>
>> ...
>>
>> 1;
>>
>> No módulo do Garu mesmo:
>>
>> package Acme::BOPE;
>>
>> .
>>
>> 42;
>>
>> Eu sempre coloquei de forma automática o '1;', mas não faço ideia do que
>> é, alguns módulos tem números diferentes.
>> Mas o que é esse numero? Pra que serve? Como seu qual número devo colocar?
>>
>> Abraços,
>>
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
>
> --
> Bruno C. Buss
> http://www.brunobuss.net
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm


Re: [Rio-pm] Número no final do package

2014-05-04 Thread Adriano Ferreira
2014-05-04 12:12 GMT-03:00 breno :

> Só de curiosidade: http://returnvalues.useperl.at (especificamente,
> http://returnvalues.useperl.at/values.html)
>
> Eu costumo botar "1" em trabalhos profissionais, e "42" em projetos
> open-source. Em alguns módulos do SDL a gente botou "all your base are
> belong to us", e o Dancer exporta a DSL "true" e recomenda seu uso nas
> apps feitas com ele.
>
> Qual o seu valor de retorno favorito? :D


"0 but true" =)


>


>
> []s
>
> -b
>
> 2014-05-03 18:30 GMT-03:00 Bruno Buss :
> > Os dois 1os resultados do Google...
> >
> >
> http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package
> >
> http://stackoverflow.com/questions/3606528/why-do-you-have-to-put-a-1-at-the-end-of-a-perl-5-module
> >
> > 2014-05-03 18:03 GMT-03:00 Aureliano Guedes :
> >>
> >> Ola monges,
> >>
> >> tenho uma dúvida meio idiota:
> >> "O que é aquele número no final do módulo??"
> >>
> >> exemplo:
> >>
> >> package Meu::Modulo;
> >>
> >> ...
> >>
> >> 1;
> >>
> >> No módulo do Garu mesmo:
> >>
> >> package Acme::BOPE;
> >>
> >> .
> >>
> >> 42;
> >>
> >> Eu sempre coloquei de forma automática o '1;', mas não faço ideia do que
> >> é, alguns módulos tem números diferentes.
> >> Mas o que é esse numero? Pra que serve? Como seu qual número devo
> colocar?
> >>
> >> Abraços,
> >>
> >> ___
> >> Rio-pm mailing list
> >> Rio-pm@pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm
> >
> >
> >
> >
> > --
> > Bruno C. Buss
> > http://www.brunobuss.net
> >
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Número no final do package

2014-05-04 Thread Stanislaw Pusep
(0x2B or not 0x2B)

воскресенье, 4 мая 2014 г. пользователь Adriano Ferreira написал:

>
>
>
> 2014-05-04 12:12 GMT-03:00 breno 
> 
> >:
>
>> Só de curiosidade: http://returnvalues.useperl.at (especificamente,
>> http://returnvalues.useperl.at/values.html)
>>
>> Eu costumo botar "1" em trabalhos profissionais, e "42" em projetos
>> open-source. Em alguns módulos do SDL a gente botou "all your base are
>> belong to us", e o Dancer exporta a DSL "true" e recomenda seu uso nas
>> apps feitas com ele.
>>
>> Qual o seu valor de retorno favorito? :D
>
>
> "0 but true" =)
>
>
>>
>
>
>>
>> []s
>>
>> -b
>>
>> 2014-05-03 18:30 GMT-03:00 Bruno Buss 
>> 
>> >:
>> > Os dois 1os resultados do Google...
>> >
>> >
>> http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package
>> >
>> http://stackoverflow.com/questions/3606528/why-do-you-have-to-put-a-1-at-the-end-of-a-perl-5-module
>> >
>> > 2014-05-03 18:03 GMT-03:00 Aureliano Guedes 
>> > 
>> >:
>> >>
>> >> Ola monges,
>> >>
>> >> tenho uma dúvida meio idiota:
>> >> "O que é aquele número no final do módulo??"
>> >>
>> >> exemplo:
>> >>
>> >> package Meu::Modulo;
>> >>
>> >> ...
>> >>
>> >> 1;
>> >>
>> >> No módulo do Garu mesmo:
>> >>
>> >> package Acme::BOPE;
>> >>
>> >> .
>> >>
>> >> 42;
>> >>
>> >> Eu sempre coloquei de forma automática o '1;', mas não faço ideia do
>> que
>> >> é, alguns módulos tem números diferentes.
>> >> Mas o que é esse numero? Pra que serve? Como seu qual número devo
>> colocar?
>> >>
>> >> Abraços,
>> >>
>> >> ___
>> >> Rio-pm mailing list
>> >> Rio-pm@pm.org 
>> >> http://mail.pm.org/mailman/listinfo/rio-pm
>> >
>> >
>> >
>> >
>> > --
>> > Bruno C. Buss
>> > http://www.brunobuss.net
>> >
>> > ___
>> > Rio-pm mailing list
>> > Rio-pm@pm.org 
>> > http://mail.pm.org/mailman/listinfo/rio-pm
>> ___
>> Rio-pm mailing list
>> Rio-pm@pm.org 
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Número no final do package

2014-05-04 Thread Aureliano Guedes
'Warning! The consumption of alcohol may cause you to think you have mystical 
kung-fu powers.'

Date: Sun, 4 May 2014 20:08:49 +0200
From: creakt...@gmail.com
To: rio-pm@pm.org
Subject: Re: [Rio-pm] Número no final do package

(0x2B or not 0x2B)

воскресенье, 4 мая 2014 г. пользователь Adriano Ferreira  написал:




2014-05-04 12:12 GMT-03:00 breno :


Só de curiosidade: http://returnvalues.useperl.at (especificamente,

http://returnvalues.useperl.at/values.html)



Eu costumo botar "1" em trabalhos profissionais, e "42" em projetos

open-source. Em alguns módulos do SDL a gente botou "all your base are

belong to us", e o Dancer exporta a DSL "true" e recomenda seu uso nas

apps feitas com ele.



Qual o seu valor de retorno favorito? :D
"0 but true" =)  






[]s



-b



2014-05-03 18:30 GMT-03:00 Bruno Buss :

> Os dois 1os resultados do Google...

>

> http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package

> http://stackoverflow.com/questions/3606528/why-do-you-have-to-put-a-1-at-the-end-of-a-perl-5-module



>

> 2014-05-03 18:03 GMT-03:00 Aureliano Guedes :

>>

>> Ola monges,

>>

>> tenho uma dúvida meio idiota:

>> "O que é aquele número no final do módulo??"

>>

>> exemplo:

>>

>> package Meu::Modulo;

>>

>> ...

>>

>> 1;

>>

>> No módulo do Garu mesmo:

>>

>> package Acme::BOPE;

>>

>> .

>>

>> 42;

>>

>> Eu sempre coloquei de forma automática o '1;', mas não faço ideia do que

>> é, alguns módulos tem números diferentes.

>> Mas o que é esse numero? Pra que serve? Como seu qual número devo colocar?

>>

>> Abraços,

>>

>> ___

>> Rio-pm mailing list

>> Rio-pm@pm.org

>> http://mail.pm.org/mailman/listinfo/rio-pm

>

>

>

>

> --

> Bruno C. Buss

> http://www.brunobuss.net

>

> ___

> Rio-pm mailing list

> Rio-pm@pm.org

> http://mail.pm.org/mailman/listinfo/rio-pm

___

Rio-pm mailing list

Rio-pm@pm.org

http://mail.pm.org/mailman/listinfo/rio-pm





___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm  
  ___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] Número no final do package

2014-05-04 Thread Ole Peter Smith
eu! huahuxiao! kuakua

0le


2014-05-04 16:21 GMT-03:00 Aureliano Guedes :

> 'Warning! The consumption of alcohol may cause you to think you have
> mystical kung-fu powers.'
>
> --
> Date: Sun, 4 May 2014 20:08:49 +0200
> From: creakt...@gmail.com
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] Número no final do package
>
>
> (0x2B or not 0x2B)
>
> воскресенье, 4 мая 2014 г. пользователь Adriano Ferreira написал:
>
>
>
>
> 2014-05-04 12:12 GMT-03:00 breno :
>
> Só de curiosidade: http://returnvalues.useperl.at (especificamente,
> http://returnvalues.useperl.at/values.html)
>
> Eu costumo botar "1" em trabalhos profissionais, e "42" em projetos
> open-source. Em alguns módulos do SDL a gente botou "all your base are
> belong to us", e o Dancer exporta a DSL "true" e recomenda seu uso nas
> apps feitas com ele.
>
> Qual o seu valor de retorno favorito? :D
>
>
> "0 but true" =)
>
>
>
>
>
>
> []s
>
> -b
>
> 2014-05-03 18:30 GMT-03:00 Bruno Buss :
> > Os dois 1os resultados do Google...
> >
> >
> http://stackoverflow.com/questions/5293246/why-the-1-at-the-end-of-each-perl-package
> >
> http://stackoverflow.com/questions/3606528/why-do-you-have-to-put-a-1-at-the-end-of-a-perl-5-module
> >
> > 2014-05-03 18:03 GMT-03:00 Aureliano Guedes :
> >>
> >> Ola monges,
> >>
> >> tenho uma dúvida meio idiota:
> >> "O que é aquele número no final do módulo??"
> >>
> >> exemplo:
> >>
> >> package Meu::Modulo;
> >>
> >> ...
> >>
> >> 1;
> >>
> >> No módulo do Garu mesmo:
> >>
> >> package Acme::BOPE;
> >>
> >> .
> >>
> >> 42;
> >>
> >> Eu sempre coloquei de forma automática o '1;', mas não faço ideia do que
> >> é, alguns módulos tem números diferentes.
> >> Mas o que é esse numero? Pra que serve? Como seu qual número devo
> colocar?
> >>
> >> Abraços,
> >>
> >> ___
> >> Rio-pm mailing list
> >> Rio-pm@pm.org
> >> http://mail.pm.org/mailman/listinfo/rio-pm
> >
> >
> >
> >
> > --
> > Bruno C. Buss
> > http://www.brunobuss.net
> >
> > ___
> > Rio-pm mailing list
> > Rio-pm@pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
> ___ Rio-pm mailing list
> Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> ___
> Rio-pm mailing list
> Rio-pm@pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
/
 ( O O )
=oOO==(_)==OOo=
Every day and every hour, I'm Learning more
  The more I Learn, the less I Know about before
 The Less I know, the more I want to Look around
 Diggin' deeper into Higher Ground...  UB40
   .oooO Oooo.
==( )=( )=
 \  ( )  /
  \_)   (_/
===
Ole Peter Smith, IME, UFG
http://olepeter.mat.ufg.br
 -
ole at ufg.br 
===
   Life sure is a Mystery to be Lived
  Not a Problem to be Solved
===
___
Rio-pm mailing list
Rio-pm@pm.org
http://mail.pm.org/mailman/listinfo/rio-pm

Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo

2014-05-04 Thread Aureliano Guedes
Acabei de subir para o CPAN a versão 0.02 daquele 
módulo.https://metacpan.org/pod/Math::Palindrome
Mas agora que acabei de ver seu e-mail.
Algumas modificações já irei fazer para subir a versão 0.03.
Se você tentar instalar depois me fala se deu certo?

From: bruno.b...@gmail.com
Date: Sat, 3 May 2014 18:57:58 -0300
To: rio-pm@pm.org
Subject: Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo

Sobre o lance do next_palindrome antes do loop:
Mas com isso você quebrou o caso onde o valor inicial já é um palindromo 
primo... ou seja, não ta certo :P
Você não consegue fazer uma condição do loop melhor, tal que ela verifique as 
duas condições e só pare quando o número for um primo palindromo sempre, desde 
a 1a verificação? ;)


Sobre a explicação do modulo:
Opa, muito bom! Seems good to me :-)Só acho que você precisa tratar todos os 
casos onde $n =~ m/^9+$/, porque só o 99 e 999 não bastam (mas foi legal que 
você já tinha percebido o problema deles :-)


Tratar eles é bem fácil eu acho:if($n =~ m/^9+$/){  $r = '1' . (0 x ((length 
$n) - 1)) . '1';}
Seems legit?


Por fim, seria legal voce escrever tudo isso na documentação do seu módulo, 
pois provavelmente vai ajudar quem estiver escolhendo um para usar :-)
Acho que já estou convencido que sua next_palindrome está ok (tirando esse 
problema aí de cima dos números com todos os dígitos 9). Agora só precisamos 
melhorar o loop principal do seu programa. Lembre-se do que você quer (um primo 
palindromo) e do que você realmente precisa dentro desse seu loop. Tente 
construir uma invariante das iterações do loop, o que você pode garantir a cada 
passada do loop?




2014-05-03 11:27 GMT-03:00 Aureliano Guedes :





Então, esse problema já é do loop principal e não do módulo. Porque eu faço: 

$time = next_palindrome($time);

Antes do loop principal.acho que pode ser corrigido fazendo:

$time = next_palindrome($time) if (!is_palindrome($time));


Fiz isso para evitar que um time() primo finalize o loop mesmo sem ele começar, 
já que o loop inicia assim:while(!is_prime($time))


Agora quanto ao módulo em sí, a logica usada é a seguinte:- Um número 
palíndromo é obrigatoriamente igual a ele mesmo se lido de traz para frente, 
então- Se dividirmos pela metade os dígitos de um numero palíndromo de número 
de dígitos maior ou igual a 2 então a primeira metade é obrigatoriamente igual 
a segunda lida de traz para frente. Isso me leva as seguintes conclusões:


1- Se o reverso da segunda parte é menor que a primeira parte # 8652 -> 86 > 
25logo  o próximo palíndromo é obrigatoriamente a primeira parte concatenada 
com o reverso dela mesma

# 86 . (reverse 86)Isso se torna verdadeiro porque no caso usado para exemplo 
'8668' a segunda parte é o '68' que tem seu reverso '86' que é igual a primeira 
parte.


2- Se se o reverso da segunda parte é maior ou igual a primeira parte# 8668 -> 
86 == 86 # ou # 8669 -> 86 < 96logo o próximo palíndromo é obrigatoriamente a 
primeira parte incrementada concatenada com seu reverso

# 8668 -> 86 +1 -> 87 . 78 -> 8778
Então minha heurística foi aplicada em cima de uma lógica matemática, o que 
apesar do módulo não vir com os testes, em meus testes ao final do 
desenvolvimento ele fez corretamente todas as respostas. 

Inclusive estou fazendo algumas correções para subir estas correções.Eu não sei 
fazer direito aqueles testes, mas enviarei com os testes na próxima.
Quanto ao Math::NumSeq::Palindromes, acho que poderia ser melhor de usar, mais 
direto, no meu você pode imprimir o próximo palindromo fazendo apenas 'say 
next_palindrome($n);'.


From: bruno.b...@gmail.com
Date: Sat, 3 May 2014 10:01:11 -0300
To: rio-pm@pm.org


Subject: Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo

Então, eu não consigo instalar seu modulo no meu sistema, mas supondo que ele 
esteja correto, principalmente que a função "next_palindrome" retorne 
exatamente o próximo palindromo maior ou igual ao número...





Para esse seu programa:(1) Entrada: 9. Saída esperada: 9. Saída atual: 11.
(2) Entrada: 191. Saída esperada: 191. Saída atual: Alguma coisa que não é 191 
e fiquei com preguiça de terminar o chinês.




(3) Entrada: 666. Saída esperada: 727. Saída atual: Alguma coisa que não é 727 
e fiquei com preguiça de terminar o chinês. Mas logo depois da 1a iteração do 
while... o $time foi bumpado para 796 - por causa do if((reverse $time) % 2 == 
0) - e já passou do 727 e nunca vai voltar para ele






japa++ pela consideração entre as duas versões do reverse reverse $time. Eu 
ainda acho que esse trecho ta errado destrói qualquer tentativa de construir 
uma invariante no algoritmo.





2014-05-01 22:27 GMT-03:00 Aureliano Guedes :





E pronto minha solução sem os bugs que falou: http://pastebin.com/PQQyg5BK
Engraçado: teve o melhor desempenho.



Um simples detalhe reduziu o tempo de execução pela metade.
Fazer:  $time = reverse $time;  $time++;



$time = reverse $time;
g

Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo

2014-05-04 Thread Bruno Buss
O seu teste 001_load.t ainda falha, basicamente porque ele tenta utilizar
seu módulo como se fosse um objeto, tentando fazer
um Math::Palindrome->new().

Assim, esse teste é criado automaticamente para você... e se seu módulo não
for utilizado como um objeto, você pode remove-lo :-)

Yay, moar tests! \o/

Algumas sugestões sobre os testes:
* Quebre seus testes em arquivos diferentes, cada um testando uma função ou
uma funcionalidade específica do seu módulo.

* Talvez seja interessante fazer testes muito grandes, como o que seu que
loopa nos 1os 100k palindromos, sejam marcados como testes para rodar
somente no seu ambiente (de autor)... pois eles parecem mais smoke tests do
que testes unitários de fato.

Além disso, sobre esse seu teste do loop... ele está testando que o
next_palindrome() de fato gera um palindromo, mas não testa se ele de fato
gera o *proximo* palíndromo para todos aqueles casos. Como você faria para
testar isso? :-)



Mais duas sugestões sobre o processo de desenvolvimento at all:
* Considere colocar o seu código num repositório onde outras pessoas podem
contribuir, tanto na parte de código quanto de documentação, tipo o Github.

* Experimente gerenciar seus modulos/dists com o Dist::Zilla... sua vida
provavelmente será bem mais feliz :P https://metacpan.org/pod/Dist::Zilla

Nice job! :-)

[ ]'s




2014-05-04 21:48 GMT-03:00 Aureliano Guedes :

> Acabei de subir para o CPAN a versão 0.02 daquele módulo.
> https://metacpan.org/pod/Math::Palindrome
>
> Mas agora que acabei de ver seu e-mail.
>
> Algumas modificações já irei fazer para subir a versão 0.03.
>
> Se você tentar instalar depois me fala se deu certo?
>
>
> --
> From: bruno.b...@gmail.com
> Date: Sat, 3 May 2014 18:57:58 -0300
>
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo
>
> Sobre o lance do next_palindrome antes do loop:
>
> Mas com isso você quebrou o caso onde o valor inicial já é um palindromo
> primo... ou seja, não ta certo :P
>
> Você não consegue fazer uma condição do loop melhor, tal que ela verifique
> as duas condições e só pare quando o número for um primo palindromo sempre,
> desde a 1a verificação? ;)
>
> Sobre a explicação do modulo:
>
> Opa, muito bom! Seems good to me :-)
> Só acho que você precisa tratar todos os casos onde $n =~ m/^9+$/, porque
> só o 99 e 999 não bastam (mas foi legal que você já tinha percebido o
> problema deles :-)
>
> Tratar eles é bem fácil eu acho:
> if($n =~ m/^9+$/){
>   $r = '1' . (0 x ((length $n) - 1)) . '1';
> }
>
> Seems legit?
>
> Por fim, seria legal voce escrever tudo isso na documentação do seu
> módulo, pois provavelmente vai ajudar quem estiver escolhendo um para usar
> :-)
>
> Acho que já estou convencido que sua next_palindrome está ok (tirando esse
> problema aí de cima dos números com todos os dígitos 9). Agora só
> precisamos melhorar o loop principal do seu programa. Lembre-se do que você
> quer (um primo palindromo) e do que você realmente precisa dentro desse seu
> loop. Tente construir uma invariante das iterações do loop, o que você pode
> garantir a cada passada do loop?
>
>
>
> 2014-05-03 11:27 GMT-03:00 Aureliano Guedes :
>
> Então, esse problema já é do loop principal e não do módulo.
> Porque eu faço:
>
>1. $time = next_palindrome($time);
>
> Antes do loop principal.
> acho que pode ser corrigido fazendo:
>
>1. $time = next_palindrome($time) if (!is_palindrome($time));
>
>
> Fiz isso para evitar que um time() primo finalize o loop mesmo sem ele
> começar, já que o loop inicia assim:
> while(!is_prime($time))
>
> Agora quanto ao módulo em sí, a logica usada é a seguinte:
> - Um número palíndromo é obrigatoriamente igual a ele mesmo se lido de
> traz para frente, então
> - Se dividirmos pela metade os dígitos de um numero palíndromo de número
> de dígitos maior ou igual a 2 então a primeira metade é obrigatoriamente
> igual a segunda lida de traz para frente. Isso me leva as seguintes
> conclusões:
>
> 1- Se o reverso da segunda parte é menor que a primeira parte
> # 8652 -> 86 > 25
> logo  o próximo palíndromo é obrigatoriamente a primeira parte concatenada
> com o reverso dela mesma
> # 86 . (reverse 86)
> Isso se torna verdadeiro porque no caso usado para exemplo '8668' a
> segunda parte é o '68' que tem seu reverso '86' que é igual a primeira
> parte.
>
> 2- Se se o reverso da segunda parte é maior ou igual a primeira parte
> # 8668 -> 86 == 86 # ou # 8669 -> 86 < 96
> logo o próximo palíndromo é obrigatoriamente a primeira parte incrementada
> concatenada com seu reverso
> # 8668 -> 86 +1 -> 87 . 78 -> 8778
>
> Então minha heurística foi aplicada em cima de uma lógica matemática, o
> que apesar do módulo não vir com os testes, em meus testes ao final do
> desenvolvimento ele fez corretamente todas as respostas.
> Inclusive estou fazendo algumas correções para subir estas correções.
> Eu não sei fazer direito aqueles testes, mas enviarei com os testes na
> próxima.
>
> Qu

Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo

2014-05-04 Thread Aureliano Guedes
Entao vou colocar no github mesmo porque nao to sabendo fazer os testes.

Bruno Buss  escreveu:

O seu teste 001_load.t ainda falha, basicamente porque ele tenta utilizar
seu módulo como se fosse um objeto, tentando fazer
um Math::Palindrome->new().

Assim, esse teste é criado automaticamente para você... e se seu módulo não
for utilizado como um objeto, você pode remove-lo :-)

Yay, moar tests! \o/

Algumas sugestões sobre os testes:
* Quebre seus testes em arquivos diferentes, cada um testando uma função ou
uma funcionalidade específica do seu módulo.

* Talvez seja interessante fazer testes muito grandes, como o que seu que
loopa nos 1os 100k palindromos, sejam marcados como testes para rodar
somente no seu ambiente (de autor)... pois eles parecem mais smoke tests do
que testes unitários de fato.

Além disso, sobre esse seu teste do loop... ele está testando que o
next_palindrome() de fato gera um palindromo, mas não testa se ele de fato
gera o *proximo* palíndromo para todos aqueles casos. Como você faria para
testar isso? :-)



Mais duas sugestões sobre o processo de desenvolvimento at all:
* Considere colocar o seu código num repositório onde outras pessoas podem
contribuir, tanto na parte de código quanto de documentação, tipo o Github.

* Experimente gerenciar seus modulos/dists com o Dist::Zilla... sua vida
provavelmente será bem mais feliz :P https://metacpan.org/pod/Dist::Zilla

Nice job! :-)

[ ]'s




2014-05-04 21:48 GMT-03:00 Aureliano Guedes :

> Acabei de subir para o CPAN a versão 0.02 daquele módulo.
> https://metacpan.org/pod/Math::Palindrome
>
> Mas agora que acabei de ver seu e-mail.
>
> Algumas modificações já irei fazer para subir a versão 0.03.
>
> Se você tentar instalar depois me fala se deu certo?
>
>
> --
> From: bruno.b...@gmail.com
> Date: Sat, 3 May 2014 18:57:58 -0300
>
> To: rio-pm@pm.org
> Subject: Re: [Rio-pm] [GOLF] Descanso de Pascoa: Maior palindromo
>
> Sobre o lance do next_palindrome antes do loop:
>
> Mas com isso você quebrou o caso onde o valor inicial já é um palindromo
> primo... ou seja, não ta certo :P
>
> Você não consegue fazer uma condição do loop melhor, tal que ela verifique
> as duas condições e só pare quando o número for um primo palindromo sempre,
> desde a 1a verificação? ;)
>
> Sobre a explicação do modulo:
>
> Opa, muito bom! Seems good to me :-)
> Só acho que você precisa tratar todos os casos onde $n =~ m/^9+$/, porque
> só o 99 e 999 não bastam (mas foi legal que você já tinha percebido o
> problema deles :-)
>
> Tratar eles é bem fácil eu acho:
> if($n =~ m/^9+$/){
>   $r = '1' . (0 x ((length $n) - 1)) . '1';
> }
>
> Seems legit?
>
> Por fim, seria legal voce escrever tudo isso na documentação do seu
> módulo, pois provavelmente vai ajudar quem estiver escolhendo um para usar
> :-)
>
> Acho que já estou convencido que sua next_palindrome está ok (tirando esse
> problema aí de cima dos números com todos os dígitos 9). Agora só
> precisamos melhorar o loop principal do seu programa. Lembre-se do que você
> quer (um primo palindromo) e do que você realmente precisa dentro desse seu
> loop. Tente construir uma invariante das iterações do loop, o que você pode
> garantir a cada passada do loop?
>
>
>
> 2014-05-03 11:27 GMT-03:00 Aureliano Guedes :
>
> Então, esse problema já é do loop principal e não do módulo.
> Porque eu faço:
>
>1. $time = next_palindrome($time);
>
> Antes do loop principal.
> acho que pode ser corrigido fazendo:
>
>1. $time = next_palindrome($time) if (!is_palindrome($time));
>
>
> Fiz isso para evitar que um time() primo finalize o loop mesmo sem ele
> começar, já que o loop inicia assim:
> while(!is_prime($time))
>
> Agora quanto ao módulo em sí, a logica usada é a seguinte:
> - Um número palíndromo é obrigatoriamente igual a ele mesmo se lido de
> traz para frente, então
> - Se dividirmos pela metade os dígitos de um numero palíndromo de número
> de dígitos maior ou igual a 2 então a primeira metade é obrigatoriamente
> igual a segunda lida de traz para frente. Isso me leva as seguintes
> conclusões:
>
> 1- Se o reverso da segunda parte é menor que a primeira parte
> # 8652 -> 86 > 25
> logo  o próximo palíndromo é obrigatoriamente a primeira parte concatenada
> com o reverso dela mesma
> # 86 . (reverse 86)
> Isso se torna verdadeiro porque no caso usado para exemplo '8668' a
> segunda parte é o '68' que tem seu reverso '86' que é igual a primeira
> parte.
>
> 2- Se se o reverso da segunda parte é maior ou igual a primeira parte
> # 8668 -> 86 == 86 # ou # 8669 -> 86 < 96
> logo o próximo palíndromo é obrigatoriamente a primeira parte incrementada
> concatenada com seu reverso
> # 8668 -> 86 +1 -> 87 . 78 -> 8778
>
> Então minha heurística foi aplicada em cima de uma lógica matemática, o
> que apesar do módulo não vir com os testes, em meus testes ao final do
> desenvolvimento ele fez corretamente todas as respostas.
> Inclusive estou fazendo algumas correções para subir estas corr