🌊

2024 JavaScript - 每日刷題任務

2024/10/01に公開

JavaScript

はじめに

在 codewars 的每日刷題,題目主要會跟著 六角學院 - 2024 JavaScript 工程師養成直播班 的每日刷題題目走, 無聊的話再自己多刷幾題。
其他還有 ↓


Since 2024-09-30

Day 1:Even or Odd

Even or Odd | #8kyu

Even or Odd - 偶數或奇數
目前個人等級:8 kyu

Description: 建立一個 function,使用一個整數做為參數,如果參數為偶數回傳 "Even" 如果為奇數回傳 "Odd"


我的解法

function evenOrOdd(number) {
  return number % 2 === 0 ? 'Even' : 'Odd';
}

反饋與思考


最優解

Do I get a bonus?

Do I get a bonus? | #8kyu

Do I get a bonus? - 我會有獎金嗎?
目前個人等級:8 kyu

Description:建立一個 function,
你有兩個參數:salary 為整數、bonus 為布林值,
如果布林值為真,你可以得到 10 倍的獎金。
反之你只能得到原本的薪水。
回傳請帶上金額符號 "£"


我的解法

function bonusTime(salary, bonus) {   
    if (bonus === true) {
        return `£${salary * 10}`;
    } else {
        return `£${salary}`;
    }
}

反饋與思考

  • 如果只有是跟不是,可以改寫:
function bonusTime(salary,bonus){
    return bonus === true ?  `£${salary * 10}` : `£${salary}`;
}

最優解

同上

Beginner Series 2 Clock

Beginner Series 2 Clock | #8kyu

Beginner Series 2 Clock - 初學者系列2 時鐘
目前個人等級:8 kyu

Description:寫一個函數,用毫秒顯示時、分、秒。例如:m=1, s=1, result = 61000
輸入條件:
0 <= h <= 23
0 <= m <= 59
0 <= s <= 59


我的解法

function past(h, m, s){
    if( 0 <= h <=23 , 0 <= m <= 59, 0 <= s <= 59){
      return h*3600000 + m*60000 + s*1000;
    }else{
      return '請重新輸入';
    }
}

反饋與思考

  • 算時間好難…
  • 又重新看了一下 if 的寫法
  • 又重新看了一下流程圖拆解的方法

最優解 (不對呀?沒有驗證呀?)

function past(h, m, s){
  return ((h*3600)+(m*60)+s)*1000;
}

Sum of positive

Sum of positive | #8kyu

Sum of positive - 加總陣列中的正數
目前個人等級:8 kyu

Description:你有一個陣列數字,請回傳加總所有正數的總額


我的解法

function positiveSum(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] > 0) {
      sum += arr[i];
      }
  }
  return sum;
}

反饋與思考

  • 之後復習完 for 迴圈之後再回來重做一次

最優解

除了 for 迴圈,也可以用 reduce()

Day 2 : Basic Mathematical Operations

Basic Mathematical Operations | #8kyu

Basic Mathematical Operations -
依條件運算並且輸出運算結果及過程
目前個人等級:8 kyu

Description:建立一個執行基本數學運算的函數。


我的解法

function basicOp(operation, value1, value2){
  let result = 0;
  switch (operation){
      case '+':
      result = value1 + value2;
      break;
      case '-':
      result = value1 - value2;
      break;
      case '*':
      result = value1 * value2;
      break;
      case '/':
      result = value1 / value2;
      break;
  }
  return result;
}

反饋與思考

  • 在本週刷題裡面剛好也有一樣的題目,剛好又可以再練習一次 switch 的用法。

最優解

switch 是最優解

Day 3 : Thinkful - Logic Drills: Traffic light

Thinkful - Logic Drills: Traffic light | #8kyu

Thinkful - Logic Drills: Traffic light -
邏輯練習:紅綠燈
目前個人等級:8 kyu

Description:
請寫一個函數依照 綠色 => 黃色 => 紅色的順序來改變紅綠燈
使用字串表示目前紅綠燈狀態,並回傳變更後的紅綠燈字串


我的解法

function updateLight(current) {
  switch (current){
      case 'green':
        changeLight = 'yellow';
        return changeLight;
        break;
      case 'yellow':
        changeLight = 'red';
        return changeLight;
        break;
      case 'red':
         changeLight = 'green';
        return changeLight;
        break;
  }
  console.log(changeLight);
}

反饋與思考

  • 可以用 switch 也可以用 if ,最簡單就直接 return 結束 。
return current === 'yellow' ? 'red' : current === 'green' ? 'yellow' : 'green';

最優解

這題也沒有最優解只要邏輯通了都可以,
只是使用 switch 的話,不需要再加一個 changeLight 的變數,
本來也是直接這樣寫,後來怕沒有賦值會無效所以又再加上變數賦值。(想多了ww)

function updateLight(current) {

  switch (current) {
    case 'green':
      return 'yellow';
      break;
    case 'yellow':
      return 'red';
      break;
    case 'red':
      return 'green';
      break;
    default:
      throw 'Error: wrong input';
      break;
  }
}

Day 4 : Remove String Spaces

Remove String Spaces | #8kyu

Remove String Spaces -
清除字串的空白
目前個人等級:8 kyu

Description:
清除字串中的所有空白之後再回傳清除後的資料


我的解法

function noSpace(x){
  return x.trim().replace(/\s+/g,'')
}

反饋與思考

  • 學了一個新方法 😃,本來只會刪除字串左右的空白,
    現在學了刪除中間字串的空白還有正則表達式(regex)

最優解

同上(但不需要刪除字串左右空白)

Day 5 : The Feast of Many Beasts

The Feast of Many Beasts | #8kyu

The Feast of Many Beasts - 野獸們的盛宴
目前個人等級:8 kyu

Description:
野獸們各自帶一盤料理來參加盛宴,但有一個規則:菜餚的開頭與結尾必須跟野獸的名字一樣。


我的解法

function feast(beast, dish) {
  let beastFirstChar = beast.charAt(0);
  let beastLastChar = beast.charAt(beast.length - 1);
  let dishFirstChar = dish.charAt(0);
  let dishLastChar = dish.charAt(dish.length - 1);
  
  return beastFirstChar === dishFirstChar && beastLastChar === dishLastChar ? true : false;
}

反饋與思考

  • 學了一個新的方法 charAt()
  • 但我想的太複雜了XD

最優解

function feast(beast, dish) {
	return beast[0] === dish[0] && beast[beast.length - 1] === dish[dish.length - 1]
}

Day 6 : Reversed Strings

Reversed Strings | #8kyu

Reversed Strings - 反轉字串
目前個人等級:8 kyu

Description:
請將字串反轉後回傳


我的解法

function solution(str){
  return str.split('').reverse().join('');  
}

反饋與思考

  • 學習了新的方法 split, reversejoin

最優解

同上

Beginner Series #4 Cockroach

Beginner Series #4 Cockroach | #8kyu

Beginner Series #4 Cockroach - 題目太噁心我不想翻譯 初學者系列4
目前個人等級:8 kyu

Description:
將公里每小時(km/h)轉換為厘米每秒(cm/s)


我的解法

  • 1公里 = 100,000 厘米
  • 1小時 = 3,600 秒
function cockroachSpeed(s) {
  return parseInt(s*(1/36)*1000);
}

反饋與思考

  • 連題目都看不懂,慘
  • 這裡要用到 math.floor ,將數字取到整數
  • 箭頭函式我看不懂~~~~

最優解

const cockroachSpeed = s => Math.floor(s / 0.036);

最後に

Discussion