Lập trình JavaScript với FCC - Basic Algorithm Scripting
Trong lập trình nói chung và lập trình JavaScript nói riêng, việc học thuật toán vẫn luôn vô cùng quan trọng. Thuật toán giúp cho lập trình viên rèn luyện tư duy.
Ngoài ra, khi thuật toán tốt thì chương trình viết ra sẽ chạy nhanh hơn, hoặc trông sẽ sáng sủa, dễ hiểu và dễ bảo trì hơn.
Vì vậy, tiếp theo trong loạt bài Lập trình JavaScript với FCC, hôm nay, mình sẽ tổng hợp lại những bài toán thuộc chủ đề Basic Algorithm Scripting trên freeCodeCamp để các bạn tiện theo dõi và có thể tham khảo khi cần.
Tuy nhiên, những bài toán này khá đơn giản nên mình sẽ không giải thích cách làm. Nếu các bạn có thắc mắc hay góp ý thì có thể để lại ở phần bình luận phía dưới.
Trước khi đi vào tìm hiểu các bài toán, các bạn có thể đọc trước các bài viết sau. Chúng khá hữu ích vì các thuật toán sau đây sẽ sử dụng đến những kiến thức trong đó.
- Các kiểu dữ liệu trong JavaScript
- JavaScript Array cơ bản
- Array Sorting – vấn đề muôn thuở
- JavaScript forEach là cái quái gì?
- JavaScript Object – last but not least
- Tìm hiểu Regular Expression JavaScript
Basic Algorithm Scripting - Reverse a String
Cho một string, nhiệm vụ của bạn là phải đảo ngược lại string đó. Ví dụ: Hello => olleH.
function reverseString(str) {
return str.split("").reverse().join("");
}
reverseString("hello");
Tham khảo:
Basic Algorithm Scripting - Factorialize a Number
Tính giai thừa của một số tự nhiên n!. Ví dụ: 5! = 5 * 4 * 3 * 2 * 1.
function factorialize(num) {
if (num == 0) return 1;
for (var i = num - 1; i >= 1; i--) num *= i;
return num;
}
factorialize(5);
Tham khảo:
Basic Algorithm Scripting - Check for Palindromes
Kiểm tra xem một string có phải là palindrome hay không? (Một string được gọi là palindrome khi và chỉ khi đọc ngược và đọc xuôi đều giống nhau, với điều kiện bỏ qua các dấu câu, kí tự đặc biệt, dấu cách). Ví dụ: boob, eye,...
function palindrome(str) {
var newStr = str.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
var newStrReverse = newStr.split("").reverse().join("");
return newStr === newStrReverse;
}
palindrome("eye");
Tham khảo:
Basic Algorithm Scripting - Find the Longest Word in a String
Tìm độ dài của từ dài nhất trong câu.
function findLongestWord(str) {
var words = str.split(" ");
var maxLength = words.reduce(function (acc, cur) {
return cur.length > acc ? cur.length : acc;
}, 0);
return maxLength;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
Tham khảo:
Basic Algorithm Scripting - Title Case a Sentence
Trả về string với các từ có chữ cái đầu tiên viết hoa. Ví dụ: I'm a little tea pot => I'm A Little Tea Pot.
function titleCase(str) {
var words = str.split(" ");
var newWords = words.map(function (word) {
var chars = word.split("");
chars[0] = chars[0].toUpperCase();
for (var i = 1; i < chars.length; i++) {
chars[i] = chars[i].toLowerCase();
}
return chars.join("");
});
return newWords.join(" ");
}
titleCase("I'm a little tea pot");
Tham khảo:
- String.prototype.split()
- String.prototype.toUpperCase()
- String.prototype.toLowerCase()
- Array.prototype.join()
Basic Algorithm Scripting - Return Largest Numbers in Arrays
Trả về một mảng gồm các số lớn nhất của mỗi sub-array.
function largestOfFour(arr) {
var answer = [];
for (var i = 0; i < arr.length; i++) {
var max = 0;
for (var j = 0; j < arr[i].length; j++) {
if (arr[i][j] > max) max = arr[i][j];
}
answer.push(max);
}
return answer;
}
largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1],
]);
Tham khảo:
Basic Algorithm Scripting - Confirm the Ending
Kiểm tra xem một string có được kết thúc bởi một string khác.
function confirmEnding(str, target) {
return target === str.substr(-target.length);
}
confirmEnding("Bastian", "n");
Tham khảo:
Basic Algorithm Scripting - Repeat a string repeat a string
Lặp lại string với số lần cho trước.
function repeatStringNumTimes(str, num) {
var answer = "";
for (var i = 0; i < num; i++) answer += str;
return answer;
}
repeatStringNumTimes("abc", 3);
Tham khảo:
Basic Algorithm Scripting - Truncate a string
Rút gọn string nếu nó dài quá n kí tự.
function truncateString(str, num) {
if (str.length <= num) return str;
if (num <= 3) return str.slice(0, num) + "...";
return str.slice(0, num - 3) + "...";
}
truncateString("A-tisket a-tasket A green and yellow basket", 11);
Tham khảo:
Basic Algorithm Scripting - Chunky Monkey
Chia mảng thành các phần với độ dài n cho trước.
function chunkArrayInGroups(arr, size) {
var answer = [];
for (var i = 0; i < arr.length; i += size) {
answer.push(arr.slice(i, i + size));
}
return answer;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
Tham khảo:
Basic Algorithm Scripting - Slasher Flick
Trả về những phần tử của mảng sau khi đã cắt đi n phần tử đầu tiên.
function slasher(arr, howMany) {
arr.splice(0, howMany);
return arr;
}
slasher([1, 2, 3], 2);
Tham khảo:
Basic Algorithm Scripting - Mutations
Kiểm tra xem trong 1 string có chứa tất cả các kí tự của string thứ 2 hay không.
function mutation(arr) {
arr[0] = arr[0].toLowerCase();
arr[1] = arr[1].toLowerCase();
for (var i = 0; i < arr[1].length; i++) {
if (arr[0].indexOf(arr[1][i]) < 0) return false;
}
return true;
}
mutation(["hello", "hey"]);
Tham khảo:
Basic Algorithm Scripting - Falsy Bouncer
Bỏ đi tất cả các giá trị falsy khỏi một mảng (giá trị falsy là false, null, 0, "", undefined và NaN).
function bouncer(arr) {
var answer = arr.filter(function (val) {
return (
(typeof val == "string" && val != "") ||
(val != false &&
val != null &&
val != 0 &&
val != undefined &&
!isNaN(val))
);
});
return answer;
}
bouncer([7, "ate", "", false, 9]);
Tham khảo:
Basic Algorithm Scripting - Seek and Destroy
Bỏ đi tất cả các phần tử của mảng giống với tập cho trước.
function destroyer(arr) {
var args = arguments;
var answer = arr.filter(function (val) {
for (var i = 1; i < args.length; i++) {
if (val === args[i]) return false;
}
return true;
});
return answer;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
Tham khảo:
Basic Algorithm Scripting - Where do I belong
Tìm ra vị trí có chỉ số nhỏ nhất phù hợp để chèn một số cho trước vào.
function getIndexToIns(arr, num) {
var newArr = arr.sort(function (a, b) {
return a - b;
});
var index = 0;
while (true) {
if (index == newArr.length || newArr[index] >= num) return index;
index++;
}
}
getIndexToIns([40, 60], 50);
Tham khảo:
Basic Algorithm Scripting - Caesars Cipher
Giải mã string cho trước sử dụng ROT13.
function rot13(str) {
// LBH QVQ VG!
var arr = str.split("");
var code, delta;
for (var i = 0; i < arr.length; i++) {
code = arr[i].charCodeAt(0) - 13;
if (arr[i] >= "A" && arr[i] < "N") {
delta = "A".charCodeAt(0) - code;
code = "Z".charCodeAt(0) - delta + 1;
arr[i] = String.fromCharCode(code);
} else if (arr[i] >= "N" && arr[i] <= "Z") {
arr[i] = String.fromCharCode(code);
}
}
return arr.join("");
}
// Change the inputs below to test
rot13("SERR PBQR PNZC");
Tham khảo:
Kết luận
Trên đây là tổng hợp các bài toán thuộc chủ đề Basic Algorithm Scripting trên freeCodeCamp. Theo cá nhân mình thấy thì các bài toán trên khá dễ. Nhưng lại rất hay ở chỗ, nó giúp ta áp dụng được kiến thức lý thuyết. Nếu các bạn có gì thắc mắc, góp ý hay cải tiến các thuật toán trên. Vui lòng để lại bình luận phía dưới nhé.
Xin chào và hẹn gặp lại bạn trong bài viết tiếp theo, thân ái!
★ Nếu bạn thấy bài viết này hay thì hãy theo dõi mình trên Facebook để nhận được thông báo khi có bài viết mới nhất nhé:
- Facebook Fanpage: Complete JavaScript
- Facebook Group: Hỏi đáp JavaScript VN
Bình luận