レンガ構造を安定させる


8

定義されたレンガと安定性

この質問では、レンガの構造と安定性の定義をレンガの構造と同じですか?

石積みのレンガ[__]表現してみましょう

         .
         .
         .
  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で割り切れる(必要に応じて末尾にスペースがある)完全に長方形のテキストブロックになります。

BRK?構造内のそれぞれは、レンガ([__])または空のスペース(4つのスペース)のいずれかです。

たとえば、1つの可能な(不安定-読み取り)構造は次のとおりです。

[__]    [__]    [__]
  [__]        [__]  
[__][__]    [__]    

構造の安定性は重要です。構造が安定しているのは、そのレンガのすべてのレンガが安定している場合のみです。

個々のレンガが安定する方法は3つあります。

  1. 地面にあるレンガ(レンガの最下列)は安定しています。
  2. すぐ下に2つのレンガがあるレンガは安定しています。

      [__]   <- this brick is stable
    [__][__] <- because these bricks hold it up
    
  3. 同じ側​​にその上と下の両方にレンガがあるレンガは安定しています:

      [__]  [__]
    [__]      [__] <- these middle bricks are stable
      [__]  [__]      because the upper and lower bricks clamp them in
    
    [__]          [__]
      [__]      [__]   <- these middle bricks are NOT stable
        [__]  [__]
    

(はい、私はこれらのルールが物理的に正確でないことを知っています。)

最後の課題は決定する程度であった場合には構造が安定していました。これはそうでないものを安定させることです。

チャレンジ

レンガの配置が不安定になる可能性があるプログラムを作成し、新しいレンガを空のレ​​ンガスペースに追加してすべてを安定させ、結果を印刷します。これは、入力テキストブロックの全体的なサイズを増やすことなく実行されます。

目標は、できるだけ少ないレンガを追加することで構造を安定させるアルゴリズムを作成することです。

このJSFiddleソース)を使用すると、プログラムのテスト中に使用するレンガのランダムな配置を生成できます。(代わりにスニペット積み重ねることができればと思います。)Widthは、ベースレイヤーHeightのレンガの数、レンガレイヤーDensityの数、塗りつぶされたレンガスペースの割合です。

たとえばWidth = 5, Height = 3, Density = 0.6、可能な出力は

....[__]....[__]....
..[__]....[__]......
[__]............[__]

これを4つの新しいレンガで安定させる方法は

....[__]....[__]....
..[__][__][__][__]..
[__][__]....[__][__]

プログラムは、JSFiddleが生成できるブリック構造を安定させることができる必要があります。

  • これには空の文字列が含まれます(これは安定と見なされます)。
  • レンガは常にになります[__]。ピリオド(.)は、明確にするためにのみ使用されています。プログラムでは、空のスペースにピリオドまたはスペースを使用できます。
  • 構造はすでに安定している場合があります。その場合、(印刷する以外に)何もする必要はありません。
  • JSFiddleは常に安定化できる構造を生成します(Width = 1上部のコーナーを避けてブロックすることにより)。これは信頼できます。(上隅以外のすべてを埋めると確実に安定しますが、これは明らかに最適ではありません。)
  • 無効な入力がないと仮定します。好きなように文字列として入力してください。安定化された構造をstdoutなどに印刷します。
  • テキストブロックのサイズは変更しないでください。
  • 既存のレンガを移動または削除することはできません。新しいレンガの配置は、オフセットが1行おきのグリッドパターンに従う必要があります。すべてのレンガは完全に境界内にある必要があります。
  • 既存のブリックをの[XX]代わりに印刷することをお勧めします(必須ではありません)[__]。そうすることで、ソリューションがどのように機能するかを人々にわかりやすく表示できます。

得点

JSFiddleの下部には 8つの事前定義された不安定なレンガ配置があります。(それらを使用して[__]おり.[XX]そして/または代わりに使用していない限り、その方法を維持する必要があります。)ランダムなものもあれば、自分で作成したものもあります。スコアを計算するには、それぞれのプログラムを順番に実行し、それぞれに追加された新しいレンガの数を合計します。

追加した新しいレンガが少ないほど良いです。最もスコアの低い提出物が優先されます。同点の場合は、最も古い回答が優先されます。

問題が発生した場合は、事前定義されたケースをさらにいくつか追加し、それらに基づいて勝者を判断します。

その他の注意事項

  • ブリックグリッドの幅と高さが100未満の場合、プログラムは最新のコンピューターで数分程度実行する必要があります(このようなコンピューターでは最大10分です)。
  • 8つの定義済み構造の出力をハードコードすることはできません。プログラムは、他の取り決めと同様にそれらを処理する必要があります。
  • 出力例または2つ、または共有したい興味深い構造を含めてください。:)
  • この問題は、最小の全域木を見つけることにいくらか関連しています

