順列

a、b、c、d、eを並び替えて、その文字列すべて列挙せよ。

これをノートするのは骨が折れる。書きまちがえるのも当然だ。

ノートするしか方法がないとき、それは人にしかできないと思ってしまう。

でも、ちがう方法が出てくると、それと比べられるので、ひとは、この手のことが案外苦手だということに思いが至るわけネ。

自動運転も同様だとおもうよ。自動運転が普通になってくると、人は案外運転が苦手だったのだ、という思いに至るでしょう。

で、a、b、c、d、eの並び替え、のハナシである。

これをJavaScriptでやろうとすると、じぶんでプログラムを書かなきゃならない。

Pythonなら、ライブラリーが用意されている。

import itertools as it
seq=(‘a’,’b’,’c’,’d’,’e’)
list(it.permutations(seq))

[(‘a’, ‘b’, ‘c’, ‘d’, ‘e’),
(‘a’, ‘b’, ‘c’, ‘e’, ‘d’),
(‘a’, ‘b’, ‘d’, ‘c’, ‘e’),
(‘a’, ‘b’, ‘d’, ‘e’, ‘c’),
(‘a’, ‘b’, ‘e’, ‘c’, ‘d’),
(‘a’, ‘b’, ‘e’, ‘d’, ‘c’),
(‘a’, ‘c’, ‘b’, ‘d’, ‘e’),
(‘a’, ‘c’, ‘b’, ‘e’, ‘d’),
(‘a’, ‘c’, ‘d’, ‘b’, ‘e’),
(‘a’, ‘c’, ‘d’, ‘e’, ‘b’),
(‘a’, ‘c’, ‘e’, ‘b’, ‘d’),
(‘a’, ‘c’, ‘e’, ‘d’, ‘b’),
(‘a’, ‘d’, ‘b’, ‘c’, ‘e’),
(‘a’, ‘d’, ‘b’, ‘e’, ‘c’),
(‘a’, ‘d’, ‘c’, ‘b’, ‘e’),
(‘a’, ‘d’, ‘c’, ‘e’, ‘b’),
(‘a’, ‘d’, ‘e’, ‘b’, ‘c’),
(‘a’, ‘d’, ‘e’, ‘c’, ‘b’),
(‘a’, ‘e’, ‘b’, ‘c’, ‘d’),
(‘a’, ‘e’, ‘b’, ‘d’, ‘c’),
(‘a’, ‘e’, ‘c’, ‘b’, ‘d’),
(‘a’, ‘e’, ‘c’, ‘d’, ‘b’),
(‘a’, ‘e’, ‘d’, ‘b’, ‘c’),
(‘a’, ‘e’, ‘d’, ‘c’, ‘b’),
(‘b’, ‘a’, ‘c’, ‘d’, ‘e’),
(‘b’, ‘a’, ‘c’, ‘e’, ‘d’),
(‘b’, ‘a’, ‘d’, ‘c’, ‘e’),
(‘b’, ‘a’, ‘d’, ‘e’, ‘c’),
(‘b’, ‘a’, ‘e’, ‘c’, ‘d’),
(‘b’, ‘a’, ‘e’, ‘d’, ‘c’),
(‘b’, ‘c’, ‘a’, ‘d’, ‘e’),
(‘b’, ‘c’, ‘a’, ‘e’, ‘d’),
(‘b’, ‘c’, ‘d’, ‘a’, ‘e’),
(‘b’, ‘c’, ‘d’, ‘e’, ‘a’),
(‘b’, ‘c’, ‘e’, ‘a’, ‘d’),
(‘b’, ‘c’, ‘e’, ‘d’, ‘a’),
(‘b’, ‘d’, ‘a’, ‘c’, ‘e’),
(‘b’, ‘d’, ‘a’, ‘e’, ‘c’),
(‘b’, ‘d’, ‘c’, ‘a’, ‘e’),
(‘b’, ‘d’, ‘c’, ‘e’, ‘a’),
(‘b’, ‘d’, ‘e’, ‘a’, ‘c’),
(‘b’, ‘d’, ‘e’, ‘c’, ‘a’),
(‘b’, ‘e’, ‘a’, ‘c’, ‘d’),
(‘b’, ‘e’, ‘a’, ‘d’, ‘c’),
(‘b’, ‘e’, ‘c’, ‘a’, ‘d’),
(‘b’, ‘e’, ‘c’, ‘d’, ‘a’),
(‘b’, ‘e’, ‘d’, ‘a’, ‘c’),
(‘b’, ‘e’, ‘d’, ‘c’, ‘a’),
(‘c’, ‘a’, ‘b’, ‘d’, ‘e’),
(‘c’, ‘a’, ‘b’, ‘e’, ‘d’),
(‘c’, ‘a’, ‘d’, ‘b’, ‘e’),
(‘c’, ‘a’, ‘d’, ‘e’, ‘b’),
(‘c’, ‘a’, ‘e’, ‘b’, ‘d’),
(‘c’, ‘a’, ‘e’, ‘d’, ‘b’),
(‘c’, ‘b’, ‘a’, ‘d’, ‘e’),
(‘c’, ‘b’, ‘a’, ‘e’, ‘d’),
(‘c’, ‘b’, ‘d’, ‘a’, ‘e’),
(‘c’, ‘b’, ‘d’, ‘e’, ‘a’),
(‘c’, ‘b’, ‘e’, ‘a’, ‘d’),
(‘c’, ‘b’, ‘e’, ‘d’, ‘a’),
(‘c’, ‘d’, ‘a’, ‘b’, ‘e’),
(‘c’, ‘d’, ‘a’, ‘e’, ‘b’),
(‘c’, ‘d’, ‘b’, ‘a’, ‘e’),
(‘c’, ‘d’, ‘b’, ‘e’, ‘a’),
(‘c’, ‘d’, ‘e’, ‘a’, ‘b’),
(‘c’, ‘d’, ‘e’, ‘b’, ‘a’),
(‘c’, ‘e’, ‘a’, ‘b’, ‘d’),
(‘c’, ‘e’, ‘a’, ‘d’, ‘b’),
(‘c’, ‘e’, ‘b’, ‘a’, ‘d’),
(‘c’, ‘e’, ‘b’, ‘d’, ‘a’),
(‘c’, ‘e’, ‘d’, ‘a’, ‘b’),
(‘c’, ‘e’, ‘d’, ‘b’, ‘a’),
(‘d’, ‘a’, ‘b’, ‘c’, ‘e’),
(‘d’, ‘a’, ‘b’, ‘e’, ‘c’),
(‘d’, ‘a’, ‘c’, ‘b’, ‘e’),
(‘d’, ‘a’, ‘c’, ‘e’, ‘b’),
(‘d’, ‘a’, ‘e’, ‘b’, ‘c’),
(‘d’, ‘a’, ‘e’, ‘c’, ‘b’),
(‘d’, ‘b’, ‘a’, ‘c’, ‘e’),
(‘d’, ‘b’, ‘a’, ‘e’, ‘c’),
(‘d’, ‘b’, ‘c’, ‘a’, ‘e’),
(‘d’, ‘b’, ‘c’, ‘e’, ‘a’),
(‘d’, ‘b’, ‘e’, ‘a’, ‘c’),
(‘d’, ‘b’, ‘e’, ‘c’, ‘a’),
(‘d’, ‘c’, ‘a’, ‘b’, ‘e’),
(‘d’, ‘c’, ‘a’, ‘e’, ‘b’),
(‘d’, ‘c’, ‘b’, ‘a’, ‘e’),
(‘d’, ‘c’, ‘b’, ‘e’, ‘a’),
(‘d’, ‘c’, ‘e’, ‘a’, ‘b’),
(‘d’, ‘c’, ‘e’, ‘b’, ‘a’),
(‘d’, ‘e’, ‘a’, ‘b’, ‘c’),
(‘d’, ‘e’, ‘a’, ‘c’, ‘b’),
(‘d’, ‘e’, ‘b’, ‘a’, ‘c’),
(‘d’, ‘e’, ‘b’, ‘c’, ‘a’),
(‘d’, ‘e’, ‘c’, ‘a’, ‘b’),
(‘d’, ‘e’, ‘c’, ‘b’, ‘a’),
(‘e’, ‘a’, ‘b’, ‘c’, ‘d’),
(‘e’, ‘a’, ‘b’, ‘d’, ‘c’),
(‘e’, ‘a’, ‘c’, ‘b’, ‘d’),
(‘e’, ‘a’, ‘c’, ‘d’, ‘b’),
(‘e’, ‘a’, ‘d’, ‘b’, ‘c’),
(‘e’, ‘a’, ‘d’, ‘c’, ‘b’),
(‘e’, ‘b’, ‘a’, ‘c’, ‘d’),
(‘e’, ‘b’, ‘a’, ‘d’, ‘c’),
(‘e’, ‘b’, ‘c’, ‘a’, ‘d’),
(‘e’, ‘b’, ‘c’, ‘d’, ‘a’),
(‘e’, ‘b’, ‘d’, ‘a’, ‘c’),
(‘e’, ‘b’, ‘d’, ‘c’, ‘a’),
(‘e’, ‘c’, ‘a’, ‘b’, ‘d’),
(‘e’, ‘c’, ‘a’, ‘d’, ‘b’),
(‘e’, ‘c’, ‘b’, ‘a’, ‘d’),
(‘e’, ‘c’, ‘b’, ‘d’, ‘a’),
(‘e’, ‘c’, ‘d’, ‘a’, ‘b’),
(‘e’, ‘c’, ‘d’, ‘b’, ‘a’),
(‘e’, ‘d’, ‘a’, ‘b’, ‘c’),
(‘e’, ‘d’, ‘a’, ‘c’, ‘b’),
(‘e’, ‘d’, ‘b’, ‘a’, ‘c’),
(‘e’, ‘d’, ‘b’, ‘c’, ‘a’),
(‘e’, ‘d’, ‘c’, ‘a’, ‘b’),
(‘e’, ‘d’, ‘c’, ‘b’, ‘a’)]

お、これ書き出すの大変だろー。
やってみて、あらためておもったぜ。

何種類あるのか数えるさえ、たいへん、

なので、以下のコマンドを打ってみる。
len(list(it.permutations(seq)))

120

120もあるのかぁー

ただし、いくつあるのか、数だけ知りたのなら、
5✕4✕3✕2✕1=120で、いけたりする。
こちらは、いちいちパソコンを立ち上げなくても、筆記用具だけで出来てしまう。

なぜ、そうなるのか。
こういうとき、プログラミングの活用は、とても重宝する。

出力した文字列をチェックしてみる。

さいしょは、a,b,c,d,eの5文字が選べる。次の、たとえばaの次は(すでにaを選んでしまっている関係上)b、c,d,eの4文字しか選べない、次はc,d,eの3文字..d,eの2文字..eというふうになっていくからだ。

気づいたことを、お気軽に。
公開まで、やや時間がかかりまーす!