[PYTHON] Projekt Euler 45

Problem

Dreieckszahlen, Fünfeckzahlen und Sechseckzahlen werden wie folgt erzeugt.

Dreieck Tn = n (n + 1) / 2 1, 3, 6, 10, 15, ... Fünfseitige Zahl Pn = n (3n-1) / 2 1, 5, 12, 22, 35, ... Sechseckzahl Hn = n (2n-1) 1, 6, 15, 28, 45, ... Es stellt sich heraus, dass T285 = P165 = H143 = 40755.

Suchen Sie die folgenden dreieckigen, fünfeckigen und sechseckigen Zahlen. http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2045

Antwortrichtlinie

Jeder Term einer hexagonalen Zahl ist ein ungerader Term einer dreieckigen Zahl, aber ich habe diese Tatsache ignoriert und über einen Mechanismus nachgedacht, der alle Terme vorerst gleich macht.

  1. Erstellen Sie eine Liste ang_list, indem Sie das Generatorgen und den Wert jedes Winkels kombinieren.
  2. Der Generator aktualisiert den Wert kleiner als den Maximalwert ang_max, bis jeder Wert gleich ist. Wenn der Wert aktualisiert wird, setzen Sie das Flag auf False.
  3. Wenn der Wert nicht für alle Eckennummern aktualisiert wird, entspricht der Wert jeder Eckennummer dem Maximalwert ang_max, dh die Werte aller Eckennummern sind gleich, sodass der Prozess endet.

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

Projekt Euler 7
Projekt Euler 47
Projekt Euler 31
Projekt Euler 38
Projekt Euler 17
Projekt Euler 8
Projekt Euler 23
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 42
Projekt Euler 32
Projekt Euler 35
Projekt Euler 36
Projekt Euler 46
Projekt Euler 48
Projekt Euler 45
Projekt Euler 6
Projekt Euler 44
Projekt Euler 39
Projekt Euler 40
Projekt Euler 49
Projekt Euler 29
Projekt Euler 27
Projekt Euler 41
Projekt Euler 18
Projekt Euler 13
Projekt Euler 30
Projekt Euler 16
Projekt Euler 14
Projekt Euler 34
Projekt Euler 25
[Project Euler] Problem1
Projekt Euler15 "Gitterpfad"
Projekt Euler Ursprüngliche Methodengruppe 1
Was ist Project Euler 3-Beschleunigung?
[Hinweis] Project Euler in Python (Problem 1-22)
Funktionale Programmierung in Python Project Euler 3
Projekt Euler # 5 "Minimum Multiple" in Python
Project Euler 4 Versuch zu beschleunigen
Funktionsprogrammierung in Python Project Euler 2
Projekt Euler 11 "Maximales Produkt im Raster"
Projekt Euler # 15 "Gitterpfad" in Python
Projekt Euler # 4 "Maximale Kalligraphie" in Python
Projekt Euler 9 Aufbewahrung der Berechnungsergebnisse
Projekt Euler # 3 "Maximale Primfaktoren" in Python
Projekt Euler # 11 "Maximales Produkt im Raster" in Python
Projekt Euler # 7 "1000 1. Primzahl" in Python
Projekt Euler # 16 "Summe der Kräfte" in Python
Projekt Euler # 9 "Spezielle Pitagolas-Nummer" in Python
Projekt Euler # 14 "Längste Spalte mit Kollatennummern" in Python
Ich habe Project Euler 1 in einem Liner geschrieben.
Projekt Euler # 2 "Gerade Fibonacci-Zahl" in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Projekt Euler # 8 "Maximales Produkt in Anzahl Zeichenfolge" in Python
Projekt Euler # 10 "Summe der Primzahlen" in Python
Projekt Euler 28 Ineffizienter Antwortvorschlag Erstellen Sie "Spiral Lined Numbers"
Projekt Euler 4 Die Codierung mit einem neuen Ansatz schlägt fehl.
Django-Projektbasislinie
Projekt Euler # 12 "Hochangepasste Dreiecke" in Python