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까지 번호를 붙여요.
rank_range() 함수를 구현해요. 1부터 8까지의 정수 범위를 반환해야 해요.
julia> rank_range()
# output omitted
file_range() 함수를 구현해요.
대문자 A부터 대문자 H까지의 문자 범위를 반환해야 해요.
julia> file_range()
# output omitted
ranks() 함수를 구현해요. 1부터 8까지의 정수 벡터를 반환해야 해요.
벡터를 직접 손으로 쓰지 말고, rank_range() 함수가 반환한 범위에서 만들어요.
julia> ranks()
[1, 2, 3, 4, 5, 6, 7, 8]
files 함수를 구현해요. 'A'부터 'H'까지의 문자 벡터를 반환해야 해요.
벡터를 직접 손으로 쓰지 말고, file_range() 함수가 반환한 범위에서 만들어요.
julia> files()
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Exercism에 가입하고 Julia 트랙을 개념 35개연습 문제 128개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.