オープンソースカンファレンス2013の、USP研究所のセッション(https://www.ospn.jp/osc2013-spring/modules/eguide/event.php?eid=55)に触発されまして。
ということで、書いていきます。
※Windows7 64bitの、組み込みのコマンドだけを使用
まず、ただのリストを作成
1
2
|
for /L %n in (1,1,16) do @echo %n
|
実行結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
とりえず3と5で割ってみる。
1
2
|
for /L %n in (1,1,16) do @set /a %n%3 && set/a %n%5 && echo %n
|
実行結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
11 1
22 2
03 3
14 4
20 5
01 6
12 7
23 8
04 9
10 10
21 11
02 12
13 13
24 14
00 15
11 16
|
※SET /a って、並べると変な動きするのね・・・1桁目が %3 で、2桁目が %5 の値になってます。
コマンドプロンプトは、_コマンド中に別のコマンドを書けない_ので、もう一工夫しないとFizzとBuzzを分けられません。
(1文字目を切り出して if して、2文字目を切り出して if して、、、みたいなのは非常に面倒)むー・・・っと考えて、3か5で割り切れる値だけを抽出。
1
2
|
for /L %n in (1,1,16) do @set /a (10-%n%3)/10 && set/a (10-%n%5)/10 && echo %n
|
実行結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
00 1
00 2
10 3
00 4
01 5
10 6
00 7
00 8
10 9
01 10
00 11
10 12
00 13
00 14
11 15
00 16
|
そう、
- 10→Fizz
- 01→Buzz
- 11→FizzBuzz
となっています。
仕上げ。
1
2
|
for /f "usebackq tokens=1,2" %a in (`"for /L %n in (1,1,100) do @set /a (10-%n%3)/10 && set/a (10-%n%5)/10 && echo %n && echo."`) do @(if %a==11 (echo FizzBuzz) else if %a==10 (echo Fizz) else if %a==01 (echo Buzz) else (echo %b))
|
実行結果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
※以下略
|
完成!
コマンドプロンプトだけで頑張った割には、かなりスッキリした形かと。
Gistにも上げておきました。