経緯
こんなツイートを見つけました。
常用漢字が2136字なので、2文字の組み合わせは約456万通り、1秒に2つずつ漏洩させていけば約27日、まだ元号の発表までに間に合う、今すぐやれ
— twinrail (@twinrail) 2019年2月26日
なるほどー
じゃあ漏えいさせるスクリプトを組むかー
スクリプト作成
というわけで早速スクリプトを作っていきましょう。
使用言語は最近勉強しているPython。
というか、Pythonの勉強のためにこのネタを拾いました。
準備
このサイトから常用漢字のリストを拾ってきます。
そして、それを以下のようなcsvファイルに整形します。
整形するのはExcelで・・・
え、そこもスクリプト内でやれよって?何も言い返せんわ
$cat joyo.csv
亜,ア
哀,アイ、あわ-れ、あわ-れむ
挨,アイ
愛,アイ
曖,アイ
悪,アク、オ、わる-い
握,アク、にぎ-る
圧,アツ
扱,あつか-う
宛,あ-てる
・・・
実際に書いてみる
# coding:utf-8
import csv
# 常用漢字のcsvファイルを引数にする
joyofile = sys.argv[1]
# listfileを2次元配列に挿入
# joyolist[n][n]で中の値を取得可能
with open(joyofile) as fp: joyolist = list(csv.reader(fp))
# 繰り返し制御用の変数
i = 0
j = 0
# 2重ネストの繰り返し
while i < len(joyolist):
j = 0
while j < len(joyolist):
# ここで出力
print(joyolist[i][0]+joyolist[j][0])
j += 1
i += 1
というわけで2次元配列+whileを2重ネストして完成。
これが一番簡単だと思います。
Pythonはforの扱い方が他の言語とちょっと違うっぽいのでwhileを使いました。
forはやっぱり
for (int i = 0; i++; i < num){}
って感じで書かせてほしいです。
出力結果
$ python gengo.py joyo.csv
亜亜
亜哀
亜挨
亜愛
亜曖
亜悪
亜握
亜圧
亜扱
亜宛
亜嵐
亜安
亜案
亜暗
亜以
亜衣
亜位
亜囲
亜医
亜依
...
問題
完成!
と言いたいところですが、問題が山積みです。
・頭の読みが「T」「S」「H」の音で始まるものを除く
大正、昭和、平成の読みとかぶってしまうと、アルファベット1文字で表現するとかぶってしまいます。
ので、これらの読み方で始まるものは除かないといけないのでは?
・俗語を除く
例えば、「殺」とか「淫」とかいう文字は俗用されるため元号には不適切と考えられています。
ただ、俗語って何かしら定義されているわけでもないし、リストなんかないから難しいかも・・・
・今まで登場した元号を除く
「平成」とか「大正」とかは今までに使われたことがあるため、もう一度使われることはありません。
ので、これも除かないといけませんね。
これらは気が向いたらチャレンジしようと思います。
あとがき
というわけで一発ネタでした。
プログラミングの練習の題材としてはかなり優秀な問題かもしれませんね。
教員の方は授業等で使ってみてはいかがでしょうか。
追記(4/1)
新年号「令和」が発表されましたね。
もちろんこのスクリプトにて予想できておりましたよ!!
(略)
令論
令和
令話
(略)
まあ、だから何なんだって話ですけど・・・
コメント