それらの羊をキャッチ!


16

あなたは農民であり、羊の群れが逃げ出した!大野!

それらを収容するフェンスを構築することにより、それらの羊を切り上げます。予算上の農家として、可能な限り最小のフェンスを使用したいと考えています。幸いなことに、彼らは世界で最も賢い羊ではなく、逃げた後も気にしないでください。

仕事

座標のリストを指定して、羊を収容するのに必要なフェンスセグメントの最小量を出力します。

ルール

  • 羊が歩き回ることができない場合(フェンスに穴がない場合)は収容されます。
  • フェンスの1つのブロックにすべての羊を入れる必要はありません-互いに独立した複数のフェンスで囲まれたエリアが存在する可能性があります。
  • フェンスセグメントは基本方向に向けられています。
  • 各座標タプルは単一の羊を表します。
  • 入力は正の整数ペアx>0y>0でなければなりませんが、言語に合わせて適切にフォーマットできます。
    • すなわち:{{1,1},{2,1},{3,7}, .. }または[1,2],[2,1],[3,7], ..
  • フェンスで囲まれたエリア内の空きスペースは問題ありません。
  • 座標が特定の順序で入力されていると想定することはできません。

たとえば、1頭の羊には4フェンスセグメントを完全に収容する必要があります。

テストケース

[1,1]
4

[1,1],[1,2],[2,2]
8

[2,1],[3,1],[2,3],[1,1],[1,3],[3,2],[1,2],[3,3]
12

[1,1],[1,2],[2,2],[3,7],[4,9],[4,10],[4,11],[5,10]
22

[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]
36

[1,1],[2,2],[3,3],[4,4],[6,6],[7,7],[8,8],[9,9]
32

[2,1],[8,3],[8,4]
10

ノート

  • 入力座標が有効であると想定できます。
  • アルゴリズムは、合理的に大きな整数座標(言語の最大サポート値まで)に対して理論的に機能するはずです。
  • プログラムまたは機能の完全な答えは大丈夫です。

これはなので、バイト単位の最短回答が勝ちです!


入力はx座標のリストの後にy座標のリストが続くことができますか?例{1,2,3,4},{5,6,7,8} -> {1,5},{2,6},{3,7},{4,8}
パベル

@Phoenixいいえ、各x,y入力は一緒でなければなりません。いい考えですが、私は自分でそれを考えていませんでした。
CzarMatt

座標の境界は何ですか?0とネガは可能ですか?
AGourd

3
これは驚くほど難しいです。すべてのケースを処理するヒューリスティックがあると思うたびに、見落としていることがあります。
xnor

1
うわー、なんて挑戦だ。私は自分の損失を認めます。これを05AB1Eでねじ止めします。
魔法のタコUr

回答:


5

JavaScript(ES6)、251 244 275バイト

a=>Math.min(...(P=(a,r=[[a]],c=a[0])=>(a[1]&&P(a.slice(1)).map(l=>(r.push([[c],...l]),l.map((_,i)=>r.push([[c,...l[i]],...((b=[...l]).splice(i,1),b)])))),r))(a).map(L=>L.reduce((p,l)=>l.map(([h,v])=>(x=h<x?h:x,X=h<X?X:h,y=v<y?v:y,Y=v<Y?Y:v),x=y=1/0,X=Y=0)&&p+X-x+Y-y+2,0)))*2

どうやって?

再帰関数P()を使用して、入力リストのすべての可能なパーティションのリストを作成します。この関数は現在、最適ではありませんが、いくつかの重複したパーティションを返しますが、最終的な結果は変わりません。

各パーティションについて、各グループのすべての羊を長方形で囲むために必要なフェンスの数を計算します。これらのフェンスの合計は、パーティションのスコアを示します。最終的には最低スコアを返します。

テストケース


ステップ2について、なぜ[ [1,1],[2,2] ] , [ [1,2] ]ですか?
edc65

@ edc65うまくいけば、修正されるはずです。
アーナルド

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.