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というふうになっていくからだ。