Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 a 10 de 15

Tópico: [DESAFIO] Maior palíndromo

  1. #1
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.444
    Post Thanks / Like

    [DESAFIO] Maior palíndromo

    Números palíndromos são números cuja uma metade é espelho da outra.

    Exemplo:
    9009 se dividirmos em número igual de dígitos teremos 90 e 09 sendo 90 o espelho ou inverso de 09.
    9009 é resultado de 91x90, sendo o maior número palíndromo resultado da multiplicação de dois números naturais de mesma quantidade de dígito (ou diferente de 1).

    O objetivo desse desafio é achar o maior número palíndromo resultado da multiplicação de dois números de 3 dígitos.
    Que o desafio comece!

    Obs: Não será aceito nenhum código que use funções de outras fontes que não feitas pelo próprio programador.
    Obs²: Pode ser utilizado qualquer linguagem de programação.

    O resultado devera ser 906609


    Projeto Euler - Maior Palíndromo (verificador de resposta)
    Última edição por guedes.acp; 14 Apr 2014 às 22:44.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  2. #2
    Membro ingresso
    Data de Ingresso
    Apr 2012
    Posts
    70
    Post Thanks / Like
    Minha resposta:

    Código PHP:
    #!/usr/bin/perl -w

    use strict;

    my $n;
    our($gn,$gn2,$p);

    sub reverse_number {
            
    my $c 1;
            
    my $n shift;
            
    my $rev;
            for(
    my $i=length($n);$i>0;$i--,$c*=10){
                    
    $rev .= ($n/$c)%10;
            }
            return 
    $rev;
    }

    sub check {
            
    my $n1 shift;
            
    my $n2 shift;
            
    my $tot $n1*$n2;
            if(
    $tot == reverse_number($tot)){
                    print 
    "$n1 x $n2 = ".$tot."\n";
                    if(
    $tot >= $p){
                            (
    $gn,$gn2,$p) = ($n1,$n2,$tot);
                    }
            }
    }


    for(
    100..999){
            for(
    $n=100;$n<1000;$n++){
                    
    check($_,$n);
            }
    }

    print 
    "Maior palindromo encontrado foi: $p\n";
    print 
    "Resultado de $gn x $gn2\n"
    Última edição por str0p; 15 Apr 2014 às 14:26.

  3. #3
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.444
    Post Thanks / Like
    mmxm, o seu não deu certo pra mim.

    Bom, meu resultado é

    Código PHP:
    #!/usr/env/bin perl 

    use common::sense;

    sub palindromo {
        
    my $num shift;
        
    my $inum;
        
    $inum $_ $inum foreach (split(//, $num));
        
    return $inum == $num : return 0;
    }

    sub multiplicador
        
    my @ini = (100..999);
        
    my $fim 999;
        
    my $memo;
        while (
    $fim != 100){
            foreach (@
    ini){
                
    my $mem $_ $fim;
                
    $memo .= "$_ x $fim = $mem\n" if (palindromo($mem) == 1);
            }
            
    $fim--;
        }
        return 
    $memo;
    }

    print 
    multiplicador
    valor comprovado pelo verificador.
    Última edição por guedes.acp; 15 Apr 2014 às 12:59.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  4. #4
    Membro ingresso
    Data de Ingresso
    Apr 2012
    Posts
    70
    Post Thanks / Like
    é tava dando erro mesmo , agora da certo, só substituir a função check por essa:

    Código PHP:
    sub check {
            
    my $n1 shift;
            
    my $n2 shift;
            
    my $tot $n1*$n2;
            if(
    $tot == reverse_number($tot)){
                    print 
    "$n1 x $n2 = ".$tot."\n";
                    if(
    $tot >= $p){
                            (
    $gn,$gn2,$p) = ($n1,$n2,$tot);
                    }
            }


  5. #5
    Old School ingresso Avatar de fvox
    Data de Ingresso
    Sep 2005
    Localização
    São Paulo - SP
    Posts
    4.486
    Post Thanks / Like
    Hi.

    Cliquei no botão reply sem querer. Apaguem a postagem acima, por favor.

    Código PHP:
    use strict;
    use 
    warnings q(all);

    my $p 0;
    for(
    my $i 100$i 999 $i++) {
        for (
    my $j 100$j 999$j++) {
            
    my $result $i $j;
            
    my @chunks unpack(q/(A3)*/, $result);

            if(
    $chunks[0] == reverse($chunks[1])) {
                
    $p $result if $p $result;
            }
        }
    }

    print 
    "Largest palindrome: "$p"\n"
    []'s
    Acha que está caindo na insanidade? Mergulhe!

    Twitter | Blog | Facebook | Github

  6. #6
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.444
    Post Thanks / Like
    mais uma tentativa

    Código PHP:
    #!/usr/env/bin perl
     
    use strict;
    use 
    warnings;
    use 
    feature 'say';

    my @ini = (100..999);
    my $fim 999;
    my %memo;
    while (
    $fim != 100){
        foreach (@
    ini){
            
    my $mem $_ $fim;
            
    $memo{$mem} = "$_ x $fimif (($mem == reverse $mem)
                        && (
    scalar (split (//, $mem)) == 6));
        
    }
        
    $fim--;
    }

    my @sort keys %memo;
    say $m[$#m]; 
    Última edição por guedes.acp; 16 Apr 2014 às 19:39.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  7. #7
    Moderador ingresso Avatar de .Nero
    Data de Ingresso
    Feb 2012
    Localização
    Earth
    Posts
    699
    Post Thanks / Like
    Tem muito Perl por metro quadrado aqui, fiz um em python rapidão pra entrar na brincadeira também:

    CODE:
    Código:
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    from datetime import datetime
    
    
    result = 0
    before = datetime.now()
    
    
    for x in range(100, 1000):
        for y in range(100, 1000):
            aux = x * y
    
    
            if len(str(aux)) % 2 == 0:
                part1 = str(aux)[:3]
                part2 = str(aux)[3:]
    
    
                if part1 == part2[::-1] and int(aux) > result:
                    result = aux
    
    
    after = datetime.now()
    print("Time elapsed: " + str(after - before))
    
    
    print(result)
    ALTERNATIVO:
    Código:
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    from datetime import datetime
    
    
    result = 0
    before = datetime.now()
    
    
    for x in reversed(range(100, 1000)):
        for y in reversed(range(100, 1000)):
            aux = x * y
    
    
            if len(str(aux)) % 2 == 0:
                part1 = str(aux)[:3]
                part2 = str(aux)[3:]
    
    
                if part1 == part2[::-1] and int(aux) > result:
                    result = aux
    
    
    after = datetime.now()
    print("Time elapsed: " + str(after - before))
    
    
    print(result)
    OUTPUT:
    Código:
    C:\Python33\python.exe D:/Documents/IntelliJIDEA/Invaders/Main.py
    Time elapsed: 0:00:01.303421
    906609
    
    
    Process finished with exit code 0
    Última edição por .Nero; 16 Apr 2014 às 16:25.
    - kiss principle -
    - repeat after me: harem -


  8. #8
    Old School ingresso Avatar de fvox
    Data de Ingresso
    Sep 2005
    Localização
    São Paulo - SP
    Posts
    4.486
    Post Thanks / Like
    Hi.

    Solução simples que ninguém pensou. :-D

    Código PHP:
    use strict;
    use 
    warnings;

    for (
    my $i 100$i 999$i++) {    
          do {        
                
    local $_ $i $_;        
                
    $_{0} = $_ if (uc eq reverse uc) && $_ > ($_{0// 0);   
           
    } for 100 .. 999;


    print 
    $_{0}, "\n"
    []'s
    Última edição por _Guga_; 16 Apr 2014 às 15:30.
    Acha que está caindo na insanidade? Mergulhe!

    Twitter | Blog | Facebook | Github

  9. #9
    Membro ingresso
    Data de Ingresso
    Apr 2012
    Posts
    70
    Post Thanks / Like
    Mais uma solução em perl =D

    Código PHP:
    use strict;
    use 
    warnings;

    my $v 0;
    for(
    my $i=100;$i<1000;$i++){
            
    my @map $i*$_ } (100..999);
            foreach(@
    r){
                    
    $v $_ if($_ == join('',reverse(split('',$_))) && $_ $v);
            }
    }

    print 
    "Maior -> $v\n"

  10. #10
    Moderador ingresso Avatar de .Nero
    Data de Ingresso
    Feb 2012
    Localização
    Earth
    Posts
    699
    Post Thanks / Like
    Java

    Código:
    public class Main {
    
    
    static String aux = "";
    static int res = 0;
    
    
    	public static void main(String[] args) {
    		for (int i = 100; i < 1000; i++) {
    			for (int j = 100; j < 1000; j++) {
    				aux = Integer.toString(i * j);
    				
    				if (aux.length() == 6) {
    					String p1 = aux.substring(0,3);
    					String p2 = aux.substring(3,6);
    					
    					if (i * j > res && new StringBuffer(p2).reverse().toString().equals(p1)) {
    						res = i * j;
    					}
    				}
    			}
    		}
    		
    		System.out.println("Gotcha: " + res);
    	}
    }
    - kiss principle -
    - repeat after me: harem -


Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •