http://ddili.org/forum/post/12299
adresinde konuştuğumuz konuya kimse yanıt yazmamış.
Ben de bu arada html işler bir kütüphane yazması denemesi yaptım.
import std.stdio;
import std.format;
import std.array : replicate;
class Kiraz
{
private int no = 0;
private int sayaç;
private int elemanSayısı;
private int[] kök;
private Dal[] dallar;
this (int n)
{
elemanSayısı = n;
sayaç = n;
kök = new int[n];
dallar = new Dal[n];
for(int i = 0; i < n; ++i)
{
kök[i] = i;
}
}
private int bul(int i)
{
while (i != kök[i])
i = kök[i];
return i;
}
void bağla(int ilk, int ikinci)
{
int ilkDal = bul(ilk);
int ikinciDal = bul(ikinci);
if (ilkDal == ikinciDal)
return;
kök[ilkDal] = ikinci;
--sayaç;
}
void ekle(string isim, int derinlik)
{
if (no == 0)
{
dallar[no].no = no;
dallar[no].isim = isim;
dallar[no].derinlik = derinlik;
writeln("İlk kez ekliyorum");
}
else
{
dallar[no].no = no;
dallar[no].isim = isim;
dallar[no].derinlik = derinlik;
writeln("Başka dallar ekliyorum");
if (dallar[no-1].derinlik < dallar[no].derinlik)
{
writeln("alt dal");
bağla(dallar[no].no, dallar[no-1].no);
dallar[no].üstDal = dallar[no-1].no;
dallar[no-1].dallar ~= dallar[no].no;
}
else if (dallar[no-1].derinlik == dallar[no].derinlik)
{
writeln("yan dal");
if (dallar[no - 1].üstDal != -1)
{
bağla(dallar[no].no, dallar[no - 1].üstDal);
dallar[no].üstDal = dallar[no - 1].üstDal;
dallar[dallar[no].üstDal].dallar ~= dallar[no].no;
}
}
}
writeln("Dallarımız = ");
foreach (eleman; dallar)
writeln (eleman);
++no;
}
override string toString() const
{
string dönen;
for(int i = 0; i < elemanSayısı; ++i)
{
dönen ~= format("%2s", i);
}
dönen ~= '\n';
string çizgi = " -".replicate(elemanSayısı);
dönen ~= çizgi;
dönen ~= '\n';
for(int i = 0; i < elemanSayısı; ++i)
{
dönen ~= format("%2s", kök[i]);
}
dönen ~= '\n';
return dönen;
}
}
struct Dal
{
string isim;
int derinlik;
int no;
int üstDal = -1;
int[] dallar;
string toString() const
{
string dönen;
dönen ~= format("İsim = %2s Derinlik = %2s Üst Dal = %2s Dallar = %2s", isim, derinlik, üstDal, dallar);
return dönen;
}
}
void main()
{
string html =
`<ul id="meyveler">
<li class="elma">Elma</li>
<li class="portakal">Portakal</li>
<li class="incir">İncir</li>
</ul>`;
/+
ul 0
li 1
li 1
li 1
+/
Kiraz kiraz = new Kiraz(4);
kiraz.ekle("ul", 0);
writeln(kiraz);
kiraz.ekle("li", 1);
writeln(kiraz);
kiraz.ekle("li", 1);
writeln(kiraz);
kiraz.ekle("li", 1);
writeln(kiraz);
}
Şimdi asıl soru şu bu şekilde bir sınıfa geçilen html kodundan
<ul id="meyveler">
<li class="elma">Elma</li>
<li class="portakal">Portakal</li>
<li class="incir">İncir</li>
</ul>
'{ ul 0, li 1, li 1, li 1} 'gibi elemanların derinliklerini gösteren bir ifadeyi nasıl elde edebiliriz. Biz bu ifadeyi gördüğümüzde hemen diyoruz ki meyveler en dışta.
Bu arada sınıf için ağaç veri yapısı oluşturmaya çalıştım. Elemanların derinliğine göre eklenmesi isteniyor.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply