コマンド: setup¶
概要¶
ある地形から指定したブロックを埋める操作手順をすべて列挙します。
そのとき、探索時に置いても置かなくても良い場所(マージンエリア)を補助的に指定することもできます。
探索結果は HTMLファイル で出力されます。
基本コマンド¶
java -jar sfinder.jar setup --tetfu v115@HhUpxhBeA81hCeA8yhD8AeB8JeAgH --patterns *! --fill i --margin o
詳細¶
java -jar sfinder.jar setup --tetfu v115@9gTpFeTpFeTpFezhPeAgH --fill I --margin O -p *! -c yes
はじめに「必ず埋める場所」「マージンエリア」を指定します。
もしオプションで --fill I --margin O
を指定した場合、次のように解釈されます。
水色のエリア → 探索時に必ず埋める必要がある場所
黄色のエリア → 探索時に置いても置かなくても良い場所(マージンエリア)
グレーのエリア → 既にブロックが固定されたエリア
このとき、下のような結果が得られます。
また同時に、下のような結果も得られます。
このような「穴」が含まれる地形を取り除く場合は --exclude
を設定してください。
--exclude
を設定することで、マージンエリアを含めて地形全体のどこかに「穴」のある解が
除外されます。
もし --exclude
を設定しつつも、「穴」を許容するエリアを指定したい場合は --free
で色を指定し、その色で地形を塗ってください。
次に、下の地形をもとに説明します。
java -jar sfinder.jar setup --tetfu v115@9gQpBewhVpwhCe3hAe2hZpJeAgH --patterns [^T]! --fill I --margin O -c yes
このとき、下のようなT以外のミノを使ってできる地形が列挙されます。
この解にはどちらも「穴」が含まれているため、そのまま --exclude
を設定するとどちらの解も除外されてしまいます。
それを防ぐため、解が除外される前に「ミノを置く」「1ライン全て埋める」などの操作を行うことができます。
詳細は --operate
オプションをご参照ください。
この例では --operate "T-Reverse(2,2)"
で1つめの解を取り出すことができます。
補足¶
入力パターン --patterns
について¶
デフォルトでは --patterns
で入力したミノは「ミノ順」として解釈されます。
このとき、解にはすべてのミノを使用した解が表示されます。 また、ミノ順の関係で組むことができない解は表示されません。
たとえば パターンに IOOI
を指定したとき、2つめのI は O より後に置かれます。
もし、この入力パターンを「ミノの組み合わせ」として解釈したい場合は --combination yes
を設定してください。
たとえば、パターンに IOOI
を指定したとき、置く順番に関わらず I2個・O2個 を使用した解が表示されます。
--combination yes
のときに表示される解は「必ず埋めるエリア --fill
」をカバーする最小限のミノが表示されます。
置くミノの個数を固定したい場合は --n-pieces
を設定してください。
マージンエリアについて¶
--free
--margin
で埋めても埋めなくても良いマージンエリアを指定できます。
ただしこれらの領域は、--fill
を埋める過程で、あくまで補助的な領域として利用される点にご注意ください。
例1)
Tスピンの屋根にあたる部分にマージンエリアが設定されています。
領域の広さ的にはIミノが収まる範囲ですが --fill
に寄与していないため、Tミノのみが解として出力されます。
例2)
こちらの地形も --fill
に直接寄与しないミノがマージンエリアに使われています。
例1と異なる点として、
例1ではマージンエリアがなくても成立しますが、
例2はこれらのミノが足場として使われているため、存在しないと組むことができません。
あくまで、仕様上は --fill
のみが判定対象となっているので、こちらの解も出力されません。
フィールドの指定方法¶
テト譜から入力するとき¶
java -jar sfinder.jar setup -t v115@9gV4whCe1hCeA82hAeB8XpA8KeAgH --fill I --margin O --free S -p [^T]! -op "T-Reverse(7,2)" -e holes
オプションで「必ず埋める場所」「マージンエリア」「フリーエリア」の色を指定してください。
-f
or--fill
→ 探索時に必ず埋める必要がある場所-m
or--margin
→ 探索時に置いても置かなくても良い場所(マージンエリア。exclude
設定時には穴を許容しない)-F
or--free
→ マージンエリア かつ 常に穴を許容するエリア
フィールドファイルから入力するとき¶
入力例
++++++*___
******___X
*******_XX
........X_
java -jar sfinder.jar setup --patterns [^T]! --operate "T-Reverse(7,2)" --exclude holes
通常のフィールドの定義に「必ず埋める場所」「マージンエリア」を指定します。
*
→ 探索時に必ず埋める必要がある場所.
→ 探索時に置いても置かなくても良い場所(マージンエリア。--exclude
設定時には穴を許容しない)+
→ マージンエリア かつ 常に穴を許容するエリア
注釈
フィールドファイル1行目の数字は必須ではありません。
もし数字を記載した場合は --line
オプションとして解釈されます。
出力フォーマット¶
出力フォーマットは、以下の方式から選択できます。 変更したい場合は、オプションから変更できます。
html: シンプルなHTML形式のテト譜リンク
csv: csv形式(詳細は後述)
HTML形式¶
サンプル
2202433332
__________
____X_____
____XXXXX_
XX_XXXXXXX
XX_XXXXXXX
ZIOSLJT [462] (Link: http://fumen.zui.jp/?v115@5gwwGeg0ywFeg0ilQ4AeRpAeh0glBtR4RpAezhBtQ4?JeAgWHAauytCs/1BA)
ZIOSLJT [455] (Link: http://fumen.zui.jp/?v115@8gwwDeg0CexwDeg0ilQ4wwRpAeh0glBtR4RpAezhBt?Q4JeAgWHAauytCs/1BA)
ZIOSLJT [357] (Link: http://fumen.zui.jp/?v115@6gwwFeg0AeywEeg0ilQ4AeRpAeh0glBtR4RpAezhBt?Q4JeAgWHAauytCs/1BA)
2202433332
の数字は、列ごとのブロック数を左から並べたものです。
数字の下の ____X_____〜
は、地形を簡易的に表示したものです。
ここには --fill
をカバーする最低限の地形が表示されます。
地形の下の ミノ順+リンク
は、テト譜へのリンクを表示しています。
もし「--combination
がオフ」 or 「--n-pieces
が設定されている」ときは、すべてのミノを利用したテト譜が表示されます。
したがって「テト譜」と「簡易的な地形表示」が異なる場合があります。ご注意ください。
リンクの後ろの数字 (462, ...) はこの地形を積み込む手順の総数で、入力パターンには依存しません。 手順は同じ種類のミノが複数個あっても、置く場所によってそれぞれ区別されます。 たとえば T3個だけを使う地形 の場合、3!=6 通り となります。
CSV形式¶
地形をキーして、それぞれの地形で使用されるミノとその地形を組む全手順数を出力します。
出力例) setup -p *! --fill i --margin o -t v115@2gWpCeWpDe0hQpxhAe4hAe2hJeAgH --format csv
地形,使用ミノ,手順数
http://fumen.zui.jp/?v115@4gAtHeBtBewwEeAtglQ4xwg0RpAeilR4wwg0RpAezh?Q4h0JeAgWHAKNmFDMuqBA,JSTZLIO,420
各項目は、左から順に以下の通りです。 以下の 例) は、上記の結果を基づいた説明になります。
- テト譜
地形を表すテト譜
- 例)
http://fumen.zui.jp/?v115@4gAtHeBtBewwEeAtglQ4xwg0RpAeilR4wwg0RpAezh?Q4h0JeAgWHAKNmFDMuqBA
- 使用ミノ
その地形で使用するミノの組み合わせ
- 例)
JSTZLIO
JSTZLIOの7ミノを使った地形である
- 手順数
その地形を積み込む手順の総数で、入力パターンには依存しません。
- 手順は同じ種類のミノが複数個あっても、置く場所によってそれぞれ区別されます
たとえば T3個だけを使う地形 の場合、3!=6 通り となります
- 例)
420
その地形を組む手順が 420通り
オプション一覧¶
short |
long |
default |
---|---|---|
|
|
なし |
|
|
1 |
|
|
なし |
|
|
no |
|
|
なし |
|
|
なし |
|
|
なし |
|
|
-1 |
|
|
use |
|
|
softdrop |
|
|
none |
|
|
なし |
|
|
-1 |
|
|
html |
|
|
no |
|
|
output/setup.html |
|
|
output/last_output.txt |
|
|
input/field.txt |
|
|
input/patterns.txt |
-t
, --tetfu
[default: なし]¶
フィールドやオプションなどを指定したテト譜データを指定する。
テト譜で探索条件を指定する場合は --tetfu v115@vhAAgH
のように指定する。
v115のテト譜データにのみ対応。
-p
, --patterns
[default: なし]¶
探索したいミノのパターンを指定する。
パターンを変更したい場合は --pattern *p7
のように指定する。
もし --combination
が設定されていない場合は「ミノ順」として、設定されているときは「ミノの組み合わせ」として解釈されます。
-c
, --combination
[default: no]¶
yes
を指定した場合、入力されたパターンを「ミノ順」ではなく「ミノの組み合わせ」として解釈します。
たとえば パターンに IOOI
を指定したとき、
no
では、2つめのI は O より後に置く必要がありますが、
yes
では、置く順番に関わらず I2個・O2個 を使用した解が表示されます。
-f
, --fill
[default: なし]¶
フィールドをテト譜から入力するとき、必ず埋めるエリアとするブロックの色を指定する。
このオプションで指定した色が、探索時に必ず任意のミノを置く場所と解釈されます。
なお、色は TOI
のように複数個同時に指定できます。
色の指定値は、以下のようになります(大文字・小文字はどちらでも良い)。
I
orcyan
orcy
→ IブロックJ
orblue
orbl
→ JブロックL
ororange
oror
→ LブロックO
oryellow
orye
→ OブロックS
orgreen
orgr
→ SブロックZ
orred
orre
→ ZブロックT
orpurple
orpu
→ Tブロックnone
→ 指定なし(マージンエリアなし)
-m
, --margin
[default: なし]¶
フィールドをテト譜から入力するとき、マージンエリアとするブロックの色を指定する。
このオプションで指定した色が、探索時に置いても置かなくても良い場所と解釈されます。
もし --exclude
オプションが指定されているとき、このエリア内の穴は除外対象となります。
色の指定値は --fill
オプションを参照してください。
-F
, --free
[default: なし]¶
フィールドをテト譜から入力するとき、マージンエリアとするブロックの色を指定する。
このオプションで指定した色が、探索時に置いても置かなくても良い場所と解釈されます。
もし --exclude
オプションが指定されている場合でも、このエリア内の穴は除外対象となりません。
色の指定値は --fill
オプションを参照してください。
-l
, --line
[default: -1]¶
入力するフィールドの最大ライン数(高さ)を指定する。
指定したライン数よりも上にあるブロックは無視されます。
なお -1
を指定した場合は 最も高いフィールドの高さ
が自動的に設定される。
-d
, --drop
[default: softdrop]¶
ミノの操作に制限を加える。
以下から操作方法をひとつ選択する。
softdrop: ソフトドロップ+回転入れ(制限なし)
harddrop: ハードドロップのみ
180: ソフトドロップ+180度回転入れ。180度回転は Nullpomino のStandard Wallkickに準拠します。
t-softdrop: Tミノはソフトドロップ、その他のミノはハードドロップ
-e
, --exclude
[default: none]¶
地形に「穴」が含まれる解を除外します。
除外する対象をひとつ選択してください。
holes: ある空白ブロックに対して、その上にブロックがあれば「穴」として除外する(横に隙間がある場合でも除外されます)
strict-holes: ある空白ブロックに対して、どうやっても到達できない場合は「穴」として除外する(四方がブロックで囲まれているとき)
none: 除外なし
-op
, --operate
[default: なし]¶
除外対象を決定する前に、解の地形に対して操作を行う。
ここでの操作は、あくまで --exclude
の判定 に利用するためであり、解の表示には影響は与えません。
以下の操作を指定することができます。
1ブロックを置く
block(1,2):(x=1,y=2)にブロックを置く
ミノを置く
I-Spawn(1,0):出現時の回転のIミノを、回転軸(x=1,y=0)に置く
T-Reverse(4,2):裏返したTミノを回転軸(x=4,y=2)に置く
L-Right(0,1):右回転Lミノを回転軸(x=0,y=1)に置く
J-Left(9,1):左回転Jミノを回転軸(x=9,y=1)に置く
1ラインすべてを埋める
row(1):2段目をすべてブロックで埋める。この時点でライン消去はされません
ライン消去を行う
clear():ブロックで埋まっているラインを消去する
座標は左下のブロックが (0,0) となります。
ミノの回転軸は SRS / How Guideline SRS Really Works の回転軸に準拠しています。
すべての操作が終わった後、自動的にライン消去(clear())が行われます
注釈
複数個の操作を指定した場合は、先頭の操作から順に行われます。
例)--operate "L-Right(0,1)" "row(1)" "clear()" "block(1,1)"
結果:右回転Lを置く→2段目をすべて埋める→ライン消去を行う→(1,1)にブロックを置く
-np
, --n-pieces
[default: -1]¶
解で使用されるミノの個数を指定する。
もし -1
を指定した場合は自動で設定されます。(--combination
がオンのとき固定なし、オフのときはpatterns・地形に従う)
-s
, --split
[default: no]¶
出力フォーマットがlinkのときに出力されるテト譜で、手順を1ミノずつ分割するか指定する。
ただし yes
で生成されるテト譜はあくまで置き場所を示すものであり、ページ順通りに置くとミノが空中に浮いたり、移動できない場所に置かれることもあります。
yes: 1ページにつき1ミノずつ表示される形で出力
no: すべてのミノが1ページに納まった形で出力
-o
, --output-base
[default: output/setup.html]¶
出力結果を保存するファイルのパスを指定する。
--format csv
の場合に限り、 -
を指定することで、CSVファイルと同じ結果を標準出力します。
-lp
, --log-path
[default: output/last_output.txt]¶
実行時のログを保存するファイルのパスを指定する。
-fp
, --field-path
[default: input/field.txt]¶
フィールドを定義するファイルのパスを指定する。
-pp
, --patterns-path
[default: input/patterns.txt]¶
探索の組み合わせパターンを定義するファイルのパスを指定する。