체스판

체스판

학습 연습 문제

소개

1000까지의 음이 아닌 정수를 모두 다루고 싶다고 해봐요. 이것들을 배열에 하나하나 직접 입력해야 한다면 말도 안 되겠죠.

이럴 때 쓰는 게 바로 range 타입이에요.

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

범위는 아주 흔해요. 입력을 줄여 줄 뿐만 아니라 함수의 반환 타입으로도 쓰여요.

범위는 벡터가 아니에요. 범위는 시퀀스를 생성하기 위한 명령의 집합일 뿐이에요 ("지연" 평가, 또는 "이터레이터").

범위를 벡터로 사용해야 한다면 collect() 함수로 변환해요.

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

단계 크기를 지정할 수도 있어요. 이 경우에는 0.3이에요.

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

즉, 문법은 start:stepsize:stop이에요. 정수 예시에서 봤듯이, 양 끝 값은 모두 _포함_돼요. 단계 크기가 stop - start를 정확히 나누지 못하면, 마지막 원소는 stop을 넘지 않도록 해요.

문자 범위

숫자가 아닌 시퀀스도 범위에 사용할 수 있어요. 가장 간단한 예는 ASCII 문자예요.

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

Char 타입은 다른 개념에서 더 자세히 다뤄요. 지금은 작은따옴표 안의 단일 문자로만 생각해요.

범위를 위한 함수와 연산자

범위의 양 끝 값은 first()와 last()로 확인해요.

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10

벡터 인덱싱 더 알아보기

정수 범위와 벡터는 벡터 인덱싱에 사용할 수 있어요.

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

지침

체스를 좋아한다면 누구나 자기만의 체스 게임을 한번 만들어 보고 싶어 하죠. 물론 온라인에는 이미 다양한 체스 구현이 넘쳐나지만, 직접 만드는 건 세상에 하나뿐일 거예요!

그렇지만 상상의 나래를 펼치기 전에 기본적인 것부터 챙겨야 해요. 먼저 체스판을 만들어 보는 것부터 시작해요.

체스판의 각 칸은 문자와 숫자 쌍으로 식별해요. 세로 방향으로 놓인 칸 줄은 파일이라고 하고, A부터 H까지 이름을 붙여요. 가로 방향으로 놓인 칸 줄은 랭크라고 하고, 1부터 8까지 번호를 붙여요.

1. 랭크 범위 정의하기

rank_range() 함수를 구현해요. 1부터 8까지의 정수 범위를 반환해야 해요.

julia> rank_range()
# output omitted

2. 파일 범위 정의하기

file_range() 함수를 구현해요. 대문자 A부터 대문자 H까지의 문자 범위를 반환해야 해요.

julia> file_range()
# output omitted

3. 랭크 범위를 랭크 벡터로 바꾸기

ranks() 함수를 구현해요. 1부터 8까지의 정수 벡터를 반환해야 해요. 벡터를 직접 손으로 쓰지 말고, rank_range() 함수가 반환한 범위에서 만들어요.

julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]

4. 파일 범위를 파일 벡터로 바꾸기

files 함수를 구현해요. 'A'부터 'H'까지의 문자 벡터를 반환해야 해요. 벡터를 직접 손으로 쓰지 말고, file_range() 함수가 반환한 범위에서 만들어요.

julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Julia Exercism

체스판 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Julia 트랙을 개념 35개연습 문제 128개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.