통계, IT, AI

42. Coded triangle numbers 본문

IT/PROJECT_EULER

42. Coded triangle numbers

Harold_Finch 2017. 4. 30. 22:37

1. 개요

  문제는 이곳에서 확인할 수 있다. \(n\)번째 triangle number는 \(t_n=n(n+1)/2\)으로 정의된다. 그리고 어떤 단어의 각 알파벳의 순서의 합이 triangle number일때 그 단어를 triangle word라고 한다. 예를 들어 SKY의 각 알파벳의 순서의 합은 19 + 11 + 25 = 55=\(t_{10}\)이므로 SKY는 triangle word이다. 주어진 텍스트 파일에서 triangle word의 개수를 찾는 것이 목표이다.



2. 구현

  어떤 수가 \(K\)가 triangle number인지 파악하기 위해서는 \(K=n(n+1)/2\)의 해 \(n\)이 정수인지 확인하면 된다. 이때, round error 등을 방지하기 위하여 sqrt 함수를 사용하지 않고 \(K=n(n+1)/2\)를 만족하는 정수가 있는지 확인하는 방법을 사용한다.


# -*- coding: utf-8 -*-

import string
import math as m

alpabet_order = {s: idx + 1 for idx, s in enumerate(string.ascii_uppercase)}
count = 0

with open('p042_words.txt', 'r') as f:
	
	for s in f.readlines()[0].replace('"', '').split(','):
		
		triangle_num = sum(alpabet_order[alpabet] for alpabet in s)
		temp_k = int(m.sqrt(8*triangle_num+1))
		
		if any( a**2 == 8*triangle_num+1 for a in range(temp_k-1, temp_k+1)):
			
			print('triangle word: {word}'.format(word=s))
			count += 1

print('answer: {answer}'.format(answer=count))

답은 162이다.

'IT > PROJECT_EULER' 카테고리의 다른 글

[Project Euler] 44. Pentagon numbers  (0) 2017.05.05
[Project Euler] 43. Sub-string divisibility  (0) 2017.05.01
41. Pandigital prime  (0) 2017.04.29
40. Champernowne's constant  (0) 2017.04.26
39. Integer right triangles  (0) 2017.04.23
Comments