[PYTHON] Projekt Euler 42

Problem

Die n Terme des Dreiecks sind gegeben durch tn = ½ n (n + 1). Die ersten 10 Terme sind

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... Ist.

Nach der Konvertierung des Alphabets im Wort in einen numerischen Wert wird die Summe genommen. Diese Summe wird als "Wortwert" bezeichnet. Zum Beispiel ist SKY 19 + 11 + 25 = 55 = t10. An einem Punkt wird das Wort als Dreieck bezeichnet.

In der 16K-Textdatei words.txt sind ungefähr 2000 englische Wörter geschrieben. Wie viele dreieckige Wörter gibt es? http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2042

Antworten

Die Antwortrichtlinie lautet wie folgt.

  1. Erstellen Sie eine Reihe von Dreiecken als Referenz.
  2. Berechnen Sie den Wert aus dem Wort.
  3. Bestimmen Sie, ob der berechnete Wert in der Gruppe der Dreiecke enthalten ist.
  4. Wenn festgestellt wird, dass es enthalten ist, addieren Sie 1 zur Variablen ans.
def main():
  words = file2list('p042_words.txt')
  MAX = max_length(words) * 26
  tri = tri_dict(MAX)
  ans = 0
  for word in words:
    if word2num(word) in tri:
      ans += 1
  print ans

file2list ist eine Funktion, die eine Datei öffnet und die gelesenen Zeichenfolgen auflistet. Wenn Sie eine Funktion an die Liste übergeben, scheint sie vielseitiger zu sein, ist jedoch ärgerlich und wird daher nicht unterstützt.

def file2list(filename):
  file = open(filename)
  ret = file.read().replace('"','').split(',')
  file.close()
  return ret

Eine Funktion, die die Anzahl der Zeichen in einer Wortliste berechnet, um den Maximalwert für die Erstellung eines Satzes von Dreiecken zu bestimmen.

def max_length(words):
  max_len = 0
  for word in words:
    if len(word) > max_len:
      max_len = len(word)
  return max_len

Eine Funktion, die ein Objekt vom Typ Wörterbuch zurückgibt, in dem die Anzahl der Dreiecke gespeichert wird, die kleiner oder gleich dem angegebenen Maximalwert sind.

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

def tri_dict(max):
  n=1
  tri = {}
  while f(n)<=max:
    tri[f(n)] = True
    n+=1
  return tri

Funktionen zum Digitalisieren von Wörtern usw. Ich hätte reduzieren sollen. Beachten Sie, dass ord eine integrierte Funktion ist, die eine Ganzzahl zurückgibt, die einen Unicode-Codepunkt darstellt, wenn die Zeichenfolge ein Unicode-Objekt ist, und den Wert dieses Bytes, wenn die Zeichenfolge eine 8-Bit-Zeichenfolge ist, für eine bestimmte Zeichenfolge der Länge 1. In alfa2num ist der Wert des Bytes von 'A' 65, so dass der Wert, der durch Subtrahieren von 64 erhalten wird, zurückgegeben wird.

def alfa2num(s):
  return ord(s) - 64
  
def word2num(word):
  return sum([alfa2num(s) for s in word])

Recommended Posts

Projekt Euler 37
Projekt Euler 47
Projekt Euler 31
Projekt Euler 4
Projekt Euler 38
Projekt Euler 26
Projekt Euler 8
Projekt Euler 22
Projekt Euler 19
Projekt Euler 50
Projekt Euler 42
Projekt Euler 33
Projekt Euler 32
Projekt Euler 43
Projekt Euler 35
Projekt Euler 36
Projekt Euler 24
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 2 Beschleunigung 2.21 Mikrosekunden speichern.
Projekt Euler Ursprüngliche Methodengruppe 1
Was ist Project Euler 3-Beschleunigung?
Funktionsprogrammierung in Python Project Euler 1
Projekt Euler 10 "Summe der Primzahlen"
[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