LoginSignup
6
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-23

むしゃくしゃしてやった

> 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がただちに出ます。
これ、足し算だと逆に出しにくいというのがアレな感じですね。
(要素ごとに演算を適用すればすぐ出る気もしますが)

6
6
2

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
6
6