목록Season 1/하스켈 (21)
Graphics Programming
문제: https://algospot.com/judge/problem/read/LECTURE 짝수 길이의 문자열을 입력받아 -> 두 개씩 자른 다음 -> 사전순 정렬해서 -> 다시 합쳐서 -> 출력하라. = getLine - pairup - sort - concat - putStrLn 앞의 두 문제(MERCY, ENDIANS)를 풀어봐서 이제 입출력에서는 걸리적거리는 게 없다. 그냥 함수 합성 연산자 (.) 를 이용해서 핵심 코드를 한 줄로 쓰는 멋을 부리고 싶었다. 근데 리스트를 두 개씩 쪼개는 라이브러리 함수를 못 찾아서 실패.. -,- 이것저것 섞으면 그런 함수를 정의할 수도 있을 것 같은데... 일단 문자열을 쪼개주는 pairup이라는 함수를 직접 정의했다. 이제 입력 문자열을 str이라고 하면 ..
페이스북에서 알게 된 사이트인데 코딩으로 게임을 플레이할 수 있다. 되게 신기함 ㅋㅋ 한 마디로 온라인 저지의 게임 버전이다. 게임은 지가 알아서 돌아가는데 예시 코드에는 콘솔 입출력이 있어서 헷갈렸는데, 주석을 읽어보니 콘솔 입출력으로 게임을 제어하는 형식이었다. 제일 첫 번째 게임인 Onboarding을 깨봤다. 게임 화면에 DEBUG MODE 버튼을 눌러보면 적들의 이름이 나온다. 네 개는 HotDroid이고 마지막 것은 Buzz인데 우리 우주선은 HotDroid만 잡고 Buzz에게 죽는다. -- 게임에서 제공하는 기본 코드 import System.IO import Control.Monad main :: IO () main = do hSetBuffering stdout NoBuffering -- ..
문제: https://algospot.com/judge/problem/read/ENDIANS 1. 정수 N을 입력받는다. 2. N개의 32비트 정수를 입력받아 반대 엔디안으로 바꿔서 출력한다. 워낙 간단한 문제니 전략을 바로 세울 수 있다. 문제 하나를 푸는 액션 solve를 정의한다. N을 입력받아서 solve를 N번 실행한다. 하스켈 코드로 그 개요를 표현하자면 다음과 같다. import Control.Monad -- replicateM_은 여러 액션을 실행하고 결과는 버린다 (액션들을 >> 연산자로 연쇄하는 것과 같은 효과) main = 입력 >>= (\ 문제수 -> replicateM_ 문제수 solve) 문제는 입력이 4 123 3166 4232 874 처럼 띄어쓰기 형태로 들어올 경우 어떻게 ..
하스켈에서 타입을 선언하는 키워드는 data, type, newtype 이렇게 세 개가 있습니다. 그런데 위키책에서 newtype을 나중에 설명한다고 했지만 Beginner's Track이 끝날 때까지 설명을 안 해서 HaskellWiki에 있는 newtype 항목 을 여기에 따로 번역합니다. Newtype Newtype 선언은 data와 매우 비슷한 방식으로 새로운 타입을 생성한다. newtype의 문법과 용법은 data 선언과 거의 같다. 사실은 newtype 키워드를 data로 교체해도 컴파일이 되고 심지어 프로그램이 잘 돌아갈 가능성이 높다. 하지만 그 반대는 아니다. data를 newtype으로 교체할 수 있는 것은 생성자가 오직 하나고 그 생성자 내의 필드가 오직 하나일 때 뿐이다. 몇..