Я люблю BATCH, незважаючи на шокуючу відсутність функціональних команд, незважаючи навіть на відсутність нецілої підтримки. Чому? Тому що це працює:
SET var=SET
%var% i=0
Це буде оцінено для:
SET var=SET
SET i=0
Фантастично, чи не так? Раніше я використовував цю техніку в програмі BATCH , оскільки вона економить байти!
Якщо ви приймете це, ваше завдання буде полягати в тому, щоб таким чином "програвати" програми BATCH Ви повинні зменшити розмір байтів вхідної програми BATCH, включивши SET
заяви, які оцінювали б на частини програми, і жодним чином не змінювали програму. (Це скаже, скажімо, перейменування назви змінної на щось коротше. Пам’ятайте, що BATCH, окрім змінних, нечутливий до регістру.) Ваш рахунок обчислюється таким чином:
score = # of characters in your program + 5*(net result bytes in test cases below)
Я залишаю за собою право додавати більше тестових випадків, щоб перешкодити роботі над оптимізацією програми для тестових випадків.
Заради цієї проблеми, ваші SET
заяви не можуть містити символи, що управляють ( |
, <
, >
, %
) або перенесення рядків. Ви не можете змінювати код, окрім переміщення фрагментів коду всередині оператора set. (Тобто ви не можете видалити зайвий пробіл, замінити EQU
і ==
т. Д.) Ми будемо вважати, що рядки закінчуються на \n
.
Тестові справи
Кожен тестовий випадок знаходиться в окремому блоці коду, і кожен тестовий випадок є автономним, тобто ви маєте гольф лише припускаючи, що дано в ньому. (Тобто, якщо ви перебуваєте SET d=SET
в одній програмі, це твердження не буде автоматично надано жодній іншій програмі). Кожен приклад результату можна знайти після кожного тестового випадку. Між тестовими випадками існує лінія.
@ECHO OFF Приріст SET = 10 : петля АКО% приріст% EQU 0 GOTO кінець % Приросту ECHO% SET / A приріст%% - = 1 GOTO петля : кінець ВХІД
@ECHO OFF SET / p INPUT = Введіть сюди введення: SET R =% 1 ECHO Остання таблиця введення тут:% R: ~ -1%
@ECHO OFF Приріст SET = 10 : е GOTO f ECHO f : f GOTO g ECHO g : g GOTO h ECHO h : год ГОТО i ECHO i : i GOTO j ECHO j : j ЯКЩО 3 == 4 (ECHO 4) ELSE (ECHO 5) ЯКЩО 5 == 3 (GOTO l) ELSE (GOTO k) : к ECHO Готово. ECHO BATCH OUT !! ВХІД : l GOTO g
ECHO Привіт, Привіт, Привіт, привіт, привіт, Привіт, Привіт !, Привіт, Елло !, Lello.
Приклади виходів:
@ECHO OFF Приріст SET = 10 : петля АКО% приріст% EQU 0 GOTO кінець % Приросту ECHO% SET / A приріст%% - = 1 GOTO петля : кінець ВХІД(0 байтів збережено)
@ECHO OFF SET% i% = введіть тут: SET / p INPUT = Введіть% i% SET R =% 1 ECHO Останній показник% i %% R: ~ -1%(3 байти отримано)
@ECHO OFF Приріст SET = 10 SET g = GOTO SET e = ECHO : е % g% f % e% f : f % г% г % e% g : g % г% год % e% h : год % g% i % e% i : i % g% j % e% j : j ЯКЩО 3 == 4 (% e% 4) ELSE (% e% 5) ЯКЩО 5 == 3 (% g% l) ELSE (% g% k) : к % e% Готово. % e% СПІЛЬНО !! ВХІД : l % г% г(10 символів збережено)
SET% h% = елло, ECHO H% h% H% h% H% h% h% h% h% h% H% h% Привіт !, h% h% ello !, Lello.(1 символ збережено)
AAA %increment%
→ → set a=increment¶AAA %%a%%
недійсний, і AAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
дійсний. (iirc) Тому вам потрібно це формалізувати. ( ¶
являє собою новий рядок)
@
доSET
), чи є додатковою продукцією, прийнятною з програми для гольфу?