Cài đặt
Bạn được cho một trang web đơn giản với 11 yếu tố:
- 10
input
yếu tố với IDi1
thông quai10
, theo thứ tự - một
output
yếu tố có IDout
Các yếu tố đầu vào có value
các thuộc tính được xác định trong nguồn HTML. Giá trị của bất kỳ đầu vào nhất định có thể được bất kỳ số nguyên từ 0
để 10
toàn diện.
Trang web được trang bị thư viện jQuery 1.10.1 lõi (như được thấy trong fiddle) và thực thi một khối mã ngay khi DOM được tải.
Các thách thức
Sáu thách thức cụ thể được trình bày dưới đây. Trong mỗi trường hợp, mục tiêu là tính toán một số chức năng của input
s và đặt kết quả tính toán vào HTML bên trong củaoutput
. Mỗi thử thách nên được giải quyết độc lập với những người khác. Giải pháp cho một thách thức là khối mã thực hiện tính toán / đầu ra (ví dụ mã trong cửa sổ "Javascript" trong fiddle). Độ dài của một giải pháp là độ dài (tính bằng byte) của khối mã này.
Tất cả điều này có vẻ rất đơn giản, nếu không có một số hạn chế khá thú vị.
Mã của bạn có thể ...
gọi hàm jQuery
$()
và truyền vào các đối sốđịnh nghĩa và sử dụng các biến
sử dụng
this
đọc bất kỳ thuộc tính nào của bất kỳ đối tượng jQuery nào (với
.length
mục đích hữu ích nhất)định nghĩa các hàm / lambdas, sau đó có thể được gọi, được lưu trữ trong các biến và được truyền dưới dạng đối số. Các hàm có thể chấp nhận đối số và
return
giá trị nếu cần.gọi bất kỳ phương thức truyền tải DOM DOM nào
gọi bất kỳ phương pháp thao tác jQuery DOM , trừ
width
,height
,innerWidth
,innerHeight
,outerWidth
,outerHeight
,offset
,position
,replaceAll
,replaceWith
,scrollLeft
,scrollTop
,css
,prop
,removeProp
, mà có thể không được gọisử dụng các toán tử: tạo đối tượng
{}
; tạo mảng / tham chiếu chỉ mục / tham chiếu trường[]
, gọi hàm / phương thức()
, nối chuỗi+
và gán=
sử dụng chuỗi ký tự
Mã của bạn có thể không ...
sử dụng bất kỳ toán tử nào ngoại trừ những toán tử được liệt kê ở trên
sử dụng bất kỳ chữ nào không phải là chuỗi ký tự
gọi bất kỳ hàm / phương thức nào khác ngoài các hàm cụ thể ngoại trừ ở trên
sử dụng bất kỳ cấu trúc điều khiển hoặc từ khóa (ví dụ
for
,while
,try
,if
,with
, vv), trừthis
,var
,let
, chức năng và lambdasthao túng DOM theo bất kỳ cách nào dẫn đến việc tiêm mã (xem thêm bên dưới)
truy cập bất kỳ trường / thuộc tính không do người dùng xác định hoặc trường / thuộc tính do người dùng xác định ngoại trừ những trường được liệt kê ở trên
6 thử thách
Tính tổng của tất cả các
input
giá trị chẵn, đặt kết quả vào HTML bên trong củaoutput
.Tính toán tối đa của tất cả các
input
giá trị, đặt kết quả vào HTML bên trong củaoutput
.Tính toán sản phẩm của tất cả các
input
giá trị<= 2
, đặt kết quả vào HTML bên trong củaoutput
. Nếu tất cả các giá trị đầu vào là> 2
, đặt0
vào HTML bên trong củaoutput
.Tính giá trị phương thức (nghĩa là giá trị có tần số lớn nhất) của tất cả các
input
giá trị, đặt kết quả vào HTML bên trong củaoutput
. Nếu giá trị phương thức không phải là duy nhất, hãy đặt bất kỳ một trong các giá trị phương thức vào HTML bên trong củaoutput
.Đặt
I1
giá trị của đầu vàoi1
,I2
là giá trị của đầu vàoi2
, v.v ... Nếu chuỗi các giá trị đầu vàoI1
..I10
tạo thành một hàng rào vớiI1 < I2
, đặt"TRUE"
vào HTML bên trong ra ngoàioutput
; mặt khác đặt"FALSE"
vào HTML bên trong của đầu ra. Cụ thể, điều kiện hàng rào làI1 < I2 > I3 < I4 > I5 < I6 > I7 < I8 > I9 < I10
.Đặt danh sách tất cả các
input
giá trị được phân tách bằng dấu phẩy , được sắp xếp theo thứ tự tăng dần, vào HTML bên trong củaoutput
.
Chấm điểm
Người chiến thắng cuộc thi là lập trình viên đưa ra các giải pháp chính xác cho số lượng thử thách lớn nhất. Trong trường hợp hòa, người chiến thắng là lập trình viên có tổng độ dài giải pháp thấp nhất (tổng độ dài của tất cả các giải pháp). Do đó đây là một biến thể nhỏ của mã golf.
Ghi chú quan trọng
Các giải pháp có thể xử lý DOM (ví dụ xóa inputs
, tạo các phần tử mới xuất hiện dưới dạng hình ảnh trực quan) miễn là trạng thái cuối cùng của DOM chứa một output
phần tử có ID out
và giá trị được tính toán chính xác.
Các giải pháp có thể sử dụng bất kỳ bộ chọn jQuery và CSS3 nâng cao nào, ngoại trừ các tính năng đánh giá biểu thức hoặc thực thi mã.
Các giải pháp có thể không sửa đổi nguồn HTML của tài liệu. Tất cả các thao tác DOM phải xảy ra trong tập lệnh thông qua jQuery.
Các giải pháp không được tiêm mã dưới bất kỳ hình thức nào trong quá trình thao tác / truyền tải DOM. Điều này bao gồm (nhưng không giới hạn ở) viết ra script
các phần tử, viết ra các thuộc tính sự kiện có chứa mã hoặc khai thác expression
(IE) hoặc calc
các tính năng của CSS3. Thách thức này là về tư duy sáng tạo bằng cách sử dụng các bộ và cây và sử dụng thành thạo jQuery; nó không phải là về việc lén mã vào DOM hoặc kết thúc chạy xung quanh các hạn chế của nhà điều hành. Tôi bảo lưu quyền loại bỏ bất kỳ giải pháp nào trên cơ sở này.
Tất cả các giải pháp đều có thể thực hiện được và mỗi giải pháp có thể được thực hiện trong ít hơn 400 byte. Các giải pháp của bạn tất nhiên có thể vượt quá 400 byte hoặc ngắn hơn 400 byte. Đây chỉ là đảm bảo cơ bản của tôi rằng tất cả 6 vấn đề đều có thể giải quyết được bằng cách sử dụng một lượng mã hợp lý nhỏ.
Cuối cùng: Khi nghi ngờ, xin hỏi. :)
Thí dụ
Hãy xem xét thách thức giả thuyết: "Nếu 3 hoặc nhiều input
giá trị bằng 5, hãy đặt "TRUE"
vào HTML bên trong của output
; nếu không thì đặt "FALSE"
vào HTML bên trong của output
."
Một giải pháp hợp lệ là:
F = () => $('body').append( '<a>TRUE</a>' );
$('input').each( F );
F();
$('a:lt(3)').html( 'FALSE' );
$('#out').html( $('a:eq(' + $('input[value="5"]').length + ')') );
Có thể giành chiến thắng jQuerier tốt nhất! ;)
//La garantia soy yo
input
giá trị sẽ luôn luôn được (cơ quan đại diện của chuỗi) các số nguyên từ 0
để 10
toàn diện. Chúng nên được sắp xếp theo thứ tự các giá trị tăng dần của chúng khi được hiểu là số nguyên. Điều này thực sự sẽ tạo ra thứ tự giống như một loại từ vựng, với ngoại lệ 10
sẽ xuất hiện ngay sau 1
đó. Đó không phải là trường hợp cho một loại ở đây.