Bu resimde kaç şekil var?


10

Çocuklar nesneleri sınıflandırma ve sayma konusunda çok iyidir. Bilgisayarların daha fazla sorunu var gibi görünüyor. Bu, bu sorunun basitleştirilmiş bir sürümüdür. Bir görüntüdeki nesneleri sınıflandırabilen ve sayabilen küçük bir program yazabilir misiniz?

Sorun: Bir veya daha fazla daire ve dikdörtgen içeren bir görüntü verildiğinde, daire sayısı ve dikdörtgen sayısı ile 2 tamsayı döndürün.

kurallar

  • Giriş görüntüsü, seçtiğiniz herhangi bir bitmap formatında beyaz zemin üzerine siyah figürler olacaktır.
  • Görüntü genişliği ve yüksekliği 100 ile 1000 piksel arasında olacaktır.
  • Şekiller görüntünün içinde tamamen yer alacaktır.
  • Şekiller 1 piksel çizgi genişliğine sahip olacaktır.
  • Görüntülerde kenar yumuşatma kullanılmaz. Sadece beyaz üzerine siyah olacaklar.
  • Şekiller başka bir şekle dokunabilir, kesebilir veya içinde olabilir.
  • Kesişen şekiller maksimum 4 ortak piksele sahip olacaktır.
  • Çevrelerin çapı 20 piksel veya daha fazla olacaktır.
  • Dikdörtgen kenarlar 10 veya daha fazla piksel uzunluğunda olacaktır.
  • Şekilleri tanıyan herhangi bir yerleşik veya kitaplık veya bu zorluğu önemsiz hale getiren başka bir işlev kullanamazsınız.
  • Daire ve dikdörtgen sayısı ile 2 tamsayı döndürün veya yazdırın.

örnek 1

örnek 1

Yanıt: 3 4

Örnek 2:

resim açıklamasını buraya girin

Yanıt: 4 13

Bu bir kod golf meydan okumadır, bu nedenle her dilde en kısa program veya işlev kazanacaktır.


Zaten söyleyebilirim, dikdörtgeni saymak köşeleri saymakla ilgili olacaktır.
Bálint

Yanıtlar:


3

PHP - 355 bayt

Bayt sayısı dahil değildir '<image-url>'.

<?php
m('<image-url>');function m($f){$i=imagecreatefrompng($f);$r=f($i,17);$c=f($i,9);echo($c-$r).' '.$r."\n";}function f($i,$k){$w=imagesx($i);$h=imagesy($i);$r=0;for($y=0;$y<$h;$y++)for($x=0;$x<$w;$x++)if(!imagecolorat($i,$x,$y))$r+=g($i,$x,$y,$w,$k);return$r;}function g($i,&$x,$y,$w,$k){$l=$x;while(!imagecolorat($i,$x,$y)&&$x<$w)$x++;return($x-$l>$k)?1/2:0;}

İki test durumunda, kullandığım URL'ler http://i.stack.imgur.com/qnIFk.pngve şeklindedir http://i.stack.imgur.com/HV9k3.png.

Yatay çizgileri sayar ve şekil sayısını elde etmek için ikiye böler. Dairelerin daha kısa yatay segmentlere ve dikdörtgenlerin daha uzun yatay segmentlere sahip olduğu gözlemine dayanır.

Kabul hack, test vakaları dışında bir şey için çalışmak garanti edilmez!

Görüntüleri ± 45 ° döndürmeyi ve yatay çizgiler tespit etmeyi denedim. Bu, çapraz çizgileri kontrol etmekle eşdeğerdir ve çevreleri daha iyi alır, ancak çalışmak için yeterince kenar bırakan bir enterpolasyon algoritması bulamadım. Örneğin, bir satırı iki piksel sırasına bulaştırabilir ve sayımı bozabilir.

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.