Я люблю 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 : петля IF% приращение% EQU 0 GOTO конец ECHO% прирост% SET /% прироста% - = 1 GOTO loop :конец ВЫХОД
@ECHO OFF SET / p INPUT = Введите здесь ввод: SET R =% 1 ECHO Последний символ ввода здесь:% R: ~ -1%
@ECHO OFF Приращение SET = 10 : е GOTO f ЭХО Ф : е GOTO г ЭХО г :г Пойдем ч ЭХО ч :час GOTO я ЭХО я :я GOTO j ЭХО j : J ЕСЛИ 3 == 4 (ЭХО 4), ДРУГОЕ (ЭХО 5) ЕСЛИ 5 == 3 (ПОЛУЧИТЕ l) Иначе (ПОЛУЧИТЕ k) : к ЭХО Готово. ЭХО ВЫПУСК !! ВЫХОД : л GOTO г
ЭХО Привет, Привет, Привет, привет, привет, Привет, Привет! Привет, привет, привет !, Лелло.
Пример выходов:
@ECHO OFF Приращение SET = 10 : петля IF% приращение% EQU 0 GOTO конец ECHO% прирост% SET /% прироста% - = 1 GOTO loop :конец ВЫХОД(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 : е % Г% е % Е% е : е % Г% г %например :г % Г% ч % Е% ч :час % Г% я % Е% я :я % Г% J % Е% J : J IF 3 == 4 (% e% 4) ELSE (% e% 5) ЕСЛИ 5 == 3 (% g% l) ИЛИ (% g% k) : к % Е% Готово. % e% BATCH OUT !! ВЫХОД : л % Г% г(10 символов сохранены)
SET% h% = ello, ЭХО H% h% H% h% H% h% h% h% h% h% H% h% Hello !, 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
) является посторонним выход приемлемым из golfed программы?