Tôi yêu BATCH, mặc dù thiếu các lệnh chức năng gây sốc, mặc dù thậm chí do không hỗ trợ không nguyên. Tại sao? Bởi vì điều này hoạt động:
SET var=SET
%var% i=0
Điều này sẽ đánh giá để:
SET var=SET
SET i=0
Tuyệt vời phải không? Tôi đã sử dụng kỹ thuật này trong một chương trình BATCH trước đây, vì nó tiết kiệm byte!
Thách thức của bạn, nếu bạn chấp nhận nó, sẽ là "đánh gôn" các chương trình BATCH theo cách này. Bạn phải giảm kích thước byte của chương trình BATCH đầu vào bằng cách bao gồm các SET
câu lệnh sẽ đánh giá thành các phần của chương trình và không có cách nào khác sửa đổi chương trình. (Điều này không cho phép, đổi tên một tên biến thành một tên ngắn hơn. Hãy nhớ rằng BATCH, ngoài các biến, không phân biệt chữ hoa chữ thường.) Điểm của bạn được tính như vậy:
score = # of characters in your program + 5*(net result bytes in test cases below)
Tôi bảo lưu quyền thêm nhiều trường hợp thử nghiệm, để không khuyến khích làm việc để tối ưu hóa chương trình cho các trường hợp thử nghiệm.
Vì lợi ích của thử thách này, bạn SET
báo cáo không thể chứa các ký tự điều khiển ( |
, <
, >
, %
) hoặc dấu ngắt hàng. Bạn không được sửa đổi mã ngoài việc di chuyển các đoạn mã bên trong câu lệnh đã đặt. (Nghĩa là, bạn không thể xóa các khoảng trắng không cần thiết, thay thế EQU
bằng ==
, v.v.) Chúng tôi sẽ giả sử rằng các dòng kết thúc bằng \n
.
Các trường hợp thử nghiệm
Mỗi trường hợp thử nghiệm nằm trong một khối mã riêng biệt và mỗi trường hợp thử nghiệm được khép kín, có nghĩa là bạn chỉ nên chơi golf với giả định những gì được đưa ra trong đó. (Tức là, nếu bạn SET d=SET
trong một chương trình, câu lệnh đó sẽ không được tự động đưa ra cho bất kỳ chương trình nào khác). Mỗi kết quả ví dụ có thể được tìm thấy sau mỗi trường hợp thử nghiệm. Có một dòng giữa các trường hợp thử nghiệm.
@ECHO TẮT Gia tăng SET = 10 : vòng lặp NẾU% gia tăng% THIẾT BỊ 0 Kết thúc GOTO ECHO% tăng% SET / A% tăng% - = 1 Vòng lặp GOTO :kết thúc LỐI THOÁT HIỂM
@ECHO TẮT SET / p INPUT = Nhập đầu vào tại đây: THIẾT LẬP R =% 1 ECHO char cuối cùng của đầu vào ở đây:% R: ~ -1%
@ECHO TẮT Gia tăng SET = 10 : e GOTO ECHO : f GOTO g ECHO g : g GOTO ECHO : h GOTO tôi ECHO tôi :tôi GOTO j ECHO j : j NẾU 3 == 4 (ECHO 4) ELSE (ECHO 5) NẾU 5 == 3 (GOTO l) ELSE (GOTO k) : k ECHO Xong. ECHO BATCH RA !! LỐI THOÁT HIỂM : tôi GOTO g
ECHO Xin chào, xin chào, xin chào, xin chào, xin chào, xin chào, xin chào!, Xin chào, ello!, Lello.
Kết quả ví dụ:
@ECHO TẮT Gia tăng SET = 10 : vòng lặp NẾU% gia tăng% THIẾT BỊ 0 Kết thúc GOTO ECHO% tăng% SET / A% tăng% - = 1 Vòng lặp GOTO :kết thúc LỐI THOÁT HIỂM(Đã lưu 0 byte)
@ECHO TẮT SET% i% = đầu vào tại đây: THIẾT LẬP / p INPUT = Nhập% i% THIẾT LẬP R =% 1 ECHO char cuối cùng của% i %% R: ~ -1%(3 byte đạt được)
@ECHO TẮT Gia tăng SET = 10 THIẾT LẬP G = GOTO THIẾT LẬP e = ECHO : e % g% f % e% f : f % g% g %ví dụ : g % g% h % e% h : h % g% i % e% i :tôi % g% j % e% j : j NẾU 3 == 4 (% e% 4) ELSE (% e% 5) NẾU 5 == 3 (% g% l) ELSE (% g% k) : k % e% Xong. % e% BATCH RA !! LỐI THOÁT HIỂM : tôi % g% g(Lưu 10 ký tự)
THIẾT LẬP% h% = ello, ECHO H% h% H% h% H% h% h% h% h% h% H% h% Xin chào!, H% h% ello!, Lello.(Đã lưu 1 ký tự)
AAA %increment%
→ set a=increment¶AAA %%a%%
không hợp lệ và AAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
là hợp lệ. (iirc) Vì vậy, bạn cần phải chính thức hóa nó. ( ¶
đại diện cho một dòng mới)
@
trước SET
) thì đầu ra bên ngoài có thể chấp nhận được từ chương trình đánh gôn không?