WeHelp是台灣的軟體工程師社群,它的網站有程式解題系統 WeHelp Coding,提供基礎的程式練習題,適合新手熟悉語法、建立寫程式的邏輯思維。網站不會保留使用者的作答結果,因此我在這裡留下自己的解答,以及參考AI後修改的解法。目前系統提供Python和JavaScript兩種程式語言解題,本文用JavaScript解題,附上題目和註解供大家參考。
輸入範例:https://test.com/。回傳:真
輸入範例:test.com。回傳:假
輸入範例:HTTPs://test.com/。回傳:真
// @param s:{String}
// @return :{Boolean}
// 使用正則表達式 i忽略大小寫
function checkHTTPS(s){
const regex = /^https:\/\//i;
return regex.test(s);
}
// chatGPT推薦
function checkHTTPS(s){
return s.toLowerCase().startsWith("https://");
}
輸入一個正整數代表想要從 ATM 機領取的金額,你的函式能檢查輸入的金額是否合乎以下規範:
若輸入的金額符合規範,回傳真值,不符合規範,則回傳假值。
輸入範例:30。回傳:假
輸入範例:2000。回傳:真
輸入範例:6150。回傳:假
// @param n:{Integer}
// @return :{Boolean}
function checkMoney(n){
if ( n%100 == 0 && n>=100 && n<=100000 ) return true;
else return false;
}
輸入包含至少一個整數的陣列 / 列表,找到並回傳其中最大的整數。
輸入範例:[1, 3, 3, 2, 5, -2]。回傳:5
輸入範例:[-5, -10, -8, -1, -2]。回傳:-1
輸入範例:[0, 2, 2]。回傳:2
// @param nums:{[Integer]}
// @return :{Integer}
// 迴圈
function findMax(nums){
let max = nums[0];
for (let i=0; i<nums.length; i++){
if (nums[i] > max) max = nums[i];
}
return max;
}
// 使用內建方法 ...表示把陣列展開
function findMax(nums){
return Math.max(...nums);
}
輸入包含至少兩個不同整數的陣列 / 列表,找到並回傳其中第二大的整數。
輸入範例:[1, 3, 3, 2, 5, -2]。回傳:3
輸入範例:[-5, -10, -8, 1, -1]。回傳:-1
輸入範例:[0, 2]。回傳:0
// @param nums:{[Integer]}
// @return :{Integer}
// 先過濾最大的數,再找一次最大的數
function findSecond(nums){
const max = Math.max(...nums);
return Math.max(...nums.filter( n => n<max ));
}
// 先由大到小排序 再回傳不是最大的數 做多次迴圈耗時
function findSecond(nums){
const sorted = nums.sort((a,b)=> b-a);
for (let i=0; i<sorted.length; i++){
if (sorted[i] != sorted[0])
return sorted[i];
}
}
// 用最基礎的語法 不斷比較與交換
function findSecond(nums){
let max = nums[0];
let second = nums[1];
for (let i=1; i<nums.length; i++){
if (nums[i] > max){
second = max;
max = nums[i];
}else if (nums[i] < max && nums[i]> second){
second = nums[i];
}
}
return second;
}
輸入兩個正整數,你的函式能找到並回傳這兩個正整數的最大公因數。
輸入範例:6 和 4。回傳:2
輸入範例:5 和 16。回傳:1
輸入範例:12 和 6。回傳:6
// @param n1:{Integer}
// @param n2:{Integer}
// @return :{Integer}
// 從小的數字開始遞減尋找能整除的
function findGCD(n1, n2){
let s = n1<n2 ? n1 : n2;
for (let i=s; i>=1; i--){
if (n1%i==0 && n2%i==0)
return i;
}
}
輸入兩個正整數,你的函式能找到並回傳這兩個正整數的最小公倍數。
輸入範例:6 和 4。回傳:12
輸入範例:5 和 16。回傳:80
輸入範例:12 和 6。回傳:12
// @param n1:{Integer}
// @param n2:{Integer}
// @return :{Integer}
// 從小的數的倍數開始遞增 直到兩者相乘為止
function findLCM(n1, n2){
let s = n1<n2 ? n1 : n2;
let b = n1+n2-s;
for (let i=1; i<=b; i++){
if (s*i%b == 0) return s*i;
}
}
輸入一個整數陣列,你的函式能將其轉換為逗號隔開的單一字串。
輸入範例:[3, 5, -4, 2]。回傳:3,5,-4,2
輸入範例:[]。回傳:空字串
輸入範例:[1000]。回傳:1000
// @param nums:{[Integer]}
// @return :{String}
// 使用內建方法
function toCSVString(nums){
return nums.join(",");
}
// 迴圈
function toCSVString(nums){
let string = "";
for (let i=0; i<nums.length; i++){
if (i==0) string += nums[i];
else string += ","+nums[i];
}
return string;
}
輸入等差數列中最小的整數、最大的整數、以及公差,計算數列中每個數字的總和。可以假設輸入的最大數字一定大於最小數字。
輸入範例:最小 2、最大 8、公差 2,計算 2+4+6+8 的總和。回傳:20
輸入範例:最小 -2、最大 3、公差 1,計算 (-2)+(-1)+0+1+2+3 的總和。回傳:3
輸入範例:最小 10、最大 14、公差 3,計算 10+13 的總和。回傳:23
// @param min:{Integer}
// @param max:{Integer}
// @param differ:{Integer}
// @return :{Integer}
// 迴圈
function sumOfArithmeticSequence(min, max, differ){
let sum=0;
for (let i=min; i<=max; i+=differ){
sum += i;
}
return sum;
}
輸入一個可能包含空字串的字串陣列 / 列表,以及一個預設值,你的函式能把陣列 / 列表中的空字串用預設值取代。
輸入範例:["Hello", "World", ""]、以及預設值 "test"。回傳:["Hello", "World", "test"]
輸入範例:["", "ok", ""]、以及預設值 "failed"。回傳:["failed", "ok", "failed"]
輸入範例:["no empty"]、以及預設值 "word"。回傳:["no empty"]
// @param words:{[String]}
// @param value:{String}
// @return :{[String]}
// 迴圈
function fill(words, value){
for (let i=0; i<words.length; i++){
if (words[i]=="") words[i]=value;
}
return words;
}
// map方法
function fill(words, value){
return words.map(word=>{
if (word=="") return value;
else return word;
})
}
輸入一個可能包含空字串的字串陣列 / 列表,你的函式能把陣列 / 列表中的空字串用前一個有效值 ( 非空字串 ) 取代。若沒有前一個有效值,則保持空字串不變。
輸入範例:["", "a", "", "", "c"]。回傳:["", "a", "a", "a", "c"]
輸入範例:["a", "b", "", "c", ""]。回傳:["a", "b", "b", "c", "c"]
輸入範例:["", "", "a"]。回傳:["", "", "a"]
// @param words:{[String]}
// @return :{[String]}
// 迴圈
function ffill(words){
for(let i=0; i<words.length; i++){
if (words[i]==""){
words[i] = words[i-1] || "";
} // 填入前一個文字 如果i=0是null 填入""
}
return words;
}