今更,GoでFizzBuzzしてから,3の付く世界でアホになる


前置き

これはNISE (南山大学 青山研究室) Advent Calendar 2019の13日目の記事です.

昨日は,後輩の@RomuskaPaloUrLaputaがpythonのデータプロットについて書いてくれました.いや,まさかの解決策がすぐにコメントされるのはちょっと面白いw

今回は,結構今更感あるなーとか,既知感満載とかいうコメントを見なかったことにして,これから就活とかでコーディングテストがあるときの参考になればと思います.

とりあえず,FizzBuzz書いて

こんな風に面接官に言われ,自分の後ろにあるホワイトボートに立たされたあなた.

言語はなんでもいいという

さて,どんな風に書きますか??

want to do

  • とりあえず,1~10000くらいまで
  • 3の倍数ではFizz
  • 5の倍数ではbuzz
  • 15の倍数ではFizzBuzz

とまあ,わざわざ書かなくてもって感じですよねw

実装

Goで今回は実装しました.
そのコードは以下になります!

FizzBuzz.go
package main

import (
    "fmt"
)

func main() {
    i := 1

    for i < 10001 {
        if i%15 == 0 {
            fmt.Println("FizzBuzz")
        } else if i%3 == 0 {
            fmt.Println("Fiz")
        } else if i%5 == 0 {
            fmt.Println("Buzz")
        } else {
            fmt.Println(i)
        }
        i++
    }

}

いや,こんなの誰だって,解けるわ!って普通に言われそうです.

実装結果は,こんな感じ

では,ここからちょっと改良していきます

とりあえず,こちらが入力した数値までFizzbuzzしてよとする場合は.

unlimitfizzbuzz.go
package main

import (
    "fmt"
)

func main() {

    fmt.Print("いつまでFizzBuzzをやらせるんだね!?: ")
    var input int
    fmt.Scanf("%d", &input)

    for i := 1; i <= input; i++ {
        fizzbuzz(i)
    }
}
func fizzbuzz(i int) {
    if i%15 == 0 {
        fmt.Println("FizzBuzz")
    } else if i%3 == 0 {
        fmt.Println("Fiz")
    } else if i%5 == 0 {
        fmt.Println("Buzz")
    } else {
        fmt.Println(i)
    }
}

はい,こんな感じ

実行結果もそんな変わらず,

こんな感じかな?

まあ,大したことをしていない

んじゃあ,あの昔の芸人さんみたいに3の付く数字で,阿呆になってよ

と面接官が言ってきた

ちょっとジェネレーションギャップで,エン○の神様とか知らないとか,世界のナ○アツとか知らないとかいうことが考えられるので,
やりたいことを書いておく

want to do

  • とりあえず,1~10000くらいまで
  • 3の倍数と3の付く数字で,アホになる

実装

あー,PHPはstrposとか,Pythonはfindとかでいいんですけど,Goではそれはないんで普通に関数を定義します.

nabeatsu.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    fmt.Print("いつまでFizzBuzzをやらせるんだね!?: ")
    var input int
    fmt.Scanf("%d", &input)

    for i := 1; i <= input; i++ {
        nabeatsu(i)
    }
}

func is_aho(i int) bool {
    var strInt = strconv.Itoa(i)
    for k := 0; k < len([]rune(strInt)); k++ {
        if '3' == strInt[k] {
            return true
        }
    }
    return false
}

func nabeatsu(i int) {
    sanbai := "3の倍数"
    santsuku := "3野付く数字"
    if is_aho(i) && i%3 == 0 {
        fmt.Println(i, sanbai+" "+santsuku)
    } else if is_aho(i) {
        fmt.Println(i, santsuku)
    } else if i%3 == 0 {
        fmt.Println(i, sanbai)
    } else {
        fmt.Println(i)
    }
}

出力したい言葉は各自で選んでください.

この出力結果は

まとめ

結構,簡単にどの言語でも実装することが可能です.基本に帰りたい方はぜひ