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 /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo test
відправити stdout у файл, який називається 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
Пара прикладів - підрахуйте суму всіх цифр - здогадка Гольдбаха .
Будь-які інші поради більш ніж оцінені - я продовжуватиму оновлювати це, якщо придумати щось інше.