題目:
(7 級) Max-min arrays
在這個 Kata,你會得到一組陣列,而你的任務是重新整理這個陣列,讓第一個數字是最大的,第二個數字是最小的,依序排列下去。
範例:
[15,11,10,7,12] => [15,7,12,10,11]
最大的數字 15 排在第一個,最小的數字 7 排在第二個;
第二大的數字 12 排在第三個,第二小的數字 10 排在第四個;
依此類推。
Ruby 解法:
def solve(arr)
# 先把參數 arr 由小到大排序
arr = arr.sort
# 建立存放結果的陣列變數 new_arr
new_arr = []
# 如果 arr 陣列中還有元素就繼續執行
while arr.length > 0
# 先把最大的 (最後一個) 數字放進 new_arr 中
new_arr << arr.pop
# 再把最小的 (第一個) 數字放進 new_arr 中
new_arr << arr.shift
end
# 最後把 new_arr 中的 nil 清除掉回傳
new_arr.compact
end
JavaScript 解法:
function solve(arr){
// 先把參數 arr 由小到大排序
// 因為 JS 的 sort function 預設是以 unicode 的值作為排序
// 因此要另外寫個函式讓 sort 能夠以數字的大小作為排序依據
sort_arr = arr.sort((a, b) => a > b ? 1 : -1);
// 建立存放結果的陣列變數 new_arr
let new_arr = [];
// 如果 arr 陣列中還有元素就繼續執行
while (sort_arr.length > 0) {
// 先把最大的 (最後一個) 數字放進 new_arr 中
new_arr.push(sort_arr.pop());
// 再把最小的 (第一個) 數字放進 new_arr 中
new_arr.push(sort_arr.shift());
}
// 最後把 new_arr 中的 undefined 清除掉回傳
return new_arr.filter(n => n != null);
}