棋盤

棋盤

學習練習

簡介

假設你想要 0 到 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,透過 35 個概念128 個練習 和真人引導來學習並精通 Julia,全部免費。