mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

bash - シェルスクリプトで FizzBuzz!

[ サーバ構築 ] [ Linux, bash, シェル ]

こんばんは。

シェルスクリプト bash で FizzBuzz を出力することを試行してみました。
ふと思い付いて試してみた次第です。

以下、備忘録です。

0. 前提条件

  • Linux Mint 14 (64bit) での作業・動作確認を想定。
  • bash 4.2.37 での作業・動作確認を想定。

1. シェルスクリプト作成

FizzBuzz の基本的なアルゴリズムに則って単純にループして処理を行なうロジックは言わずもがななので、再帰的な処理を行うロジックとしてみた。

fizzbuzz_1.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

function fizzbuzz() {
    if [ $1 -gt 1 ] ; then
        fizzbuzz $(($1 - 1))
    fi
    if [ $(($1 % (3 * 5))) -eq 0 ] ; then
        echo FizzBuzz
    elif [ $(($1 % 3)) -eq 0 ] ; then
        echo Fizz
    elif [ $(($1 % 5)) -eq 0 ] ; then
        echo Buzz
    else
        echo $1
    fi
    i=$((i + 1))
}

fizzbuzz 100

もしくは、少し記法を変えて以下のように。

fizzbuzz_2.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

function fizzbuzz() {
    exit
    if (( $1 > 1 )) ; then
        fizzbuzz `expr $1 - 1`
    fi
    if (( $1 % (3 * 5) == 0 )) ; then
        echo FizzBuzz
    elif (( $1 % 3 == 0 )) ; then
        echo Fizz
    elif (( $1 % 5 == 0 )) ; then
        echo Buzz
    else
        echo $1
    fi
    ((i++))
}

fizzbuzz 100

2. シェルスクリプト実行

作成したシェルスクリプトを以下のように実行してみる。

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
$ ./fizzbuzz_1.sh
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
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

fizzbuzz_2.sh も同じ結果となる。


FizzBuzz 自体は、各種プログラミング言語でよくやること(プログラマーの基礎中の基礎)で、いかに短いコーディングができるかを競い合ったりもします。

今回は、よくあるプログラミン言語ではなくシェルスクリプトでもできるかどうか、思い立って試してみた次第です。

以上。

Comments