背景
漠然と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で作りたい!