ナンプレの問題をYAMLから読み込めるようにしてみたよ
現在のgithubのhead。
https://github.com/sandmark/libnpsolver/tree/905d13874bf4daad9c70f697a2497e81120fe890
ナンプレって要は二次元配列で平面を表現しているものだから、
例えばYAMLで:
problem01: - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9] - [1,2,3,4,5,6,7,8,9]
みたいに書けるのかなと思ってたけど書けません。
理由はわからないけど、うまいこと読み込んでくれませんでした。*1
というわけで99%強引にYAMLで書けるようにしてみましたが……
結局リポジトリにあるexamples.ymlのように、
ring: - "920000000" - "500870000" - "038091000" - "052930160" - "090000030" - "073064980" - "000410250" - "000053001" - "000000073" parallel: - "500804609" - "001000580" - "690007000" - "804073050" - "005000900" - "060540803" - "000700028" - "087000300" - "106308004"
これはひどい。
文字列の一次元配列から多次元配列に変換してるわけですよ。泥臭ぇ。
文字列にしないと数値データだとみなされてしまうからなんですが、
多分っていうか絶対ナンプレのシリアライズにYAMLは向いてない。
もしくは僕がYAMLのこと知らなさすぎる。
もちろんそれらの問題もあるし、「見た目がナンプレっぽくない」っていうのが最大の問題で、
結局多次元配列のシリアライズで可読性と記述性が高い形式ってなんでしょうね。
Rubyに多次元配列のクラスは無いので、やっぱり強引に変換することになるんだろうけども、
ちょっとこれはないなぁ……と思いませんか。
こんな書き方してまでナンプレを解いてもらいたくないよね。
ということで多次元配列を楽な感じに表現できる形式募集中です。
*1:書けたとしても "," って書くのがしんどいよね。