5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Goで世界のナベアツになるFizzBuzzをつくってみた

Last updated at Posted at 2019-12-14

背景

漠然とGoの勉強をしたいなと思い、Goのチュートリアルを眺めていたが、突然の睡魔が襲ってきた。
そこで、Goの基本的な機能だけを確認して、何か動くものを作って見ようと思い実装へ。

言語習得チュートリアルといえばFizzBuzz!!
と思ったが、それではつまらないなということで、FizzBuzzに応用をこらしたものは何か・・・と考えること約1分。
「世界のナベアツ」のネタが浮かび、実装してみることに。

世界のナベアツとは?

  • 3の倍数と3が付く数字の時だけあほになる人
    • 個人的な感想として、初めて見た時は笑いが止まらなかった
    • 久しぶりにYOUTUBEとかで動画を見ると面白いww
  • 少し調べてみると、どうやら落語家(桂三度(Wikipedia))に転身したらしい

つまり・・

3の倍数と3が付く数字を検出してみた、ただそれだけの話である。

実装

簡単に書くことができた。

fizzbuzz.go
package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    var input string
    fmt.Print("FizzBuzzの繰り返し回数は?")
    fmt.Scan(&input)

    if isPositiveInteger(input) {
        calc(input)
    } else {
        fmt.Println("自然数を入力してください")
    }
}

// 処理部分
func calc(input string) {
    var intInput int
    intInput, _ = strconv.Atoi(input)

    for i := 1; i <= intInput; i++ {
        var stringI string = strconv.Itoa(i)

        if i%3 == 0 && isHavingThree(stringI) {
            fmt.Println(stringI + ": 3の倍数、3の付く数字")
        } else if i%3 == 0 {
            fmt.Println(stringI + ": 3の倍数")
        } else if isHavingThree(stringI) {
            fmt.Println(stringI + ": 3の付く数字")
        } else {
            fmt.Println(stringI + ":")
        }
    }
}

// 入力値の自然数チェック
func isPositiveInteger(input string) bool {
    var checkInput int
    checkInput, _ = strconv.Atoi(input)
    if checkInput < 1 {
        return false
    }
    return true
}

// 3が付く数字かのチェック
func isHavingThree(stringI string) bool {
    return strings.Contains(stringI, "3")
}

出力結果

FizzBuzzの繰り返し回数は?40
1:
2:
3: 3の倍数、3の付く数字
4:
5:
6: 3の倍数
7:
8:
9: 3の倍数
10:
11:
12: 3の倍数
13: 3の付く数字
14:
15: 3の倍数
16:
17:
18: 3の倍数
19:
20:
21: 3の倍数
22:
23: 3の付く数字
24: 3の倍数
25:
26:
27: 3の倍数
28:
29:
30: 3の倍数、3の付く数字
31: 3の付く数字
32: 3の付く数字
33: 3の倍数、3の付く数字
34: 3の付く数字
35: 3の付く数字
36: 3の倍数、3の付く数字
37: 3の付く数字
38: 3の付く数字
39: 3の倍数、3の付く数字
40:

実装してみての学び

  • Goの基本的な型変換
    • 数値 (int) → 文字列 (string):strconv.Itoa(123) // -> "123"
    • 文字列 (String) → 数値 (Int):strconv.Atoi("123") // -> 123
  • Int型でない値(例えばString型)をInt型に変換してもエラーにならず、Int型の0が返る
    • strconv.Atoi("abc") // -> 0
  • 文字列中に指定文字列が含まれているかの確認方法
    • strings.Contains("123", "3") // -> true
  • Goのビルド方法、簡易走行方法
    • ビルド -> 実行:go build fizzbuzz.go -> ./fizzbuzz
    • 簡易実行:go run fizzbuzz.go

おわりに

シンプルかつ簡単に実装できて、これがGoの力かと実感。
もっと面白い物をGoで作りたい!

参考

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?