Windows Batch (CMD) jest prawdopodobnie najmniej odpowiednim językiem do gry w golfa.
Unikaj znaków nowej linii . Jeśli szukasz najkrótszego kodu w bajtach, w przeciwieństwie do znaków, będziesz chciał pozbyć się wszystkich niepotrzebnych zwrotów karetki (znaki nowego wiersza = 2 bajty). Możesz to zrobić za pomocą &
operacji, skracając jeden bajt dla każdego polecenia.
echo Hello&echo World.
Ustawianie zmiennych . Podczas ustawiania zmiennych za pomocą przełączników set
parser zignoruje spacje.
set /a a+=1
set /p b="User Input: "
:: Will be handled the same as..
set/aa+=1
set/pb="User Input: "
Zauważ, że te same reguły parsera nie dotyczą wszystkich poleceń - na przykład dla pętli wymagane są spacje. Z wyjątkiem między set, string, or command
(tj. Co jest w nawiasach) a słowem do
.
for /f %%a in (file.txt)do ...
Proste wyrażenia matematyczne . Zwróć też uwagę na wyrażenie, którego użyłem do zwiększania set /a
polecenia. Do prostych wyrażeń matematycznych użyj += -= *= /=
zamiast (na przykład) set /a a=%a%+1
.
Zbieranie danych wyjściowych polecenia . Aby uzyskać dane wyjściowe polecenia, czasami przydatne może być wyjście do pliku i odczytanie go z pliku, w innym przypadku można użyć pętli for do zebrania danych wyjściowych:
for /f %%a in ('echo test') do set a=%%a
:: Can be shortened to
echo test>f&set/pa=<f
echo test
wyślij stdout do pliku o nazwie f, >f
uruchom nowe polecenie &
i uzyskaj zawartość pliku w zmiennej set/pa=<f
. Oczywiście nie zawsze jest to przydatne. Ale może się zdarzyć, gdy potrzebujesz tylko jednego wiersza wyników.
Dane wyjściowe polecenia . Podczas tłumienia danych wyjściowych poleceń używaj @
przed poleceniami, chyba że musisz pominąć więcej niż 9 poleceń, w takim przypadku użyj @echo off
na początku skryptu. @echo off
ma długość 9 bajtów i dlatego na ogół zaoszczędzi więcej bajtów dzięki dłuższym skryptom.
Polecenia często robią coś więcej niż to, co oczywiste - pomyśl o tym, co robią twoje polecenia. Na przykład; jeśli musisz ustawić zmienną i wywołać echo innej zmiennej, zamiast:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
Możesz użyć polecenia set z /p
przełącznikiem, aby uzyskać dane wyjściowe %a%
.
set a=OUTPUT
echo test>f
set /p b=%a%<f
Całkowicie golfowy ...
set a=OUTPUT&echo test>f&set/pb=%a%<f
Kilka przykładów - Policz sumę wszystkich cyfr - hipoteza Goldbacha .
Wszelkie inne wskazówki są mile widziane - będę je aktualizować, jeśli pomyślę o czymś innym.