Треки
/
Julia
Julia
/
Вправи
/
Шахівниця
Шахівниця

Шахівниця

Навчальна вправа

Вступ

Уявімо, що нам потрібні всі невідʼємні цілі числа до 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 вправ та справжнє наставництво від людей, і все це безкоштовно.