Şu koyunları yakala!


16

Siz bir çiftçisiniz ve koyun sürünüz kaçtı! Oh hayır!

Bu koyunları içerecek çitler oluşturarak topla. Bütçede bir çiftçi olarak mümkün olan en düşük miktarda çit kullanmak istiyorsunuz. Neyse ki sizin için dünyanın en akıllı koyunları değil ve kaçtıktan sonra hareket etmekten rahatsız olmuyorlar.

Görev

Koordinatların bir listesi verildiğinde, koyunları içermek için gerekli olan en az çit parçası çıktısı alın.

kurallar

  • Koyunlar dolaşamazlarsa içerilir (çitte delik yok).
  • Tüm koyunları bir çit bloğunda tutmanız gerekmez - birbirinden bağımsız birden fazla çitle çevrili alan olabilir.
  • Çit segmentleri kardinal yönlerde yönlendirilir.
  • Her koordinat grubu tek bir koyunu temsil eder.
  • Girdi çiftleri tamsayı pozitif olmalıdır, x>0& y>0, ama sizin dilinize için uygun şekilde biçimlendirilmiş olabilir.
    • yani: {{1,1},{2,1},{3,7}, .. }veya[1,2],[2,1],[3,7], ..
  • Çitlerle çevrili bir alandaki boş alanlar iyidir.
  • Koordinatların belirli bir sırada girildiğini varsayamazsınız.

Örneğin, tek bir koyun 4çit parçalarının tam olarak kaplanmasını gerektirir .

Test senaryoları

[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

notlar

  • Giriş koordinatlarının geçerli olduğunu varsayabilirsiniz.
  • Algoritmanız teorik olarak oldukça büyük bir tamsayı koordinatı için çalışmalıdır (dilinizin desteklenen maksimum değerine kadar).
  • Tam program veya işlev yanıtları uygundur.

Bu , bayt en kısa cevap kazanır!


Girdi, x koordinatlarının ve ardından y koordinatlarının bir listesi olabilir mi? ör.{1,2,3,4},{5,6,7,8} -> {1,5},{2,6},{3,7},{4,8}
Pavel

@Phoenix Hayır, her x,ygirdi birlikte olmalıdır. Güzel bir düşünce olsa da, ben bunu hiç düşünmemiştim.
CzarMatt

Koordinatların sınırları nelerdir? 0'lar ve negatifler mümkün mü?
AGourd

3
Bu şaşırtıcı derecede zor. Her vakayı ele alan bir buluşsal yöntemim olduğunu her düşündüğümde, kaçırdığım bir şey var.
xnor

1
Vay be, ne büyük bir meydan okuma. Kaybımı kabul ediyorum; vida 05AB1E bunu yapıyor.
Sihirli Ahtapot Urn

Yanıtlar:


5

JavaScript (ES6), 251 244 275 bayt

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

Nasıl?

Giriş listesinin tüm olası bölümlerinin bir listesini oluşturmak için P () özyinelemeli işlevini kullanırız . Bu işlev şu anda alt optimaldir, çünkü bazı yinelenen bölümleri döndürür - ancak nihai sonucu değiştirmez.

Her bölüm için, her gruptaki tüm koyunları bir dikdörtgenle çevrelemek için gereken çit sayısını hesaplıyoruz. Bu çitler toplamı bölümün puanını verir. Sonunda en düşük puanı döndürüyoruz.

Test senaryoları


Adım 2 hakkında, neden olmasın [ [1,1],[2,2] ] , [ [1,2] ]?
edc65

@ edc65 Umarım şimdi düzeltilmelidir.
Arnauld

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.