題目:
(7 級) Drone Fly-By
前幾天,我看到了一段精彩的視頻,有個人使用無人機駭入一組由 wifi 控制的燈泡。
在這個 kata 中,我們將重現那種特技。
你會得到兩個字串:lamps
和 drone
,lamps
表示目前關閉的一排燈泡,每個燈用 x
表示。當燈點亮時,則以 o
表示。drone
字串表示無人機 T
的位置,及其飛行路徑 =
。無人機始終是從燈泡的起點開始由左至右飛行,無人機飛行過的地方 (包括當前位置) 都會打開該位置的燈泡。
範例:
('xxxxxx', '====T') => 'ooooox'
('xxxxxxxxx', '==T') => 'oooxxxxxx'
('xxxxxxxxxxxxxxx', '=========T') => 'ooooooooooxxxxx'
思考方式:
x
改成 o
Ruby 解法
def fly_by(lamps, drone)
# 先把 無人機字串 的長度抓出來
# 抓出 燈泡字串 減去 無人機字串 的剩餘部分
left = lamps[drone.length..-1]
# 把 燈泡字串 跟 無人機字串 長度一樣的部分都改成 `o`
result = lamps.replace("o" * drone.length)
# 將改成 `o` 的字串與剩餘的部分相加後回傳
result + left
end
JavaScript 解法
function flyBy(lamps, drone){
// 因為 JS 沒有 `[-1]` index 可以用
// 所以先把 燈泡字串 拆成陣列
let result = lamps.split("");
// 判斷 燈泡及無人機字串 哪一邊長度比較大
let len = (lamps.length < drone.length) ? lamps.length : drone.length;
// 開始跑迴圈把小於 `len` 的部分改成 `o`
for(let i = 0; i < len; i++) { result[i] = "o"; }
// 最後把改好的陣列轉回字串回傳
return (result.join(""));
}