Vampirismo

Secção dedicada à linguagem de programação favorita dos quarkianos: Python!

Vampirismo

Mensagempor jap em Terça Dez 09, 2008 9:46 pm

Mais um de numerologia (vampira) para treino pitónico! :lol:

Um número v = xycom um número par de dígitos (n) diz-se um número vampiro se for o produto de um par de números x,y de n/2dígitos cada, sendo os dígitos extraídos do número v, por qualquer ordem. Exemplos de números vampiros com 4 dígitos:

  • 1260 = 21 \times 60
  • 1395 = 35 \times 93
  • 1435 = 15 \times 41

Escrevam um programa pitónico que calcule todos os números vampiros de 4 dígitos! :wink:

Números vampiros
e mais sobre números vampiros
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Re: Vampirismo

Mensagempor Ivo_Timóteo em Quarta Dez 10, 2008 11:40 pm

Bem, já fiz um programinha, mas acho que não está pitónico o suficiente :P

No entanto, ao verificar os casos de teste, verifiquei que o que estava errado era mesmo o exemplo :twisted:

jap Escreveu:1435 = 15 \times 41

Este caso não é bem assim :)

O correcto seria:
1435 = 35 \times 41

A lista é: ...

não vou pô-la aqui, está na Wikipédia :P

P.S. Umas tags de hide/unhide eram engraçadas, assim quem queria ver o código via, quem não queria, não via :)
Avatar do utilizador
Ivo_Timóteo
charm-Quark!
charm-Quark!
 
Mensagens: 579
Registado: Quarta Nov 15, 2006 7:25 pm
Localização: V. N. Gaia

Re: Vampirismo

Mensagempor jap em Quinta Dez 11, 2008 12:23 am

Desculpa, problema típico de cut and paste. Já corrigi!

Obrigado pelo reparo. :wink:

PS: Vou ver se é fácil incluir essas tags hide e unhide. :roll:
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Re: Vampirismo

Mensagempor Bruno Oliveira em Segunda Dez 15, 2008 9:34 pm

O dos números autodescritivos parece ser interessante, mas agora estou a pensar aqui nos vampíricos, espero conseguir postar qualquer coisa dentro de alguns dias... :roll: .
Agora ainda estou ocupado com aulas e algumas actividades extra escola mas para a semana espero conseguir meter aqui qualquer coisa...vampírica. :lol:
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Vampirismo

Mensagempor Tharis em Segunda Jan 19, 2009 6:45 pm

QUEM AINDA NÃO FEZ E NÃO QUER SER SPOILADO NÃO CONTINUE A LER O POST

Código: Seleccionar Todos
from __future__ import generators

def permute(s):
    if len(s) <=1:
        yield s
    else:
        for perm in permute(s[1:]):
            for i in range(len(perm)+1):
                yield perm[:i] + s[0:1] + perm[i:]

def vampirismo(n):
    total=0

    if n%2: return 0

    dgs2nr = lambda x: x[0] * 10**(len(x)-1) + dgs2nr(x[1:]) if len(x)>1 else x[0]

    for i in range(10**(n-1),10**n):
        dgs=map(int,list(str(i)))
        nr = dgs2nr(dgs)

        for perm in permute(dgs):
            x=dgs2nr(perm[0:n/2])
            y=dgs2nr(perm[n/2:])

            if x*y==nr:
                total+=1
                break

    return total

print vampirismo(4)


http://codepad.org/l15jepbv

Solução
[[1260, 21, 60], [1395, 93, 15], [1435, 41, 35], [1530, 51, 30], [1827, 21, 87], [2187, 81, 27], [6880, 86, 80]]
Avatar do utilizador
Tharis
up-Quark!
up-Quark!
 
Mensagens: 387
Registado: Quinta Out 23, 2008 4:26 pm

Re: Vampirismo

Mensagempor jap em Segunda Jan 19, 2009 8:00 pm

Ena, que código vampírico! :hands:

E logo com geradores (I love them)! :P

Aqui vai a minha solução, menos vampírica, mais pitónica! :lol:

Código: Seleccionar Todos
#!/usr/bin/env python
"""
Vampire numbers
@jap 2009, having fun with Quark!
"""

def test_digits(digits,n):
    """ Tests if n is a number composed of some digits"""
    for digit in digits:
        if digits.count(digit) <> n.count(digit): return 0
    return 1


if __name__ == "__main__":

  for n1 in range(10,100):
      for n2 in range(n1,100):
          n = str(n1*n2)
          if len(str(n)) <> 4: continue
          digits = str(n1)+str(n2)
          if test_digits(digits,n):
              print "Found a vampire number:",n1,"x",n2,"=",n


Resultado:

Código: Seleccionar Todos
Found a vampire number: 15 x 93 = 1395
Found a vampire number: 21 x 60 = 1260
Found a vampire number: 21 x 87 = 1827
Found a vampire number: 27 x 81 = 2187
Found a vampire number: 30 x 51 = 1530
Found a vampire number: 35 x 41 = 1435
Found a vampire number: 80 x 86 = 6880
José António Paixão
Departamento de Física da FCTUC
Avatar do utilizador
jap
Site Admin
Site Admin
 
Mensagens: 6805
Registado: Quinta Nov 09, 2006 9:34 pm
Localização: Univ. de Coimbra

Re: Vampirismo

Mensagempor Tharis em Segunda Jan 19, 2009 8:45 pm

Essa solução é muito Pitónica professor! :D
Avatar do utilizador
Tharis
up-Quark!
up-Quark!
 
Mensagens: 387
Registado: Quinta Out 23, 2008 4:26 pm


Voltar para Pitónica

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante

cron