Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- Autoencoder
- A Neural Algorithm of Artistic Style
- 딥러닝
- 오일러 프로젝트
- deep learning
- bayesian
- 베이지안
- 역전파법
- Convolutional Neural Network
- 합성곱 신경망
- 자전거 여행
- Gram matrix
- 수달
- 전처리
- 비샤몬당
- 냥코 센세
- neural network
- 신경망
- backpropagation
- 히토요시
- c#
- SQL
- CNN
- project euler
- mnist
- 오토인코더
- 소인수분해
- 역전파
- 소수
- Python
Archives
- Today
- Total
통계, IT, AI
42. Coded triangle numbers 본문
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