Mục tiêu của bạn : viết một đoạn mã sẽ dẫn đến kết quả kinh điển của "Xin chào, thế giới!" được in thành STDOUT hoặc tương đương.
Quy tắc : Mã phải hoàn toàn trong việc in ASCII. Tất cả các mã phải có chức năng - loại bỏ bất kỳ ký tự đếm đơn lẻ nào phải thay đổi kết quả hoặc khiến mã không hoạt động. Tất cả các biến phải được sử dụng sau khi gán. Chữ ký tự và chuỗi ký tự phải cần thiết cho đầu ra - nghĩa là thay thế bất kỳ ký tự nào hoặc bất kỳ ký tự nào trong một chuỗi ký tự bằng một ký tự khác phải có khả năng thay đổi kết quả (và không thông qua hiệu ứng của chuỗi thoát - thay thế ký tự bằng dấu gạch chéo ngược hoặc tương đương)
(LƯU Ý: Quy tắc cuối cùng đã được chỉnh sửa trong)
Ghi điểm : Đây là nơi nó trở nên thú vị. Điểm số cao nhất chiến thắng được xác định theo số lượng ký tự, theo quy tắc bowling-bowling điển hình. Nhưng việc sử dụng lặp lại các ký tự sẽ dẫn đến các điểm trừ. Đặc biệt...
- Việc sử dụng lặp lại bất kỳ ký tự chữ và số nào (az, AZ, 0-9) sẽ dẫn đến việc bị trừ 3 điểm mỗi lần lặp lại (lần sử dụng đầu tiên không dẫn đến việc khấu trừ).
- Việc sử dụng lặp lại các dấu câu cơ bản ([!? .-, ": ';]) - bao gồm cả dấu ngoặc - sẽ dẫn đến việc trừ 2 điểm mỗi lần lặp lại.
- Việc sử dụng lặp lại các ký tự ASCII khác {`~ @ # $% ^ & * _ + = | \ /> <} - bao gồm cả dấu ngoặc nhọn - sẽ dẫn đến việc trừ 4 điểm mỗi lần lặp lại.
- Việc sử dụng lặp lại các khoảng trắng, tab và dòng mới sẽ dẫn đến việc bị trừ 1 điểm mỗi lần lặp lại. Đó là, chỉ lần đầu tiên sử dụng một khoảng trắng, tab hoặc dòng mới sẽ được tính vào tổng số của bạn.
Lưu ý: các bình luận không được tính vào tổng số, mặc dù các ký tự đánh dấu bắt đầu / kết thúc của một bình luận làm. Chẳng hạn, trong C / C ++, nếu bạn có /* This is a comment */
, thì nó sẽ đếm hai dấu gạch chéo và hai dấu sao, nhưng không có gì giữa chúng.
Một số ví dụ (lưu ý: sử dụng Julia làm ngôn ngữ mẫu) ...
print("Hello, world!");
Tổng số ký tự hiển thị: 22
Chứa không gian: +1
Chữ số lặp lại: -12 cho llor
Dấu chấm lặp lại: -2 cho "
Điểm cuối cùng: 22 + 1-12-2 = 9
print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII
Tổng số ký tự: 43 (không tính bất kỳ ký tự nào sau #, là ký tự nhận xét)
Chứa
khoảng trắng : +1 Chữ số lặp lại: -18 cho rr1008
Dấu chấm lặp lại: -24 cho () "" "" ",,,,,
Cuối cùng điểm: 43 + 1-24-18 = 2
xy=STDOUT
m="Hello, world!"
print(xy,m);
Tổng số ký tự hiển thị: 37
Chứa dòng mới: +1
Chứa không gian: +1
Chữ số lặp lại: -18 cho xyllor
Dấu chấm lặp lại: -4 cho ",
Lặp lại ASCII khác: -4 cho =
Điểm cuối cùng: 37 + 1 + 1-18-4 -4 = 13
Một vài đoạn mã không hợp lệ ...
x=2;print("Hello,world!")
Vấn đề: x
được chỉ định, nhưng không được sử dụng.
print("Hello,"*" world!")
Vấn đề: *
là không cần thiết, kết quả sẽ giống nhau mà không có nó.
k=1
if k>0
print("Hello, world!")
else
print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end
Vấn đề: Lệnh thứ hai print
sẽ không chạy. Ngoài ra, loại bỏ các ký tự trong trích dẫn trong print
lệnh thứ hai sẽ không thay đổi đầu ra.
x="Hello, world!";
print(x)
Vấn đề: loại bỏ dòng mới sẽ không thay đổi kết quả hoặc gây ra lỗi (trong Julia, dấu chấm phẩy chỉ cần thiết nếu nhiều lệnh nằm trên cùng một dòng, nếu không thì chỉ cần loại bỏ giá trị trả về).
print("Hellos\b, world!")
Vấn đề: s
nhân vật không ảnh hưởng đến kết quả, vì nó bị xóa bởi \b
. Điều này được chấp nhận nếu được thực hiện thông qua mã ( "Hello",char(100),"\b, world!"
), nhưng không thể được thực hiện thông qua chuỗi ký tự hoặc ký tự.
Máy tính điểm thuận tiện - http://jsfiddle.net/4t7qG/2/ - cảm ơn Doorknob