Go 言語で「基礎プログラミング演習 I 〜100 本ノック中級編」を解いてみる-No.58「棒グラフ」

はじめに

「基礎プログラミング演習 I 〜100 本ノック中級編」を解いてみます。

取り扱う問題は以下のサイトを引用させていただきました。

検証環境

$ uname -moi
x86_64 unknown GNU/Linux

$ head -n 2 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"

$ go version | head -n 1
go version go1.16.3 linux/amd64

問題

No. 58 棒グラフ

0 以上の整数値を 5 つ入力させ、それぞれの値に対して、次の形式でグラフを描くプログラムを作成せよ。
形式:左端に値を表示し、適切に空白を空けて":"を書く(:で揃えるためにタブ\t を使うとよい)。その後ろに値の数だけ*を描くが、5 個おきに空白を1つ入れる。具体例は下記の実行例を参照すること。

# 【実行例、下線部は入力例】
$ ./knock58
input data[0]: 7
input data[1]: 10
input data[2]: 14
input data[3]: 15
input data[4]: 21
7   :***** **
10  :***** *****
14  :***** ***** ****
15  :***** ***** *****
21  :***** ***** ***** ***** *

回答

knock58.go

package main

import (
    "fmt"
    "strconv"
)

func main() {
    nums := make([]int, 5)

    for i := 0; i < len(nums); i++ {
        fmt.Printf("input data[%d]: ", i)
        fmt.Scan(&nums[i])
    }

    for _, n := range nums {
        bar := ""
        for i := 0; i < n; i++ {
            if i%5 == 0 && i > 0 {
                bar += " "
            }
            bar += "*"
        }
        fmt.Println(strconv.Itoa(n) + "\t:" + bar)
    }
}

実行

$ go run knock58.go
input data[0]: 7
input data[1]: 10
input data[2]: 14
input data[3]: 15
input data[4]: 21
7       :***** **
10      :***** *****
14      :***** ***** ****
15      :***** ***** *****
21      :***** ***** ***** ***** *

ひとこと

Java では推奨されない String 型の append 処理、Go 言語ではどうなんでしょうね?

Posted by genzouw