10/10/2018, 10:51
Làm sao để tạo ra chuỗi có 1000 số 0 bằng đoạn mã ngắn nhất ?
Nhiều lúc "cuộc đời ngang trái" ép ta phải cắt một chuỗi theo chiều dài nhất định, không theo cách thông thường là cắt một chuỗi theo nội dung phân cách. Việc cắt chuỗi theo nội dung phân cách trong Javascript thật đơn giản, ta có thể làm như sau
var inputString = "Hôm nay là một ngày đẹp trời, nên lấy Javascript ra ôn, ặc..ặc, thiệt là bó tay";
var parts = inputString.split(","); // cắt chuỗi tại những chỗ xuất hiện dấu phẩy
alert("Số phần đã cắt: " + parts.length);
alert("Phần 1: " + parts[0]);
alert("Phần 2: " + parts[1]);
alert("Phần 3: " + parts[2]);
alert("Phần 4: " + parts[3]);
Dòng 2 thực hiện việc cắt chuỗi, chỉ với hàm split có tham số là nội dung phân cách, ta đã xử đẹp "tứ mã phân thây" chuỗi trên dễ dàng.
[HR]
Nhưng với yêu cầu cắt chuỗi theo số ký tự nhất định thì ta phải tốn chút "công sức" thôi:
function splitByLength(value, length) {
var parts = [];
for (var i = 0; i < value.length; i += length) {
parts.push(value.substr(i, length));
}
return parts;
}
Tham số
Khai báo hàm cần 2 tham số vào:
value là chuỗi cần cắt
length là con số chỉ độ dài cần cắt
Dòng 3 ta dùng vòng lặp duyệt với điều kiện biến đếm nhỏ hơn độ dài chuỗi cần cắt, mỗi lần lặp ta tiến hành lấy số ký tự chỉ định từ vị trí i (biến đếm) và lấy ra length ký tự, sau đó lưu vào mảng parts (ta dùng phương thức push để thêm vào mảng 1 phần tử)
Sau đó ta trả về nội dung nhưng phần tử đã được "phân thây" (mảng parts).
Sử dụng như sau
function splitByLength(value, length) {
var parts = [];
var totalLength = 0;
for (var i = 0; i < value.length; i += length) {
parts.push(value.substr(i, length));
}
return parts;
}
alert(splitByLength("1234567890", 4)); // Sẽ xuất ra mảng 3 phần tử: 1234, 5678, 90
Để tiện hơn cho việc sử dụng, chẳng hạn như cho nó một chút "hương" của hướng đối tượng
alert("1234567890".splitByLength(4)); // Trông PRO nhỉ
Để làm được điều này ta cần "cài" hàm splitByLength này vào đối tượng String của Javascript. Trước khi "cài nội gián" vào đối tượng String của Javascript, ta cần biết cách thức "gài hàng" trong Javascript ra sao
String.prototype.MyMethod = function () {
alert(this);
};
Array.prototype.MyMethod = function () {
alert(this);
};
Cài hàng thông qua cú pháp gán thuộc tính MyMethod của đối tượng String.prototype bằng một hàm không tên, vậy chúng ta có thể đặt bất kỳ cái tên nào thay cho MyMethod và chúng cũng có thể áp dụng cho những đối tượng cơ bản khác của Javascript như: Array, Date, Boolean ... không riêng gì String. Có một điểm cần lưu ý, việc sử dụng đối tượng this trong hàm không tên có ý nghĩa là:
Khi đó, hàm splitByLength được chỉnh lại như sau
String.prototype.splitByLength = function (length) {
var parts = [];
for (var i = 0; i < value.length; i += length) {
parts.push(this.substr(i, length));
}
return parts;
};
alert("1234567890".splitByLength(4));
Bây giờ chúng ta không cần tham số value nữa, vì this chính là chuỗi cần xử lý.
Lưu ý
Việc gài hàng còn có tác dụng thay đổi những hàm sẵn có của đối tượng String (hoặc những đối tượng khác), ví dụ
String.prototype.split = function() {
};
Đoạn mã này sẽ làm thay thế phương thức split sẵn có của đối tượng String, và điều này là tối kỵ, hãy cứ "yêu em như anh đã từng yêu" đừng "thay lòng đổi dạ" vì làm như thế việc sử dụng những thư viện hoặc kết hợp với những đoạn mã khác sẽ bất ổn, gây ra những kết quả không mong muốn, vì hàm ta định nghĩa lại thì sẽ cho ra kết quả khác với hàm gốc, vì vậy những thư viện đó nếu có sử dụng hàm split sẽ bị sai lệch. Khi "gài hàng" cũng cần tham khảo những phương thức sẵn có của đối tượng cần gài, "biết người biết ta" tránh được việc "chém" nhầm.
Đố vui
Kỳ này mình có một câu đố, cần bao nhiêu ký tự mã (đếm từng ký tự luôn) để tạo được giá trị chuỗi có 1000 số 0. Hay hiểu đơn giản là làm sao tạo ra chuỗi "00000000.....000000" (1000 số 0) bằng đoạn mã ngắn nhất. Tất nhiên là trong Javascript nhá. À quên, bạn hãy nhắn tin kết quả đến tổng đài 1900... và kèm theo có bao nhiêu người đoán không trúng như bạn, hì hì.
Xem chi tiết tại http://linq2js.blogspot.com/2010/11/...i-chi-inh.html
var inputString = "Hôm nay là một ngày đẹp trời, nên lấy Javascript ra ôn, ặc..ặc, thiệt là bó tay";
var parts = inputString.split(","); // cắt chuỗi tại những chỗ xuất hiện dấu phẩy
alert("Số phần đã cắt: " + parts.length);
alert("Phần 1: " + parts[0]);
alert("Phần 2: " + parts[1]);
alert("Phần 3: " + parts[2]);
alert("Phần 4: " + parts[3]);
Dòng 2 thực hiện việc cắt chuỗi, chỉ với hàm split có tham số là nội dung phân cách, ta đã xử đẹp "tứ mã phân thây" chuỗi trên dễ dàng.
[HR]
Nhưng với yêu cầu cắt chuỗi theo số ký tự nhất định thì ta phải tốn chút "công sức" thôi:
function splitByLength(value, length) {
var parts = [];
for (var i = 0; i < value.length; i += length) {
parts.push(value.substr(i, length));
}
return parts;
}
Tham số
Khai báo hàm cần 2 tham số vào:
value là chuỗi cần cắt
length là con số chỉ độ dài cần cắt
Dòng 3 ta dùng vòng lặp duyệt với điều kiện biến đếm nhỏ hơn độ dài chuỗi cần cắt, mỗi lần lặp ta tiến hành lấy số ký tự chỉ định từ vị trí i (biến đếm) và lấy ra length ký tự, sau đó lưu vào mảng parts (ta dùng phương thức push để thêm vào mảng 1 phần tử)
Sau đó ta trả về nội dung nhưng phần tử đã được "phân thây" (mảng parts).
Sử dụng như sau
function splitByLength(value, length) {
var parts = [];
var totalLength = 0;
for (var i = 0; i < value.length; i += length) {
parts.push(value.substr(i, length));
}
return parts;
}
alert(splitByLength("1234567890", 4)); // Sẽ xuất ra mảng 3 phần tử: 1234, 5678, 90
Để tiện hơn cho việc sử dụng, chẳng hạn như cho nó một chút "hương" của hướng đối tượng
alert("1234567890".splitByLength(4)); // Trông PRO nhỉ
Để làm được điều này ta cần "cài" hàm splitByLength này vào đối tượng String của Javascript. Trước khi "cài nội gián" vào đối tượng String của Javascript, ta cần biết cách thức "gài hàng" trong Javascript ra sao
String.prototype.MyMethod = function () {
alert(this);
};
Array.prototype.MyMethod = function () {
alert(this);
};
Cài hàng thông qua cú pháp gán thuộc tính MyMethod của đối tượng String.prototype bằng một hàm không tên, vậy chúng ta có thể đặt bất kỳ cái tên nào thay cho MyMethod và chúng cũng có thể áp dụng cho những đối tượng cơ bản khác của Javascript như: Array, Date, Boolean ... không riêng gì String. Có một điểm cần lưu ý, việc sử dụng đối tượng this trong hàm không tên có ý nghĩa là:
- this sẽ là chuỗi đang xử lý nếu chúng ta cài đặt hàm lên String
- this sẽ là mảng đang xử lý nếu chúng ta cài đặt hàm lên Array
- ...
Khi đó, hàm splitByLength được chỉnh lại như sau
String.prototype.splitByLength = function (length) {
var parts = [];
for (var i = 0; i < value.length; i += length) {
parts.push(this.substr(i, length));
}
return parts;
};
alert("1234567890".splitByLength(4));
Bây giờ chúng ta không cần tham số value nữa, vì this chính là chuỗi cần xử lý.
Lưu ý
Việc gài hàng còn có tác dụng thay đổi những hàm sẵn có của đối tượng String (hoặc những đối tượng khác), ví dụ
String.prototype.split = function() {
};
Đoạn mã này sẽ làm thay thế phương thức split sẵn có của đối tượng String, và điều này là tối kỵ, hãy cứ "yêu em như anh đã từng yêu" đừng "thay lòng đổi dạ" vì làm như thế việc sử dụng những thư viện hoặc kết hợp với những đoạn mã khác sẽ bất ổn, gây ra những kết quả không mong muốn, vì hàm ta định nghĩa lại thì sẽ cho ra kết quả khác với hàm gốc, vì vậy những thư viện đó nếu có sử dụng hàm split sẽ bị sai lệch. Khi "gài hàng" cũng cần tham khảo những phương thức sẵn có của đối tượng cần gài, "biết người biết ta" tránh được việc "chém" nhầm.
Đố vui
Kỳ này mình có một câu đố, cần bao nhiêu ký tự mã (đếm từng ký tự luôn) để tạo được giá trị chuỗi có 1000 số 0. Hay hiểu đơn giản là làm sao tạo ra chuỗi "00000000.....000000" (1000 số 0) bằng đoạn mã ngắn nhất. Tất nhiên là trong Javascript nhá. À quên, bạn hãy nhắn tin kết quả đến tổng đài 1900... và kèm theo có bao nhiêu người đoán không trúng như bạn, hì hì.
Xem chi tiết tại http://linq2js.blogspot.com/2010/11/...i-chi-inh.html
Bài liên quan
s='';k=0;while(k<1000){s+=0;k++}
s='',k=0;while(k<1000){s+=0;k++};document.write(s);
[=========> Bổ sung bài viết <=========]
Thế đố các bạn trong php thì làm cách nào ngắn nhất? Nếu bạn nào làm đc dưới 21 ký tự (tính cả dấu ";" - số ký tự đúng = javascript theo cách trên của mình luôn) thì mình sẽ gọi = thầy
(tất nhiên là có thể làm đc nên tớ mới đố nhé)
$s=str_repeat(0,1000);
Tạo một chuỗi có mẫu như sau 1\2\3\4\5\6\7\8\9\0
Yêu cầu là đoạn mã phải ngắn nhất, và trong đoạn mã sử dụng số ký tự \ nhỏ hơn hoặc bằng 9
dưng cơ mà bằng php hay js nhỉ ?