「Challenge」の下の「stabilized」の例は、指定された基準に従って実際には安定していないことを指摘しておきます。
COTO 2014年

@COTO確かに。修繕。
Calvin's Hobbies 14年

あなたの例では、構造を安定させるために真ん中の下のレンガは必要ありません。
John Dvorak

@JanDvorak:「最適な方法」ではなく、「安定化する方法」が示されているため、技術的にはエラーではありません。しかし、真ん中のレンガを取り除くことは、肉体的な直感がこの問題での私たちの友人ではないという事実を理解するのに役立つ可能性があることに同意します。;)
COTO 2014年

@JanDvorak COTOは正しいです。最適でなくても問題ありませんでしたが、それでも変更しました。
カルバンの趣味

回答:


3

ジャワ島-5,056レンガ

  • 20×20 0.03 - 75
  • 15x81 0.05 - 431
  • 50×50 0.20 - 882
  • 99x99、0.01 - 2567
  • 平野ペデスタル- 269
  • シンプルハウス-129
  • クリスクロスタワー-323
  • 橋の始まり-380

ソースコードはこちらからご覧いただけます

コードは、8つのスコアリング入力のいずれかに対して数ミリ秒で実行されます。特にクロスクロスタワーと99x99のケースでは、いくつかの著しく次善の出力があります。ルーチンを改善する方法についていくつかのアイデアがありますが、それはそのままではかなりかさばるので、今のところそれを放棄します。

出力は、物理学の法則を喜劇的な範囲で虐殺します。:D

いくつかのサンプルを以下に示します。

20x20、0.03出力

................................................................................
..........[XX]..................................................................
........[  ][  ]................................................................
..........[  ]..................................................................
............[  ]................................................................
..........[  ]..................................................................
............[  ]....................[XX]........................................
..........[  ]....................[  ][  ]......................................
....[XX]....[  ]....................[  ]........................................
..[  ][  ][  ][  ]................[  ]..........................................
....[XX]....[  ][XX]................[  ]........................................
..[  ]........[  ]................[XX]..........................................
....[  ]........[  ]............[  ][  ]........................................
..[  ]........[  ]................[  ]..........................................
....[  ]........[  ]............[XX]................................[XX]........
..[  ]........[  ]....[XX]........[  ]................[XX]........[  ][XX][  ]..
....[  ]........[  ][  ][  ]....[  ]....[XX]........[  ][  ]........[  ][  ][XX]
..[  ][  ]....[  ]....[  ]........[XX][  ][  ]........[  ]........[  ]....[  ]..
....[  ]........[  ]....[  ]....[  ]....[  ]............[  ]........[  ]....[  ]
......[XX]....[  ]....[  ]........[  ][  ]............[  ]........[  ]....[  ]..
....[  ]........[  ]....[  ]....[  ]....[  ]....[XX]....[  ]........[  ]....[  ]

シンプルな家の出力

