본문 바로가기

Julia

오일러 프로젝트 22 (Julia)

파일을 다운로드 받아 읽으면 "ABC","DEF",... 와 같은 식으로 이름이 저장되어 있다. 이들을 콤마를 기준으로 자르고 양쪽의 따옴표를 제거한다.

줄리아에서 낱개의 문자는 Char 타입이고, 이는 문자 코드값(정수)처럼 덧셈 뺄셈이 가능하다. 따라서 단어 점수를 매길 때에는 각 글자(Char)에서 'A'를 빼고 1을 더하면 된다. 단어를 각 문자의 배열로 변환하기 위해서는 collect()를 사용해야 한다.

URL로부터 파일을 다운로드 받을 때에는 download() 함수를 사용하는데, 이 함수는 임시 파일을 생성한다. 만약 파일 이름을 지정하고 싶다면 두 번째 인자로 파일이름을 주면 된다. 참고로 파일을 계속 다운로드 받지 않기 위해서 파일 이름으로 파일의 존재 여부를 확인할 때에는 isfile() 함수를 사용한다.

파일을 텍스트로 읽어들이려면 간단히 read(filename, String)이라고 해도 된다.

url = "https://euler.synap.co.kr/files/names.txt"
fname = "s022.txt"
isfile(fname) || download(url, fname)
@time begin
    names = read(fname, String) |> 
        (x->split(x, ",")) .|> 
        (y -> strip(y, '"')) |> sort
    evalword(word) = word |> collect .|> (x -> x - 'A' + 1) |> sum
    map(enumerate(names)) do (i, name); evalword(name) * i end |> 
        sum |> println
end