今回はTwitterで出回っていた
電車の中吊り広告にあった
数学の問題をプログラムで解いて見ました。

解説動画はこちら



さて、問題は・・・

GAKKOUの6文字を並び替えてできる
360個の文字列を辞書式に並べるとき
100番目の文字列を求めよ


ということで
マジで難しい!!!

自分如きでは見当もつきません!!

こんな時はプログラムの力を借りて
解いてみることにしましょう。


Pythonでは文字列の組み合わせを作ってくれる
ライブラリがあるのでこれをimportしておきます。
import itertools

まず、データとして文字列を
リスト型で定義しておきます。
s = ['G','A','K','K','O','U']

次に文字列の組み合わせを作ります。
辞書形式ということですが
ここでは重複排除のできるSET型で
文字列の組み合わせを作ります。

itertools.permutations(データ,個数)
で順列を求めることができます。

第一引数は先ほど作った文字列のリスト
この中から6個の文字を取るので
第二引数は6になります。
res = {a for a in itertools.permutations(s,6)}

これで文字列の組み合わせが出来上がったので
最後に並び替えですね。

並び替えはsorted関数が使えます。
リスト形式にしてインデックス値の99番目が
100番目にくる文字列になるはずです。
''.join(list(sorted(res))[99])

答えは

・・
・・・


受験生にとって一番良い答えですね


Python言語はコードを書く量が少なくて済むのが
利点の一つでもあります。

このコードも1行で出来るようにしてみましょう。
こんな感じになりました。
import itertools;sorted({''.join(r) for r in itertools.permutations('GAKKOU',6)})[99]

はい

他の言語でもだいたいは1行でいけちゃいますね。
どの言語が書く文字数が少ないのか
調べて見たいものですね。

プログラムできる方は
是非考えて見て下さい。


今回はここまでです
それでは。