iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

Codewar 進進出出 JS/Ruby系列 第 27

我是新來的

  • 分享至 

  • xImage
  •  

題目:
(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


上一篇
打開數字
下一篇
下一個質數
系列文
Codewar 進進出出 JS/Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言