noteに『回文になる単語リスト』を公開しました。
作ったきっかけ
謎解きや、謎作成が好きな妻がほしいって言ったので。
コード類
Denoで書いています。
処理は割と普通のことしか書いてないので、解説はしません。(見返したらObject.keys
でeachすればSetいらんかったなーとか思っています)
ローカルでも動かしたい場合、以下の手順で実行できる気がします。
- Denoをローカルに入れる
- 豚辞書のファイルをDL
buta014.dic
と同じ階層に移動deno run --allow-read=./buta014.dic --allow-write=./*word.txt https://gist.githubusercontent.com/h-kono-it/990c866c869123cecdab1ef923071d3d/raw/901d460af01d62d61c656b62b08d35fcf76d9c67/index.ts
こんな感じでお手軽に他人にも使ってもらえるのもDenoの魅力ですね。(ファイルのread/write権限めっちゃ怖いけど)
Denoの新しいバージョン(1.46~)だとdeno -R=./buta014.dic -W=./*word.txt https://gist.githubusercontent.com/h-kono-it/990c866c869123cecdab1ef923071d3d/raw/901d460af01d62d61c656b62b08d35fcf76d9c67/index.ts
でよくなるみたいですね。
deno run
=>deno
, --allow-read
=>-R
, --allow-write
=>-W
詳細はいつものリリースまとめのブログに書かれていますのでこちら、ご覧ください。
なぜDenoで書いたか
単純にShell Scriptは書きなれていないので、他の言語でさっとコマンドラインツール書ける環境がDenoだったというだけです。それ以上でも以下でもないんですが、それが大事というか、それがめっちゃ便利です。
普段Webサービスのエンジニアリングしているので、TypeScriptには馴染みがあるし、ファイルI/Oもすぐできるし、良い意味で例外に対して厳しくないというのも魅力です。(Javaでも同じような処理は書けるんですが、外部ファイル読むと例外関係を明示的に書かないといけないのが、個人でテキトーに書くには若干面倒)
豚辞書ってなに?
この回文のリストの元になった辞書は「豚辞書」と呼ばれるものです。
ぶたさんという方が公開されている(公開していた)クロスワード用の辞書です。
クロスワード用なので、「ゃゅょ」などが「やゆよ」で書かれています。
この辞書を使ったWebサービスもちょこちょこあり、有名なのは以下のサイトです。
https://shiwehi.com/tools/wordsearch/
「はがきモード」とか面白くないですか?
まとめ
みんなもDenoで便利ツール作ってGistで公開しよう!!!