【BAT】バッチファイルでFizzBuzz ※余剰計算なし
なんとなく、余剰計算しているのが気に入らなかったので、余剰計算なしのFizzBuzzというものを考えてみた。
まとめたものをGistに上げました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
REM dels | |
del Seq.txt Fizz.txt Buzz.txt FizzBuzz.txt | |
del merge.txt merge.pass.txt merge.pass.sort.txt | |
del out.txt | |
REM sequences | |
for /L %%i in (1,1,100) do @echo %%i 4 %%i>>Seq.txt | |
for /L %%i in (3,3,100) do @echo %%i 3 Fizz>>Fizz.txt | |
for /L %%i in (5,5,100) do @echo %%i 2 Buzz>>Buzz.txt | |
for /L %%i in (15,15,100) do @echo %%i 1 FizzBuzz>>FizzBuzz.txt | |
REM merge | |
copy Seq.txt+Fizz.txt+Buzz.txt+FizzBuzz.txt merge.txt /B | |
for /f "usebackq tokens=1,2,3" %%a in ("merge.txt") do @( | |
if %%a lss 10 (echo 00%%a %%b %%c) else if %%a lss 100 (echo 0%%a %%b %%c) else echo %%a %%b %%c) >>merge.pass.txt | |
sort merge.pass.txt /O merge.pass.sort.txt | |
REM uniq | |
for /f "usebackq tokens=1,2,3" %%a in ("merge.pass.sort.txt") do @( | |
call :uniq %%a %%c) >>out.txt | |
exit/b | |
REM subroutine | |
:uniq | |
rem %1 … key | |
rem %2 … data | |
if not "%PREV%"=="%1" ( | |
set PREV=%1 | |
echo %2 | |
) | |
exit /b |
- 今回はワンライナーではありません
- 中間ファイルあり。
- サブルーチンを使用するためにBATファイルにしないといけませんでした(>_<)
- ぜんぶコマンドラインでやりたかったよぅ。。。
まず、1~100の数列を生成
|
|
実行結果
|
|
※わかりにくいかもしれないけど、2列目はあとで第二ソートキーとして使用します。
次に、3nの数列を生成
|
|
実行結果
|
|
次に、5nの数列を生成
|
|
実行結果
|
|
実は15nの数列も作らなきゃだった
|
|
実行結果
|
|
4つのファイルをマージしてソート
|
|
実行結果
|
|
uniqして仕上げ
|
|
実行結果
|
|
uniqコマンドを自作していれば、もう少し簡単に出来ます。
素のBATだけでやると、結構無理がある感じ。