Python
-
[Python] Tic-Tac-Toe: Minimax algorithmPython/파이썬 자료구조 알고리듬 2020. 11. 20. 20:36
틱-택-토 틱택토는 3*3 보드 위에 3칸 1줄(가로, 세로, 대각선 중 하나)을 먼저 완성하는 쪽이 이기는 보드게임입니다. 따라서 모든 경우의 수는 9! = 362_880 이 정도라면 가지치기를 하지 않고 퓨어한 미니 맥스 알고리듬으로 돌릴 수 있습니다. *막대기게임처럼 max에서 score==1, min에서 score==-1을 찾으면 break 했습니다. 이것만 하더라도 반응 속도가 상당히 빨라집니다. game_board: str = '_' * 9 AI = True HUMAN = False AI_MARK = 'X' HUMAN_MARK = 'O' def main(): player: bool = AI # player: bool = HUMAN print('initializing ...') if player..
-
파이썬, 미니맥스 알고리듬, 막대기 게임Python/파이썬 자료구조 알고리듬 2020. 11. 20. 20:18
게임의 룰 단순한 룰의 게임을 하나 만들어 보겠습니다. 어디서 본 게임인데 이름을 모르겠네요. 막대기 게임이라고 해두죠. PS) 검색해 본 결과 이 게임은 NIM 게임 중 하나입니다. ex) 배스킨라빈스31 게임 2인용 게임입니다. 10개의 빈칸이 있습니다. 교대로 빈칸을 채웁니다. 한쪽부터 순서대로 차곡차곡 이어서 채워야 합니다. (=stack) 빈칸을 두는 것은 안됩니다. 한 번에 1에서 3개까지 채울 수 있습니다. 쉬는 것(0개)은 안됩니다. 마지막 칸을 채우는 사람이 이기는 겁니다. 코딩1 : 랜덤 말보다는 코드가 더 편한 것 같습니다. 알고리듬으로 처리해야 할 부분을 일단은 랜덤으로 두었습니다. from random import randint AI = True HUMAN = False class..
-
[python] 8-puzzle problem (2) Heuristic, A*Python/파이썬 자료구조 알고리듬 2020. 11. 17. 23:25
https://comdoc.tistory.com/entry/python-8-puzzle-problem-1-BFS-DFS 앞서 우리는 맹목적 탐색의 한계를 경험했으니 그에 대한 대안을 찾아보자. 8 퍼즐을 자주 해보면 본인만의 풀이법이 생긴다. 본인의 경우 고등학교 때 연예인 사진을 이용한 퍼즐 게임을 만든 적 있고.. 번호가 연결된 블록끼리 회전을 하면서 필요한 블록을 채우거나 필요 없는 블록을 빼는 방식으로 퍼즐을 풀었던 기억이 있다. 사전에서 heuristic(휴리스틱)을 찾아보면 '체험에서 (스스로 발견하는)'이라는 뜻을 가지고 있다. 이렇게 heuristic 한 방법을 사용하는 탐색법을 heuristic search method(경험적 탐색법)라고 한다. 위키 백과에는 다음과 같이 설명되어 있다,..
-
[python] 8-puzzle problem (1) BFS, DFSPython/파이썬 자료구조 알고리듬 2020. 11. 16. 23:29
[파이썬] 8-퍼즐 문제 다음 그림과 같이 8개의 숫자와 빈칸을 이용해 숫자를 정렬하는 퍼즐을 말한다. 위 그림과는 달리 아래 모양으로 정렬하도록 하겠다. 빈칸은 0으로 표기. 1 2 3 4 5 6 7 8 0 맹목적 탐색법의 대표적인 두 가지 방법으로 맹목적 탐색의 문제점을 알아본다. (1) 너비 우선 탐색(BFS, Breadth-first search) 너비 우선 탐색: comdoc.tistory.com/entry/24-graph-width-first-search 최단 경로 찾기: comdoc.tistory.com/entry/25-그래프-최단-경로-찾기 비교적 잘 작동하는 코드지만, 탐색이 길어지면 에러가 발생한다. (본인의 PC에서는) marked의 원소가 181440개를 초과되면 에러가 발생한다. ..
-
2. 텔레그램(telegram) 봇(bot)에 날씨 기능을 추가하자Python/telegram-bot 2020. 11. 9. 13:00
기상청 크롤링, XML 파싱에 관한 글을 올린 적 있습니다. 크롤링에 대한 설명은 위 링크를 참고하십시오. datetime 기상청 RSS 데이터는 발표일을 기준으로 0일, 1일, 2일 까지의 데이터가 담겨 있습니다. 보기 좋게 출력하려면 발표일, 발표일 + 1일, 발표일 + 2일을 처리해야 하는데요. 날짜에 관련된 계산을 하려면 꽤나 복잡하기 때문에 기본 내장 라이브러리를 사용하는 게 편합니다. 파이썬에서 날짜에 관련된 계산을 할 때는 datetime의 timedelta를 이용합니다. 사용법은 다음과 같습니다. 모년 모월 모일에서 2일 후를 계산해야한다면 날짜가 담긴 datetime 객체를 만들어야 합니다. 직접 객체를 만들어도 됩니다만, 만약 년월일이 담긴 문자열이 있다면 strptime 메서드로 날짜..
-
1. 파이썬으로 텔레그램(telegram) 봇(bot) 만들기Python/telegram-bot 2020. 11. 8. 14:38
https://core.telegram.org/bots https://core.telegram.org/bots/api 스마트폰이나 PC에 텔레그램은 깔려 있겠죠? @botfather 을 검색합니다. 가장 위에 공식 마크가 있는 것이 진짜입니다. 클릭해봅시다. 봇파더는 새로운 봇 계정을 만들고 기존 봇을 관리할 때 사용하는 봇입니다. 시작을 누릅시다. 저는 예전에 만들었기 때문에 다시 시작이 뜹니다. 여기서 /newbot를 클릭합니다. 봇의 이름을 고르라고 합니다. 간단히 mybot이라는 이름을 정했습니다. 겹쳐도 되는 이름입니다. username을 고르라고 합니다. 'bot'으로 끝나야 한다고 합니다. 겹치면 안 되는 이름입니다. (모자이크 처리했습니다.) 적당한 이름을 골라주면 API 키가 나옵니다. ..
-
파이썬 / 모멘텀(momentum) 전략Python/파이썬과 주식 2020. 11. 2. 08:28
* 이 글은 저의 개인적인 정리물일 뿐입니다. * 투자 권유, 투자 참고의 목적이 아닙니다. 모멘텀(momentum) 이란? 모멘텀 = 현재 가격(종가) - n 기간 전 가격(종가) 오늘 코스피 지수가 2000이고 한 달 전 코스피 지수가 1900이라면 모멘텀은 2000-1900=100입니다. 모멘텀 전략이란? 모멘텀이 큰 종목에 투자하는 추세 추종형 전략입니다. '오르는 주식이 오르더라'라고 할 수 있겠죠? 제시 리버모어(Jesse Lauriston Livermore) 1877년 7월 26일 - 1940년 11월 28일 추세 매매의 창시자입니다. 가격이 오르면 사고, 내리면 공매도를 하는 방법으로 엄청난 돈을 벌었습니다. 몇 차례 파산을 했었고, 권총 자살로 생을 마무리했지만... 어떤 인물인지 한번 ..