コマンド: spin

概要

ある地形からTスピンできる置き方を探す

基本コマンド

java -jar sfinder.jar spin --tetfu v115@zgD8FeE8EeF8DeG8CeH8LeAgH --patterns *p7 -ft 4

オプション一覧

short

long

default

-t

--tetfu

なし

-P

--page

1

-p

--patterns

なし

-fb

--fill-bottom

0

-ft

--fill-top

-1

-m

--margin-height

-1

-c

--line

2

-r

--roof

yes

-mr

--max-roof

-1

-s

--split

no

-f

--filter

strict

-o

--output-base

output/spin.html

-fp

--field-path

input/field.txt

-pp

--patterns-path

input/patterns.txt

-lp

--log-path

output/last_output.txt

出力結果

[X] Z-Right L-Right I-Left T-Right [clear=4, hole=1, piece=4]

  • 先頭のマーク
    • O = 実際にTスピンできる

    • X = Tミノ以外は組むことができるが、Tミノが到達できない位置にある

    • - = そのままでは置けないミノを含む手順である (Tミノも含む)

--filter オプションで、このマークにごとに解を制限できます

  • ミノの方向

  • clear = Tスピン以外も含めて消去されたライン数

  • hole = Tスピン後の地形の穴の数(横穴も含む)

  • piece = その解で使われたミノ数

設定値について

このコマンドは、設定値によって探索にかかる時間が大きく変わります。 ここでは、探索時間を調整するための基本的な方針を紹介します。

1. Tスピンをつくる範囲をなるべく狭くする

Spinコマンドでは、-fb-ft の間の段でTスピンをつくります。 この -fb-ft の差が大きかったり、ブロックがないラインを選ぶほど、 つくれるTスピンの数は増えていきます。

それにあわせて実行する時間も増えていくため、 ある程度つくりたいTスピンを予測して、なるべく空間が狭くなるように指定するのをおすすめします。

2. 「マージン」の範囲をなるべく狭くする

Spinコマンドでの「マージン」とは、Tスピンの屋根や回転入れのためのミノを置いても良い範囲のことです。

「Tスピンの屋根や回転入れのための追加するミノ」をみつけるのは難しく、Tスピン自体をみつけるよりも時間がかかります。

そのため、マージンの高さ(-m の値)を小さくしたり、マージンの空間が広くならないようにしたりしてください。

3. 屋根に利用できるミノ数を少なくする

2ではマージンの範囲を狭くしましたが、マージン内に置くミノの最大数(-mr の値)を小さくしても実行時間は短くなります。

たとえば -mr 1 と指定すると、最低限のTスピンの形からさらに1ミノだけ置かれます。 そのため、2ミノ以上のケースを探さないため、その分実行がはやくなります。

※ 同じような効果をもつオプションで、-r no があります。-mr 0 との違いは以下の通りです。

  • -mr 0 : 回転入れするための余計のミノを追加する必要のない解だけが表示される

  • -r no : 探索自体をスキップするので、そのままではミノを入れられない形も表示される

各オプションの関係を表した図

option_001

現バージョンでは未対応の機能

  • 地形を削らないとTスピンできないケース サンプル

  • ミノを順列で指定できるようにする
    • 今後、指定されたミノ順で、実際に組むことができる解のみ表示させたいです。

    • Tミノ以外のミノに屋根が必要なケースは、順列指定でのみ対応させる予定です。 その理由

-t, --tetfu [default: なし]

フィールドやオプションなどを指定したテト譜データを指定する。

テト譜で探索条件を指定する場合は --tetfu v115@vhAAgH のように指定する。

v115のテト譜データにのみ対応。

-P, --page [default: 1]

テト譜でロードするページを指定する。

ページを変更したい場合は --page 31 のように指定する。

-p, --patterns [default: なし]

探索したいミノ順を指定する。

最大で22個のミノまで指定できる。

なお、renコマンドでは複数のミノを指定する記号(*, [])は使用できません。

パターンを変更したい場合は --pattern IOSZLJTIO のように指定します。

-fb, --fill-bottom [default: 0]

揃えるラインの範囲のうち、一番下のラインを指定する。 y座標は、一番下の段を 0 とする。

もし 2 を指定すると、y=2より上のラインを揃える組み合わせを探索する。 (3段目/y=2 は対象になる)

ここで指定する範囲には、Tスピンにならないライン消去(Tミノを含まないライン消去)も含まれる。

-ft, --fill-top [default: -1]

揃えるラインの範囲の高さを指定する。 y座標は、一番下の段を 0 とする。

もし 4 を指定すると、y=4より下のラインを揃える組み合わせを探索する。 (5段目/y=4 は対象にならない)

ここで指定する範囲には、Tスピンにならないライン消去(Tミノを含まないライン消去)も含まれる。

-1 が指定されたときは、自動的に 最も高い位置にあるブロックの高さ+1 に設定される。

-m, --margin-height [default: -1]

ミノを置ける範囲の高さを指定する。 -1 が指定されたときは、自動的に fill-top + 2 が設定される。

もし 4 を指定すると、y=4より下にミノを置く組み合わせを探索する。 (5段目/y=4 にブロックを置かない)

この高さは、Tスピンに必要なブロックや回転入れするための屋根の探索に利用される。

-c, --line [default: 2]

Tスピン時に消すべき最小のライン数を指定する。

2 を指定したとき、T-Spin Double/Triple を探索する。

-r, --roof [default: yes]

このオプションが yes のとき、Tミノの回転入れに必要な屋根の探索を実行する。 no を指定した場合は、屋根の探索をスキップされ、そのままではTミノを入れられない地形も解として表示される。

もし、屋根なしでTミノをそのまま入れられる解が必要であれば -r yes -mr 0 を指定する。

-mr, --max-roof [default: -1]

Tミノの回転入れに必要な屋根の探索で置くことができる最大のミノ数を指定する。 -1 が指定されたとき、指定パターンの中で制限なく屋根を置いて探索する。 そのため、この値が大きいほど実行時間が長くなる。

もし 0 を指定した場合は、屋根が必要ない解が選択される。

-s, --split [default: no]

出力フォーマットがlinkのときに出力されるテト譜で、手順を1ミノずつ分割するか指定する。

ただし yes で生成されるテト譜はあくまで置き場所を示すものであり、ページ順通りに置くとミノが空中に浮いたり、移動できない場所に置かれることもあります。

  • yes: 1ページにつき1ミノずつ表示される形で出力

  • no: すべてのミノが1ページに納まった形で出力

-f, --filter [default: strict]

解の先頭に表示されているマークに従って、表示する解を制限します。

指定できる値は以下の通りです。

  • strict: Tスピンできる解のみを表示します([O] のみに相当)`

  • ignore-t: Tミノ以外は組むことができる解を表示します。Tミノが実際に到達できるかは問いません。ただし、地面に触れている必要はあります([O][X] に相当)`

  • none: 表示する解を制限しません

-o, --output-base [default: output/spin.html]

出力結果を保存するファイルのパスを指定する。

-fp, --field-path [default: input/field.txt]

フィールドを定義するファイルのパスを指定する。

-pp, --patterns-path [default: input/patterns.txt]

探索の組み合わせパターンを定義するファイルのパスを指定する。

-lp, --log-path [default: output/last_output.txt]

実行時のログを保存するファイルのパスを指定する。