................................................................................
................................................................................
................................................................................
......................................[XX]......................................
....................................[XX][XX]....................................
..................................[XX][  ][XX]..................................
................................[XX][  ][  ][XX]................................
..............................[XX][  ]....[  ][XX]..............................
............................[XX][  ]........[  ][XX]............................
..........................[XX][  ]............[  ][XX]..........................
........................[XX][  ]................[  ][XX]........................
......................[XX][  ]....................[  ][XX]......................
....................[XX][  ]........................[  ][XX]....................
..................[XX][  ]............................[  ][XX]..................
................[XX][  ]................................[  ][XX]................
..............[XX][  ]....................................[  ][XX]..............
............[XX][  ]........................................[  ][XX]............
..........[XX][  ]............................................[  ][XX]..........
........[XX][  ]................................................[  ][XX]........
......[XX][  ]................................................[  ][  ][XX]......
....[XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX]....
......[XX][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ]....[XX]......
....[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]........[XX]....
......[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[XX]......
....[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]........[XX]....
......[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[XX]......
....[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ]........[XX]....
......[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ][  ][  ]....[XX]......
....[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ][  ][  ]........[XX]....
......[XX]....[XX][XX][XX][XX][  ]....[XX][XX][XX][XX][XX][XX]........[XX]......
....[XX]....[  ]....[  ]....[  ]....[  ]....[  ]....[  ][  ]............[XX]....
......[XX]....[XX]....[  ][XX]........[XX]....[  ]....[  ][XX]........[XX]......
....[XX]....[  ]....[  ][  ][  ]....[  ]....[  ]........[  ]............[XX]....
......[XX]....[XX]....[  ][XX]........[XX]....[  ]........[XX]........[XX]......
....[XX]....[  ]........[XX]........[  ]....[  ]........[  ]............[XX]....
......[XX]....[XX]........[XX]........[XX][XX][XX][XX][XX][XX]........[XX]......
....[XX]....[  ]........[  ]........[  ]....[  ][  ][  ][  ]............[XX]....
......[XX]....[XX]........[XX]........[  ]....[  ]....[  ]............[XX]......
....[XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX]....

2

Python、18992

これは最も単純なソリューションであり、可能な限り最悪のスコアです。参考用です。打つもの。上部の2つの角を除くすべての空きスペースをレンガで埋め、安定性を保証します。

s = '''
....[__]....[__]....
..[__]....[__]......
[__]............[__]
'''

def brickify(structure):
    structure = filter(lambda x: x, s.replace('__', 'XX').split('\n'))
    if not structure:
        return '', 0
    if len(structure) > 1 and len(structure) % 2:
        structure[0] = '----' + structure[0][4:-4] + '----'
    added = 0
    offset = False
    for i in range(len(structure)-1,-1,-1):
        line = structure[i]
        if offset:
            line = line[2:-2]
        added += line.count('....')
        line = line.replace('....', '[__]')
        if offset:
            line = '..' + line + '..'
        structure[i] = line
        offset = not offset
    structure[0] = structure[0].replace('----', '....')
    return structure, added

s, a = brickify(s)

#print '\nNew bricks:', a

for line in s:
    print line

使用するには、プログラムの上部にある三重引用符に初期構造をコピーします。

ここでは家で実行され、609個のレンガが追加されています。

..[__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__]..
[__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__]
..[__][__][__][__][__][__][__][__][__][XX][__][__][__][__][__][__][__][__][__]..
[__][__][__][__][__][__][__][__][__][XX][XX][__][__][__][__][__][__][__][__][__]
..[__][__][__][__][__][__][__][__][XX][__][XX][__][__][__][__][__][__][__][__]..
[__][__][__][__][__][__][__][__][XX][__][__][XX][__][__][__][__][__][__][__][__]
..[__][__][__][__][__][__][__][XX][__][__][__][XX][__][__][__][__][__][__][__]..
[__][__][__][__][__][__][__][XX][__][__][__][__][XX][__][__][__][__][__][__][__]
..[__][__][__][__][__][__][XX][__][__][__][__][__][XX][__][__][__][__][__][__]..
[__][__][__][__][__][__][XX][__][__][__][__][__][__][XX][__][__][__][__][__][__]
..[__][__][__][__][__][XX][__][__][__][__][__][__][__][XX][__][__][__][__][__]..
[__][__][__][__][__][XX][__][__][__][__][__][__][__][__][XX][__][__][__][__][__]
..[__][__][__][__][XX][__][__][__][__][__][__][__][__][__][XX][__][__][__][__]..
[__][__][__][__][XX][__][__][__][__][__][__][__][__][__][__][XX][__][__][__][__]
..[__][__][__][XX][__][__][__][__][__][__][__][__][__][__][__][XX][__][__][__]..
[__][__][__][XX][__][__][__][__][__][__][__][__][__][__][__][__][XX][__][__][__]
..[__][__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__][__]..
[__][__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__][__]
..[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]..
[__][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][__]
..[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][XX][XX][XX][XX][__][__][XX][XX][XX][XX][XX][XX][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][XX][__][__][XX][__][__][XX][__][__][__][__][XX][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][XX][__][__][XX][__][__][XX][__][__][__][__][XX][__][__][XX][__]..
[__][XX][__][__][__][__][XX][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][XX][__][__][XX][__][__][XX][XX][XX][XX][XX][XX][__][__][XX][__]..
[__][XX][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][__][XX][__]
..[__][XX][__][XX][__][__][XX][__][__][__][__][__][__][__][__][__][__][XX][__]..
[__][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][XX][__]

事前に定義された8つの構造のそれぞれに追加されるレンガの数は次のとおりです。

374 1107 2041 9627 506 609 1088 3640 (sum to 18992)

行20、レンガ19には左ブラケットがありません。
Golfer9338 2014年

@ golfer9338お知らせありがとうございます。postとjsfiddleで修正されました。
カルバンの趣味

あまりスマートにしないために、一番上の行にレンガを追加する必要がありますか?
Sparr

@Sparrいいえ、必要ありません。しかし、これはデモとして可能な限り最悪のスコアを与えることを目的としています。
Calvin's Hobbies
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.