Như chúng ta đã biết, meta đang tràn ngập những lời phàn nàn về việc ghi điểm mã golf giữa các ngôn ngữ (vâng, mỗi từ là một liên kết riêng biệt và đây có thể chỉ là phần nổi của tảng băng chìm).
Với rất nhiều sự ghen tị đối với những người thực sự bận tâm tìm kiếm tài liệu Pyth, tôi nghĩ sẽ tốt hơn nếu có thêm một chút thách thức mang tính xây dựng, phù hợp với một trang web chuyên về các thách thức về mã.
Thử thách khá đơn giản. Là đầu vào , chúng tôi có tên ngôn ngữ và số byte . Bạn có thể lấy chúng làm đầu vào hàm stdin
hoặc phương thức nhập mặc định ngôn ngữ của bạn.
Là đầu ra , chúng tôi có số byte được sửa , tức là điểm của bạn với điểm chấp được áp dụng. Tương ứng, đầu ra phải là đầu ra chức năng stdout
hoặc phương thức đầu ra mặc định ngôn ngữ của bạn. Đầu ra sẽ được làm tròn thành số nguyên, bởi vì chúng tôi yêu thích tiebreakers.
Sử dụng xấu xí nhất, hack cùng nhau truy vấn ( liên kết - cảm thấy tự do để làm sạch nó lên), tôi đã cố gắng để tạo ra một bộ dữ liệu (nén với .xslx, .ods và .csv) có chứa một bản chụp của tất cả các câu trả lời cho mã golf câu hỏi . Bạn có thể sử dụng tập tin này (và cho rằng nó sẽ có sẵn để chương trình của bạn, ví dụ, đó là trong cùng một thư mục) hoặc chuyển đổi tập tin này sang một định dạng thông thường ( .xls
, .mat
, .sav
vv - nhưng nó chỉ có thể chứa dữ liệu gốc!). Tên nên được giữ lại QueryResults.ext
với ext
phần mở rộng của sự lựa chọn.
Bây giờ cho các chi tiết cụ thể. Đối với mỗi ngôn ngữ, có một tham số Boilerplate B
và Verbosity V
. Cùng nhau, chúng có thể được sử dụng để tạo ra một mô hình tuyến tính của ngôn ngữ. Gọi n
là số byte thực tế và c
là số điểm được sửa. Sử dụng một mô hình đơn giản n=Vc+B
, chúng tôi nhận được số điểm đã sửa:
n-B
c = ---
V
Đủ đơn giản, phải không? Bây giờ, để xác định V
và B
. Như bạn có thể mong đợi, chúng ta sẽ thực hiện một số hồi quy tuyến tính, hay chính xác hơn là hồi quy tuyến tính có trọng số bình phương nhỏ nhất. Tôi sẽ không giải thích chi tiết về điều đó - nếu bạn không chắc chắn cách thực hiện điều đó, Wikipedia là bạn của bạn hoặc nếu bạn may mắn, tài liệu ngôn ngữ của bạn.
Dữ liệu sẽ như sau. Mỗi điểm dữ liệu sẽ là số byte n
và tổng số trung bình của câu hỏi c
. Để tính số phiếu bầu, số điểm sẽ được tính trọng số, bằng số phiếu bầu của họ cộng với một (để chiếm 0 phiếu), hãy gọi đó là điểm v
. Câu trả lời với phiếu bầu tiêu cực nên được loại bỏ. Nói một cách đơn giản, một câu trả lời có 1 phiếu sẽ được tính giống như hai câu trả lời có 0 phiếu.
Dữ liệu này sau đó được gắn vào mô hình đã nói ở trên n=Vc+B
bằng phương pháp hồi quy tuyến tính có trọng số.
Ví dụ: đã cung cấp dữ liệu cho một ngôn ngữ nhất định
n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5
Bây giờ, chúng ta soạn các ma trận và vectơ có liên quan A
, y
và W
, với các tham số của chúng ta trong vectơ
[1 c1] [n1] [1 0 0] x=[B]
A=[1 c2] y=[n2] W=[0 2 0], [V]
[1 c3] [n3] [0 0 5]
chúng tôi giải phương trình ma trận (với '
biểu thị chuyển vị)
A'WAx=A'Wy
cho x
(và do đó, chúng tôi nhận được B
và V
tham số của chúng tôi ).
Điểm số của bạn sẽ là đầu ra của chương trình của bạn, khi được cung cấp tên ngôn ngữ của riêng bạn và bytecount. Vì vậy, có, lần này ngay cả người dùng Java và C ++ cũng có thể giành chiến thắng!
CẢNH BÁO: Truy vấn tạo ra một tập dữ liệu có nhiều hàng không hợp lệ do mọi người sử dụng định dạng tiêu đề 'mát mẻ' và mọi người gắn thẻ các câu hỏi thách thức mã của họ dưới dạng mã golf . Tải xuống tôi cung cấp đã loại bỏ hầu hết các ngoại lệ. KHÔNG sử dụng CSV được cung cấp cùng với truy vấn.
Chúc mừng mã hóa!
C++ <s>6 bytes</s>
. Ngoài ra, tôi chưa bao giờ thực hiện bất kỳ T-SQL nào trước ngày hôm nay và tôi đã rất ấn tượng với bản thân mình rằng tôi đã quản lý để trích xuất bytecount.