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 |
Tags
- 역전파법
- SQL
- backpropagation
- c#
- 딥러닝
- 소수
- 합성곱 신경망
- 역전파
- 소인수분해
- Python
- 냥코 센세
- 자전거 여행
- Gram matrix
- 신경망
- 전처리
- Autoencoder
- A Neural Algorithm of Artistic Style
- deep learning
- CNN
- 오일러 프로젝트
- 베이지안
- 비샤몬당
- bayesian
- 오토인코더
- 히토요시
- mnist
- project euler
- neural network
- Convolutional Neural Network
- 수달
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