Thử thách của bạn hôm nay là triển khai chức năng giống như t9 .
Bạn sẽ thực hiện một chức năng sẽ chỉ có 2 tham số.
Bạn sẽ nhận được 1 số điện thoại trong một chuỗi và nội dung của tệp văn bản với một danh sách các từ (không giả sử một kiểu dòng mới cụ thể).
Bạn có thể sử dụng liên kết https://raw.githubusercontent.com/eneko/data-reposeective/master/data/words.txt để kiểm tra chức năng hoặc sử dụng /usr/share/dict/words
(kiểm tra tệp văn bản có danh sách các từ [đã đóng] để biết thêm thông tin).
Bạn có thể cho rằng bạn sẽ luôn nhận được ít nhất 2 số.
Cho số, bạn sẽ đọc từ một danh sách các từ và trả về các từ bắt đầu bằng ánh xạ các chữ cái cho các từ đó. Điều này có nghĩa là đầu vào chỉ nên là các số từ 2 đến 9.
Bạn có thể làm bất cứ điều gì bạn muốn nếu bạn nhận được đầu vào không hợp lệ.
Nếu không tìm thấy kết quả khớp, bạn có thể trả về một danh sách trống, null
/ nil
hoặc 0
.
Hãy nhớ rằng các phím điện thoại di động được ánh xạ tới ký tự tương đương của chúng:
- 0 và 1 không hợp lệ
- 2 trận đấu [abc]
- 3 trận đấu [def]
- 4 trận đấu [ghi]
- 5 trận đấu [jkl]
- 6 trận đấu [mno]
- 7 trận đấu [pqrs]
- 8 trận đấu [tuv]
- và 9 trận đấu [wxyz]
Ví dụ:
f('52726')
//returns ["Japan","japan","Japanee","Japanese","Japanesque"...,"larbowlines"]
f('552')
//returns ["Kjeldahl","kjeldahlization","kjeldahlize"...,"Lleu","Llew"]
f('1234')
//makes demons fly out your nose or divide by 0
f('9999')
//returns ["Zyzzogeton"]
f('999999')
//returns [] or null/nil or 0
Sau khi bạn chạy chức năng của mình, bạn có thể in nó theo bất kỳ cách nào bạn muốn.
Quy tắc:
- Các sơ hở tiêu chuẩn là HÓA ĐƠN
- Bạn phải trả lại một cái gì đó, ngay cả khi nó là
null
/nil
Javascript sẽ trả lạiundefined
nếu bạn không trả lại một cái gì đó, do đó, quy tắc này. - Bạn không thể sử dụng hoặc thực hiện lại câu trả lời của người khác hoặc sao chép việc thực hiện của tôi.
- Bạn có thể giả sử, đối với Javascript, trình duyệt sẽ được mở và
innerText
/textContent
của phần tử tự động sẽ được chuyển qua làm tham số thứ 2 - Đối với các ngôn ngữ được biên dịch, bạn không thể truyền các đối số đặc biệt cho trình biên dịch
- Bạn có thể nhận được tên tệp qua đối số trình biên dịch
- Các biến, macro, biến toàn cục, hằng, các lớp không chuẩn và tất cả các loại sắp xếp các giá trị khác bên trong hàm sẽ được coi là không hợp lệ.
- Trong Javascript, các biến không có từ khóa
var
khiến mã của bạn không hợp lệ - Chức năng của bạn sẽ được đặt tên
f
- Bạn chỉ có thể và chỉ có 2 đối số trên hàm của mình
- Cố gắng giữ mã của bạn dưới 500 giây để chạy.
- Bạn không phải lo lắng về khoảng trắng
- Bạn phải chỉ sử dụng các ký tự có thể in ASCII .
Ngoại lệ là các ngôn ngữ chỉ sử dụng các ký tự không in được (APL và khoảng trắng là 2 ví dụ).
Ghi điểm:
- Số byte thấp nhất giành được
- Có các ký tự có thể in ASCII không hợp lệ trong câu trả lời của bạn, sẽ được tính là câu trả lời được mã hóa trong UTF-32
Ngoại lệ đối với mã hóa sẽ khiến câu trả lời của bạn được tính theo các ký tự . - Chỉ có cơ thể chức năng đếm, không đếm bất cứ điều gì khác bạn làm ngoài nó
- Tiền thưởng -30% nếu bạn tạo một hệ thống dự đoán dựa trên vùng lân cận hoặc các từ phổ biến nhất
- Phần thưởng có kích thước -20% nếu bạn chỉ trả lại 5 kết quả khớp đầu tiên cho mỗi chữ cái tương ứng với số đầu tiên (ví dụ: 245 sẽ trả về 5 từ bắt đầu bằng 'a', 5 bắt đầu bằng 'b' và 5 bắt đầu bằng 'c' ).
Dưới đây là một ví dụ về việc triển khai, sử dụng Javascript:
function f(phone, words)
{
var keypad=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
var regex='';
for(var i=0,l=phone.length;i<l;i++)
{
regex+='['+keypad[phone[i]]+']';
}
var regexp=new RegExp('\\s('+regex+'[a-z]*)\\s','gi');
return words.match(regexp);
}
Để chạy nó, hãy mở liên kết danh sách và chạy, ví dụ:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Ví dụ này đã được thử nghiệm và hoạt động theo Opera 12,17 64 bit trên Windows 7 Home Edition 64 bit.