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
Die Antwortrichtlinie lautet wie folgt.
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