Windows Batch (CMD), вероятно, является наименее подходящим языком для игры в гольф кода.
Избегайте новых символов . Если вы ищете самый короткий код в байтах, в отличие от символов, вам нужно избавиться от всех ненужных возвратов каретки (символы новой строки = 2 байта). Для этого вы можете использовать &
операцию, обрезая один байт для каждой команды.
echo Hello&echo World.
Установка переменных . При установке переменных с помощью переключателей set
парсер будет игнорировать пробелы.
set /a a+=1
set /p b="User Input: "
:: Will be handled the same as..
set/aa+=1
set/pb="User Input: "
Обратите внимание, что одни и те же правила синтаксического анализа не применяются ко всем командам - например, для циклов требуются пробелы. За исключением между set, string, or command
(то есть, что в скобках) и словом do
.
for /f %%a in (file.txt)do ...
Простые математические выражения . Также обратите внимание на выражение, которое я использовал для увеличения в set /a
команде. Для простых математических выражений используйте += -= *= /=
вместо (например) set /a a=%a%+1
.
Сбор команды вывода . Чтобы получить выходные данные команды, иногда может быть полезно вывести и прочитать файл, где в противном случае вы могли бы использовать цикл for для сбора выходных данных:
for /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo test
отправьте стандартный вывод в файл с именем f, >f
запустите новую команду &
и получите содержимое файла в переменной set/pa=<f
. Очевидно, это не всегда полезно. Но это может быть, когда все, что вам нужно, это одна строка вывода.
Вывод команды . При подавлении вывода команды используйте @
перед командами, если вам не нужно подавить более 9 команд, в этом случае используйте @echo off
в начале вашего сценария. @echo off
имеет длину 9 байт и, следовательно, обычно сохраняет больше байтов при использовании более длинных сценариев.
Команды часто делают больше, чем просто то, что очевидно - подумайте о том, что делают ваши команды. Например; если вам нужно установить переменную и отобразить другую переменную вместо:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
Вы можете использовать команду set с /p
переключателем для вывода %a%
за вас.
set a=OUTPUT
echo test>f
set /p b=%a%<f
Полностью в гольф ...
set a=OUTPUT&echo test>f&set/pb=%a%<f
Несколько примеров - подсчитать сумму всех цифр - гипотеза Гольдбаха .
Любые другие советы более чем приветствуются - я буду продолжать обновлять это, если я думаю о чем-либо еще.