challenge 四字熟語パズルの作成

与えられた四字熟語のリストから下のように四角く配置することのできる熟語の組み合わせを探すプログラムを作成してください。

出力例:

無憂無風
礼  林
千  火
万水千山

知行合一
者  筆
不  勾
言語道断

四字熟語は左から右、上から下へ読むものとします。また右上隅の漢字と左下隅の漢字は異なるものでなければいけません。

四字熟語のデータは扱いやすい形(たとえばユニコード文字列のリスト)で与えられていると仮定して構いません。サンプルデータが必要であれば FOR Microsoft IME The四字熟語辞典(データ / 文書作成) にテキスト形式のデータが入っているのでそれを使えると思います。

問題の規模の参考までに、40行程度のPythonスクリプトでこのデータ(重複をのぞいて8312件)を処理してみたところ2.4GHzのCPUで13秒程度かかりました。結果は8133件出力されました。

Posted feedbacks - diff

数が食い違う原因はまだ分からないのですが、とりあえずひとつ明らかなバグが見つかったので修正。結果、少し増えて 12109 件でした。多数派の数にちょっと近づいたか?(^_^;)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@@ -8,7 +8,7 @@
 timeToRun := [
     firstCharDict := yojis
         groupBy: [:each | each first]
-        having: [:group | group size > 1].
+        having: [:group | true].

     pairs := OrderedCollection new.
     yojis do: [:first |
@@ -37,4 +37,4 @@
     out nextPutAll: quartet last; cr; cr].
 out edit.

-^{results size. timeToRun}   "=> #(11712 13835) "
+^{results size. timeToRun}   "=> #(12109 13792) "

Index

Feed

Other

Link

Pathtraq

loading...