Go 言語で「基礎プログラミング演習 I 〜100 本ノック上級編」を解いてみる-No.82「パスカルの三角形 ☆」

はじめに

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

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

検証環境

1
2
3
4
5
6
7
8
9
$ 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. 82 パスカルの三角形 ☆

パスカルの三角形とは、1 段目は 1 のみ、2 段目からは段の数だけ数字が並び、両端は 1、その間は左上と右上の値を足した値、として作っていった数字の並びである(Wikipedia「パスカルの三角形」参照)。このパスカルの三角形を 15 段まで計算して表示するプログラムを作成せよ。ただし表示は左詰で値はスペースで区切って表示するのでよい(三角形に並べなくてもよい)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 【実行例】
$ ./knock82
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

回答

knock82.go

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
	"fmt"
)

func main() {
	nums := make([]int, 15)
	nums[0] = 1
	for i := 0; i < len(nums); i++ {
		for j := i; j > 0; j-- {
			nums[j] += nums[j-1]
		}

		for _, n := range nums[0 : i+1] {
			fmt.Printf("%d ", n)
		}
		fmt.Println()
	}
}

実行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ go run knock82.go
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

ひとこと

もう少しシンプルに書ける気もします。

それから、最終列を出力する際にも行末にスペースが出力されています。(ちょっとずるしてしまっているかも)