[PYTHON] Projet Euler 38

problème

Multiplions 192 par 1, 2, 3.

   192 × 1 = 192
   192 × 2 = 384
   192 × 3 = 576

La concaténation des produits donne un nombre numérique pan de 1 à 9 192384576. Nous appelons 192384576 le produit concaténé de 192 et (1,2,3).

De la même manière, multiplier 9 par 1,2,3,4,5 et concaténer donne le numéro numérique panoramique 918273645. Il s'agit du produit concaténé de 9 et (1,2,3,4,5). y a-t-il.

Quel est le plus grand nombre pan-numérique à 9 chiffres obtenu comme produit concaténé d'un entier et (1,2, ..., n) (n> 1)? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2038

Répondre

Tout d'abord, j'ai créé un générateur qui génère un nombre spécifié de nombres numériques pan (chaînes de caractères) à partir d'un ensemble spécifié de nombres.

import copy
def pandigital(digit,seq1,seq2=[]):
  iter1 = map(str,seq1)
  if seq2:
    iter2 = map(str,seq2)
  else:
    iter2 = copy.deepcopy(iter1)
  for d in range(digit-1):
    iter1 = (x+y for x in iter1 for y in iter2 if not (y in x))
  return iter1

Pour générer un générateur avec un numéro numérique panoramique à 10 chiffres qui n'inclut pas 0 au début, spécifiez ce qui suit. Si seq2 est omis, seq1 est copié dans seq2.

 pandigital(digit=10,seq1=range(1,10),seq2=range(0,10))

Je pense que ce générateur renvoie les valeurs dans l'ordre croissant si vous passez la plage (1,10), et renvoie les valeurs dans l'ordre décroissant si vous passez la plage (10,1, -1).

Pour répondre à cette question, créez d'abord un ensemble de nombres pan-numériques à 9 chiffres, PAND_SET, en utilisant la fonction ci-dessus. Plus tard, afin de déterminer si d'autres nombres sont inclus dans cet ensemble de nombres numériques panoramiques, set () est utilisé ici pour en faire un objet de type défini en tenant compte de la vitesse de référence.

Ensuite, bouclez i de 2 à 10 000 et effectuez le calcul suivant jusqu'à ce que s soit un nombre à 9 chiffres (chaîne de caractères). s = str (i) + str (i * 2) + str (i * 3) ・ ・ ・

Vérifiez si le s calculé de cette manière est plus grand que le candidat de réponse ans et si s est inclus dans PAND_SET. Si les deux sont vrais, remplacez ans par s.

import pandigital
def main():
  SEARCH_MAX = 10**4
  PAND_SET = set(pandigital.pandigital(9,range(1,10)))
  ans = 0

  for i in range(2,SEARCH_MAX):
    s = str(i)
    j = 2
    while len(s)<9:
      s += str(i*j)
      j+=1
    if len(s)>=10:
      continue
    if int(s) > ans and s in PAND_SET:
      ans = int(s)
  print ans
main()

Recommended Posts

Projet Euler 37
Projet Euler 7
Projet Euler 47
Projet Euler 31
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.