Rで九九を出力するワンライナー

More than 3 years have passed since last update.


むしゃくしゃしてやった

> as.data.frame(1:9 %*% t(1:9))

V1 V2 V3 V4 V5 V6 V7 V8 V9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81

後悔はしていない。

というのは冗談ですが、data.frame()で同じことをやると、変数名がx1,x2,...,x9になります。

そっちの方が九九の表っぽいですが、おそらくそちらの方が遅いのでas.data.frame()でやっています。

Rに限らず、もっとイイ感じの書き方があれば、ぜひ教えてください。


いわゆる100マス計算と、その答え合わせに

> (((d<-as.data.frame(sample(9,9) %*% t(1:9))) %>% `rownames<-`(d[,1]) -> d)[,sample(9,9)] -> d)*0

V5 V2 V9 V4 V3 V6 V7 V1 V8
5 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0
> d
V5 V2 V9 V4 V3 V6 V7 V1 V8
5 25 10 45 20 15 30 35 5 40
7 35 14 63 28 21 42 49 7 56
2 10 4 18 8 6 12 14 2 16
4 20 8 36 16 12 24 28 4 32
8 40 16 72 32 24 48 56 8 64
9 45 18 81 36 27 54 63 9 72
1 5 2 9 4 3 6 7 1 8
6 30 12 54 24 18 36 42 6 48
3 15 6 27 12 9 18 21 3 24

ワンライナー的には反則かもしれません。。。

0を空白にしたかったのですが、すぐに思いつかず、*0だけであきらめました。

最後の*0を取れば、dがただちに出ます。

これ、足し算だと逆に出しにくいというのがアレな感じですね。

(要素ごとに演算を適用すればすぐ出る気もしますが)