標準的な石積みのレンガをとして表現しましょう[__]
(上部が開いているという事実を無視します)。これらのレンガを積み重ねると、レンガの構造では通常のように、他のすべてのレイヤーがレンガの半分だけオフセットされます。
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
したがって、各ブリックには最大で6つの隣接があり、2つのブリックが直接垂直に並ぶことは不可能です。
重要な点は、これらのレンガの配置は迫撃砲ではなく、単に重力によって一緒に保持されることです。したがって、構造内の各ブリックが安定していることが重要です。そうでなければ、構造全体が不安定になります。
個々のブリックが安定する可能性がある3つの方法があります。
- 地面のレンガ(レンガの一番下のライン)は安定しています。
直下に2つのブリックがあるブリックは安定しています:
[__] <- this brick is stable [__][__] <- because these bricks hold it up
同じ側に上下にレンガがあるレンガはすべて安定しています。
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
これらのルールから、たとえば、配置を見ることができます
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
右上のブリックが不安定であるため、不安定です。
レンガ構造は、すべてのレンガが安定している場合にのみ安定します。
チャレンジ
あなたの仕事は、レンガ構造の文字列を取り込んで、構造が安定している場合は真実の値を返し、不安定な場合は偽の値を返す関数を作成することです。(真実/虚偽の定義)
入力文字列は任意に大きくすることができますが、レンガのない領域を埋めるスペースを持つ、常に長方形の文字グリッドです。文字グリッドの幅は4で割り切れますが、高さは奇数でも偶数でもかまいません。
ブリックグリッドは常に、左下のブリックの位置の右上に延びています。
.
.
.
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK? . . .
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
構造に応じて、それぞれBRK?
レンガ([__]
)または空のスペース(4スペース)を表します。
キャラクターグリッドが長方形になるように、半レンガの空洞にはスペースが充填されていることに注意してください。
得点
ノート
- 必要に応じ
.
て、空のスペース文字としてスペースの代わりに使用できます。 - 空の文字列は安定していると見なされます。
- 言語に関数がない場合は、名前付き文字列変数を入力として使用し、結果を別の変数に割り当てることができます。
- 言語に文字列がない場合は、入力に適していると思われることを何でも実行できます。
テストケース
空行で区切られたさまざまなテストケース。明確.
にするために、空のスペースにはスペースの代わりに使用されます。
安定:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
不安定:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__]....
......[__][__]..
....[__][__]....
..[__][__]......
[__][__]........
..[__]..........
(これらの線を精神的に積み重ねる必要があります。ポイントは、ルールが重心が地面との接触点からはるかにオフセットしている構造を許可するという点です。これを避けるためにそれらを締めることが可能です、物理エンジンを必要とせずに、あなたがそれを感じた場合。)