題目:
(6 級) New Cashier Does Not Know About Space or Shift
幾個菜鳥收銀員開始在你的餐廳工作,他們很擅長點單,但不會使用大寫字母和空格鍵!
他們寫下的菜單如下:"milkshakepizzachickenfriescokeburgerpizzasandwichmilkshakepizza"
現在廚師們威脅要辭職,因為根本看不懂。
他們想要的是漂亮乾淨,具有空格和大寫字母的字串:"Burger Fries Chicken Pizza Pizza Pizza Sandwich Milkshake Milkshake Coke"
他們還希望點餐的順序與菜單中顯示的順序相同,菜單如下,其中沒有重複的菜色:
1. Burger
2. Fries
3. Chicken
4. Pizza
5. Sandwich
6. Onionrings
7. Milkshake
8. Coke
Ruby 解法:
def get_order(order)
# 先把菜單照順序存放在陣列中
menu = ["burger", "fries", "chicken", "pizza", "sandwich", "onionrings", "milkshake", "coke"]
# 準備空陣列放轉換後的結果
result = []
# 每樣食物都拿出來比對
menu.each do |food|
# 如果點單中有該項食物,就放進結果中
result << order.scan(food)
end
# 最後幫廚師加上首字母大寫以及空白字元
result.flatten.map(&:capitalize).join(" ")
end
Ruby 字串很方便的 scan 方法
JavaScript 解法:
function getOrder(input) {
// 先把菜單照順序存放在陣列中
let menu = ["burger", "fries", "chicken", "pizza", "sandwich", "onionrings", "milkshake", "coke"];
// 準備空陣列放轉換後的結果
let result = [];
// 每樣食物都拿出來比對
menu.map(food => {
// 先把點單中有的食物挑出來
let picked = input.match(new RegExp(food, 'gi'));
if (picked) {
// 挑出來的食物
picked.map(food => {
// 先改成首字母大寫
let order = `${food[0].toUpperCase()}${food.substring(1)}`;
// 再放進結果中
result.push(order);
});
}
});
// 最後幫廚師加上空白字元
return result.join(" ");
}
JS 的 RegExp