[PYTHON] Projet Euler 45

problème

Les nombres triangulaires, pentagonaux et hexagonaux sont générés comme suit.

Triangle Tn = n (n + 1) / 2 1, 3, 6, 10, 15, ... Nombre à cinq côtés Pn = n (3n-1) / 2 1, 5, 12, 22, 35, ... Nombre hexagonal Hn = n (2n-1) 1, 6, 15, 28, 45, ... Il s'avère que T285 = P165 = H143 = 40755.

Trouvez les nombres triangulaires, pentagonaux et hexagonaux suivants. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2045

Politique de réponse

Chaque terme d'un nombre hexagonal est un terme impair d'un nombre triangulaire, mais j'ai ignoré ce fait et pensé à un mécanisme qui rend tous les termes égaux pour le moment.

  1. Faites une liste ang_list en combinant le gène générateur et la valeur de chaque angle.
  2. Le générateur met à jour les valeurs inférieures à la valeur maximale ang_max jusqu'à ce que chaque valeur soit égale. Lorsque la valeur est mise à jour, définissez l'indicateur sur False.
  3. S'il n'y a pas de mise à jour de la valeur de tous les numéros de coin, la valeur de valeur de chaque numéro de coin est égale à la valeur maximale ang_max, c'est-à-dire que les valeurs de tous les numéros de coin sont égales, le processus se termine donc.

code

from mytools import *


def t(n):
  return n*(n+1)/2

def p(n):
  return n*(3*n-1)/2

def h(n):
  return n*(2*n-1)

@get_time
@main_start
def main():
  #(TRI_START,PEN_START,HEX_START) = (2, 2, 2) 
  (TRI_START,PEN_START,HEX_START) = (286, 166, 144) 
  MAX = 10**8

  tri_gene = ( t(n) for n in xrange(TRI_START, MAX))
  pen_gene = ( p(n) for n in xrange(PEN_START, MAX))
  hex_gene = ( h(n) for n in xrange(HEX_START, MAX))
  ang_list = [
              {'value': tri_gene.next(), 'gene': tri_gene},
              {'value': pen_gene.next(), 'gene': pen_gene},
              {'value': hex_gene.next(), 'gene': hex_gene}
             ]

  ang_max = max(ang_list[0]['value'], ang_list[1]['value'], ang_list[2]['value']) 
  flag = False  
  while not flag:
    flag = True
    for ang in ang_list:
      if ang['value'] < ang_max:
         ang['value'] = ang['gene'].next()
         flag = False
         if ang['value'] > ang_max:
           ang_max = ang['value']
  print ang_max

main()

Recommended Posts

Projet Euler 7
Projet Euler 47
Projet Euler 31
Projet Euler 38
Projet Euler 17
Projet Euler 8
Projet Euler 23
Projet Euler 22
Projet Euler 19
Projet Euler 50
Projet Euler 42
Projet Euler 32
Projet Euler 35
Projet Euler 36
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"
Projet Euler Original Method Group 1
Qu'est-ce que Project Euler 3 Acceleration?
[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
Projet Euler # 17 "Nombre de caractères" en Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
Projet Euler # 8 "Produit maximum en chaîne numérique" en Python
Projet Euler # 10 "somme des nombres premiers" en Python
Projet Euler 28 Proposition de réponse inefficace Créer des "numéros en spirale"
Projet Euler 4 Coding avec une nouvelle approche échoue.
Référence du projet Django
Projet Euler n ° 12 "Triangles hautement ajustés" en Python