challenge 変形Fizz-Buzz問題

どもraynstardです。
どちらにしようか迷いましたが発想の元ネタがUIさんの投稿からなので
こちらに投稿してみます。
--------------
以下の仕様を満たす文字列を
20行出力するプログラムを作成してください。

1. 1行の出力は「<行番号> ':' <メッセージ>」であること。
2. 行番号が 3の倍数であるとき、メッセージは「Fizz」であること
3. 行番号が 5の倍数であるとき、メッセージは「Buzz」であること
4. 行番号が 3の倍数かつ5の倍数であるとき、メッセージは「FizzBuzz」であること
5. 上記に記した条件以外のメッセージについては「hoge」であること
6. 条件分岐する場合、if文のみが使用でき、
   かつ、論理式が成立した場合の処理のみが記述できます。
#アセンブリなどifがなければif以外でもかまわないです。(意味が同じならば)

というわけでこの問題はFizz-Buzz問題をelseなしならどう書く?という問題です。

出力例:
 1:hoge
 2:hoge
 3:Fizz
 4:hoge
 5:Buzz
 6:Fizz
 7:hoge
 8:hoge
 9:Fizz
10:Buzz
11:hoge
12:Fizz
13:hoge
14:hoge
15:FizzBuzz
16:hoge
17:hoge
18:Fizz
19:hoge
20:Buzz

Posted feedbacks - Bash

練習を兼ねてBashで書いてみました。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
CNT=0
while [ $CNT -lt 20 ]; do
        if [ $(($CNT % 15)) = 0 ]
        then printf "%2s:FizzBuzz\n" $(($CNT+1))
        else
                if [ $(($CNT % 3)) = 0 ]
                then printf "%2s:Fizz\n" $(($CNT+1))
                else
                        if [ $(($CNT % 5)) = 0 ]
                        then printf "%2s:Buzz\n" $(($CNT+1))
                        else
                        printf "%2s:hoge\n" $(($CNT+1))
                        fi
                fi
        fi
        let CNT+=1
done

書き直してみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
CNT=1
while [ $CNT -le 20 ]; do
  if [ $(($CNT % 15)) = 0 ]; then
    printf "%2s:FizzBuzz\n" $CNT
  elif [ $(($CNT % 3)) = 0 ]; then
    printf "%2s:Fizz\n" $CNT
  elif [ $(($CNT % 5)) = 0 ]; then
    printf "%2s:Buzz\n" $CNT
  else
    printf "%2s:hoge\n" $CNT
  fi
  let CNT+=1
done

書き直しました。これでお題を満たしていますでしょうか。。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash
CNT=0
while [ $CNT -lt 20 ]; do
  let CNT+=1
  if [ $(($CNT % 15)) = 0 ]; then
    printf "%2s:FizzBuzz\n" $CNT
    continue
  elif [ $(($CNT % 3)) = 0 ]; then
    printf "%2s:Fizz\n" $CNT
    continue
  elif [ $(($CNT % 5)) = 0 ]; then
    printf "%2s:Buzz\n" $CNT
    continue
  fi
  printf "%2s:hoge\n" $CNT
done

なんか全然Bashじゃないという気も

1
seq -f%2g: 20|sed '3~3s/$/Fizz/;5~5s/$/Buzz/;s/:$/:hoge/'

Index

Feed

Other

Link

Pathtraq

loading...