Hatena::Grouptopcoder

not's memo

 | 

2013-08-12

ぼくのかんがえたさいきょうのにゅうりょくじぇねれーた

13:35 | はてなブックマーク - ぼくのかんがえたさいきょうのにゅうりょくじぇねれーた - not's memo

入力ジェネレータ作りました

https://github.com/not522/generator

PyYAMLを入れないと動かないと思います。

ライセンスはCC0です。

pull request募集中です。

アイディア

フォーマット書いたら自動で入力を生成できないかな。

→YAMLで書いてPythonで生成すればrimeにもそのまま使えるし良さそう。

方針

単純な入力のみ対応。

構文解析とかは対応しない。

使い方

YAMLを書いて「python generator.py ***.yaml」を叩くだけ。

YAMLのフォーマット

例1)空白区切りの[0,10)の整数が10個出力されたファイルを3つ生成するYAML
repeat: 3
filename: test.in
format:
  type: integer
  range: (0,10)
  repeat: 10
  separator: space
  delimiter: newline

これを変換すると次のように3つのファイルができます。

#test0.in 
7 6 3 2 4 3 7 2 4 5
#test1.in 
8 4 2 6 5 2 8 8 7 8
#test2.in 
2 6 8 6 4 0 3 5 8 8

最初のrepeat: 3はファイルを3つ出力することを指定しています。

filename: test.inと指定すると入力ファイル名がtest0.in,test1.in,...となります。

format:には入力の形式を記述します。

type:には型を指定します。integerは整数を表します。

range: (0,10)は[0,10)のランダムな数値であることを表します。

repeat: 10は10個数字を出力することを表します

separator:で区切り文字を指定します。

delimiter:は10個出力したあとの区切りを指定します。

例2)ICPC2013国内予選A
repeat: 4
filename: test.in
format:
  - repeat: 10
    type:
      - type: integer
        range: (2,101)
        name: h
        delimiter: space
      - type: integer
        range: (1,h-1)
        delimiter: newline
  - type: enum
    value:
      - '0 0'
    delimiter: newline

formatの中を配列にすることもできます。

また、typeを入れ子にすることもできます。

整数にnameをつけて他の数値の範囲に使ったり、repeatに指定することができます。

rangeやrepeatには数式を書くこともできます(+-のみ・括弧非対応)。

今後の予定

ドキュメントをちゃんと書く。

いろいろ対応する。

 とりあえずuniqueは対応しないとなぁ。

 下の形式で対応しました。

repeat: 3
filename: test.in
format:
  type: integer
  range: (0,10)
  repeat: 10
  separator: space
  delimiter: newline
  option:
    - unique

 ソートできるようにしました。

- repeat: 3
  filename: asc.in
  format:
    type: integer
    range: (0,10)
    repeat: 10
    separator: space
    delimiter: newline
    option:
      - asc
- repeat: 3
  filename: desc.in
  format:
    type: integer
    range: (0,10)
    repeat: 10
    separator: space
    delimiter: newline
    option:
      - desc

ファイル名がtest0.in,...,test99.inみたいになるのでtest00.in,...,test99.inにする。

サンプルを作る。

注意事項

うまく動かなかったらごめんね

 |