[PYTHON] Projet Euler 32

problème

Disons qu'un nombre avec 1 à n utilisé une seule fois dans chaque chiffre est un nombre pandigital avec n chiffres: Par exemple, le nombre à 5 chiffres 15234 est un pandigital avec 1 à 5.

7254 a une propriété intéressante: écrivez 39 x 186 = 7254, et cela devient un panoramique numérique avec un nombre à multiplier, un nombre à multiplier et un produit de 1 à 9.

Trouvez la somme des produits telle que le nombre à multiplier / le nombre à multiplier / le produit est de 1 à 9 pan numérique.

CONSEIL: Certains produits ont une ou plusieurs combinaisons multiplication / multiplication / produit, mais ne comptent qu'une seule fois. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2032

Répondre

Il existe 9 numéros numériques Pan en raison de leur importance. Autrement dit, des nombres décimaux de 0 à moins de 9! Correspondent à chacun des nombres numériques de panoramique. La réponse est obtenue en convertissant le nombre décimal inférieur à 9! En un nombre numérique panoramique, en divisant le nombre numérique panoramique et en déterminant si la condition est satisfaite ou non. De plus, en faisant attention à HINT, la valeur du produit est stockée et le même calcul est exclu. (Il est probablement plus efficace de créer d'abord une fonction qui extrait simplement uniquement le produit. De plus, comme on peut voir à partir d'une simple considération que le produit à calculer ne peut pas être composé de 3 chiffres ou de 5 chiffres, le code suivant est mis à 4 chiffres.

import math
def create_pandigital(target,n,seeds):

  ret = ''
  while n > 0:
    kaijo = math.factorial(int(n))
    (q, r) = (target//kaijo, target%kaijo)
    ret += str(seeds.pop(q))
    target = r
    n -= 1
  return ret + str(seeds[0])

def main():
  N = 10
  MAX = math.factorial(int(N-1))
  ans = 0
  seeds = []
  seq = range(1,N)
  ls = []
  for target in range(3,MAX):
    seeds[:] = seq
    n = N - 2
    pan =  create_pandigital(target, n, seeds)

    for i in range(1,4):
      if not (pan[:4] in ls) and int(pan[:4]) == (int(pan[4:4+i+1]) * int(pan[4+i+1:])):
        ls.append(pan[:4])
        ans += int(pan[:4])
        break
  print ans

main()

Recommended Posts

Projet Euler 37
Projet Euler 7
Projet Euler 47
Projet Euler 4
Projet Euler 38
Projet Euler 17
Projet Euler 26
Projet Euler 8
Projet Euler 23
Projet Euler 22
Projet Euler 19
Projet Euler 50
Projet Euler 42
Projet Euler 33
Projet Euler 32
Projet Euler 43
Projet Euler 35
Projet Euler 36
Projet Euler 24
Projet Euler 46
Projet Euler 48
Projet Euler 45
Projet Euler 6
Projet Euler 44
Projet Euler 39
Projet Euler 40
Projet Euler 49
Projet Euler 29
Projet Euler 27
Projet Euler 41
Projet Euler 18
Projet Euler 13
Projet Euler 30
Projet Euler 16
Projet Euler 14
Projet Euler 34
Projet Euler 25
[Projet Euler] problème1
Projet Euler15 "Chemin du treillis"
Project Euler 2 Acceleration 2.21 Économisez des microsecondes.
Projet Euler Original Method Group 1
Qu'est-ce que Project Euler 3 Acceleration?
Programmation fonctionnelle dans Python Project Euler 1
Projet Euler 10 "Somme des nombres premiers"
[Note] Projet Euler en Python (problème 1-22)
Programmation fonctionnelle dans Python Project Euler 3
Projet Euler # 5 "Minimum Multiple" en Python
Projet Euler 4 Tentative d'accélération
Programmation fonctionnelle dans Python Project Euler 2
Projet Euler 11 "Produit maximum dans la grille"
Projet Euler # 15 "Lattice Path" en Python
Projet Euler # 4 "Calligraphie maximum" en Python
Projet Euler 9 Conservation des résultats des calculs
Projet Euler # 3 "Maximum Prime Factors" en Python
Projet Euler # 11 "Produit maximum dans la grille" en Python
Projet Euler # 7 "1000 1er nombre premier" en Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Projet Euler # 9 "Numéro spécial Pitagolas" en Python
Projet Euler # 14 "Colonne de nombre de collats la plus longue" en Python
J'ai écrit Project Euler 1 en une seule ligne.
Projet Euler # 2 "Even Fibonacci Number" en Python