Windows Batch(CMD)は、おそらくコードゴルフに最適な言語ではありません。
改行文字を避けてください。文字とは対照的に、バイト単位の最短コードを探している場合は、不要なキャリッジリターン(改行文字= 2バイト)をすべて削除する必要があります。&
操作を使用してこれを行うことができ、コマンドごとに1バイトをトリミングします。
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: "
同じパーサールールがすべてのコマンドに適用されるわけではないことに注意してください。たとえば、forループにはスペースが必要です。set, string, or command
(括弧内にあるもの)とwordの間を除き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、というファイルにstdoutを送信し>f
、新しいコマンド&
を開始して、変数のファイルの内容を取得しますset/pa=<f
。明らかに、これは常に役立つとは限りません。ただし、必要なのは1行の出力だけである場合もあります。
コマンド出力。コマンド出力を抑制するとき@
は、コマンドの前に使用します。ただし、9個を超えるコマンドを抑制する必要がある場合@echo off
は、スクリプトの先頭で使用してください。@echo off
は9バイトの長さであるため、通常は長いスクリプトでより多くのバイトを節約できます。
コマンドは、単に明らかなこと以上のことを行うことがよくあります。コマンドが何をしているかを考えてください。例えば; 変数を設定し、別の変数をエコーする必要がある場合:
set a=OUTPUT
echo %a%
echo test>f
set /p b=<f
/p
スイッチでsetコマンドを使用して出力%a%
できます。
set a=OUTPUT
echo test>f
set /p b=%a%<f
完全にゴルフ...
set a=OUTPUT&echo test>f&set/pb=%a%<f
expamplesのカップル- すべての数字の合計を数える - ゴールドバッハの推測を。
他のヒントはありがたいです-他に何か考えたらこれを更新し続けます。