🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309345

Re: fir's sicl

#309345
From: (fir)
Date: Tue, 08 Aug 2017 00:41
128 lines
7218 bytes
W dniu wtorek, 8 sierpnia 2017 02:20:19 UTC+2 użytkownik (fir) napisał:
> W dniu wtorek, 8 sierpnia 2017 01:34:50 UTC+2 użytkownik (fir) napisał:
> > W dniu wtorek, 8 sierpnia 2017 00:41:27 UTC+2 użytkownik M.M. napisał:
> > > On Monday, August 7, 2017 at 11:14:27 PM UTC+2, godek....@gmail.com wrote:
> > > 
> > > > szczerze mówiąc, osobiście wolę korzystać z gotowych i ogólnych
> > > > rozwiązań, niż wynajdywać koło na nowo
> > > 
> > > Pewnie, kto nie woli? Każdy by chciał ogólnego i zarazem wydajnego
> > > gotowca, ale ogólne często właśnie nie spełniają wymagań wydajnościowych, albo
> > > wbrew pozorom nie są takie ogólne za jakie uchodzą - i trzeba zakodzić.
> > > 
> > > Pozdrawiam
> > 
> > z tego co wiem jesli w ktos stawia jakies zadanie typu, dajmy na to
> > 
> > "policz i wypisz na ekran linie z pliku notatki.txt ktore sa dluzsze niz 75 znakow"
> > 
> > to zwykle e c robi sie to ręcznie (czyli 'rzezbi' na poziomie petli ifow tablic i znakow itd
> > 
> > moja biblioteczka dostarcza mz dosyc odkrywczej generalizacji ktorej mozna tu 
> > uzyc - latwo i szynko
> > 
> > konkretnie byloby to
> > 
> > int main()
> > {
> >  chunk text = LoadChunk("notatki.txt");
> >   //wczytuje plik do ramu
> > 
> >  chunks lines = SplitChunkOnLines(text); 
> > 
> >   // dzieli na linie i zwraca tablice lini 
> >   // (w postaci bar {poczatek, koniec lini})
> > 
> >  int n = ChunksLength(lines);
> > 
> >  int long_lines_counter = 0;
> > 
> >  for(int i=0; i<n; i++)
> >  {
> >     int line_length = ChunkLength(lines.first[i]);
> >     
> >     if(line_length>75)
> >     {
> >       PrintfChunk(lines.first[i]);
> >       
> >       long_lines_counter++; 
> >     }
> >     
> >  }
> >  printf("\n number of  long lines: %d", long_lines_counter);
> > 
> >  return long_lines_counter;
> > }
> > 
> > uwagi
> > I. logiczne, przyjemne, proste a byc moze calkiem odkrywcze (ze wzgledu na idee chunk/chunks) [moge wyjasnic dokladniej jak to dziala ale raczej jutro bo ide spac]
> > 
> 
> 
> ok w sumie krotkie wyjasnienie 
> 
> I. CHUNK
> 
> podstawa jest idea ktora nazywam chunk
> (dlatego biblioteka nazywa sie 'initial chunk library' bo 'narosla' wobec tego konceptu chunka
> 
> chnk to para wskaznikow jednego wskazujacego na poczatek drugiego na koniec, pierwszy i ostatni znak danego 'wyrazu' /czy tez chunka czyli kawalka, paska ramu (mozna powiedziec lekkie koncepcyjne pomieszanie bo chunkiem nazywam zarowno pare wskaznikow jak i sam blok ramu przez nie wskazywany)
> 
> te wskazniki nazywam begin i end (w kodzie sa one pisane beg i end bo w niektorych odach lepiej wygladalo jak mialy rowna dlugosc)
> 
> begin zawsze wskazuje na pierwszy znak a end na ostatni, nie jest tak ze end wskazuje 'za' ram tylko wskazuje na ostatni bajt ramu 
> 
> II. CHUNKS
> 
> Dalsza koncepcja jest cos co nazywam chunks
> czyli tablica chunkow - czyli tablica par wskaznikow, W pewnym sesnie rdzeniem sicla
> sa funkce Split() ktore produkuja z danego duzego chunka wlasnie chunks czyli tablice 
> subchunkow
> 
> na przyklad jesli mamy 
> 
> chunk  txt = "ala ma kota";
> 
> chunks words = SplitOnWords(txt);
> 
> to words bedzie tablica 6 wskaznikow
>  
> { {wskazujacego na a, wskazujacego na a},
>  {wskazujacego na m, wskazujacego na a},
>  {wskazujacego na k, wskazujacego na a} }
> 

przy czym moge dodac ze chunks nie jest fizycznie przekazywane jako tutaj tablica 6-ciu wskaznikow, chunks jest tworzona wewnetrzenie w funkcji Split - przekazywany jest tylko para wskaznikow - na pierwsza pare i na ostatnia  (tcala tablica chunow jest wewnetrz Splita realokowana - dlatego kolejne wywolanie tej funkcji zamaze wynik, poprzedniej - jest to pewna niedogodnosc wynikajaca z niedorobek koncepcyjnych w c - ale w praktyce da sie przezyc - i tak jest pewnym niemal cudem ze to sie da zrobic w c tak jak sie tu daje zrobic czyli normalnie zwracajac rezultaty co mozna laczyc w ladne ksakady 
 
 SaveChunks( "out.txt", Removeduplicates(SortChunks( LoadChunk("notatki.txt") ) )); 

 itd
)


> III. ogolne idee
> 
> ogolna idea jest taka by ladowac caly wejsciowy tekst do ramu ale nie modyfikowac go w miejscu, jesli robimy operacje np sortowanie to sortuje sie wsazniki w chunks 
> a output flushuje sie printfami tym samym 
> jakby input jest niemodyfikowalny w sumie ram tekst w postaci roboczego outputu tez nie istnieje a aoutput jest jakby ksztaltowany przez kolejnosc flushów do strumienia wyjsciowego printfami - to jest bardzo ekonomiczne fizycznie - jest tez w praktyce dosyc pojemna klasa przypadkow, jak na dzis doklenie nie wiem co sie w nim nie miesci i co wymagalo by robeni kopi roboczej w ramie i 
> przepisywania jej w pamieci - moim zdaniem tego nalzey unikac
> 
> pisalem pewne funkcje pracujace na  ralokowaniu chunkow w ramie ale koniec koncow wywalilem je do czegos co nazwalem 'ricl' (reallock related part of icl) i nie jestem pewien czy jest to potrzebne, raczej moim zdaniem nalezy popracowac nad wersja 'statyczną')
> 
> tak to z grubsza dziala
> 
>  
> 
> 
> 
> 
> 
> 
> 
> 
> > II. nie znam za duzo rzeczy w c tego typu (nie znam wcale ale moje doswiadczenie jest ograniczone)
> > 
> > III. dla mnie lepsze niz wyrazenia regularne
> > 
> > IV. nie jestem pewien jak to sie ma do wersji na kontenerach w c++ javaskrypcie czy pythonie ale raczej nie wypada calkiem zle, 
> > prawdopodobnie jest z grubsza na rowni a dla koderow w c moze miec dodatkowe zalety bo rozumieja co jest under the hood bo to jest kod w c (dosyc krotki)
Technical Details
Message-ID: <87c01297-ea80-4e4e-b880-a2a049e48a8a@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!u14no1081072ita.0!news-out.google.com!e5ni931qta.0!nntp.google.com!w51no1046512qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <6950309e-21a6-436f-a500-301fc68754d5@googlegroups.com> <0c601f7b-4830-4d01-894a-9960dc6333fd@googlegroups.com> <9c9cc4ed-e8ac-43bc-9aae-89419967b92f@googlegroups.com> <9246338b-0d67-4774-a4be-6a76cd7386a7@googlegroups.com> <36fe8cff-997e-441c-8570-ef8171726ab8@googlegroups.com> <3259c160-b8be-4d8f-b8b1-930ecd99060c@googlegroups.com> <84cda872-2f99-4631-9696-38ae0ae5cc46@googlegroups.com> <24fd7c44-dc1f-4131-b9ba-b4f664d3cf7a@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.101.87.205 with SMTP id q13mr1605180pgr.237.1502152900014;        Mon, 07 Aug 2017 17:41:40 -0700 (PDT)
X-Received: by 10.31.5.203 with SMTP id 194mr15579vkf.29.1502152899946; Mon, 07 Aug 2017 17:41:39 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!u14no1081072ita.0!news-out.google.com!e5ni931qta.0!nntp.google.com!w51no1046512qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Mon, 7 Aug 2017 17:41:39 -0700 (PDT)
In-Reply-To: <24fd7c44-dc1f-4131-b9ba-b4f664d3cf7a@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=5.172.255.194; posting-account=Sb6m8goAAABbWsBL7gouk3bfLsuxwMgN
NNTP-Posting-Host: 5.172.255.194
References: <6950309e-21a6-436f-a500-301fc68754d5@googlegroups.com> <0c601f7b-4830-4d01-894a-9960dc6333fd@googlegroups.com> <9c9cc4ed-e8ac-43bc-9aae-89419967b92f@googlegroups.com> <9246338b-0d67-4774-a4be-6a76cd7386a7@googlegroups.com> <36fe8cff-997e-441c-8570-ef8171726ab8@googlegroups.com> <3259c160-b8be-4d8f-b8b1-930ecd99060c@googlegroups.com> <84cda872-2f99-4631-9696-38ae0ae5cc46@googlegroups.com> <24fd7c44-dc1f-4131-b9ba-b4f664d3cf7a@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <87c01297-ea80-4e4e-b880-a2a049e48a8a@googlegroups.com>
Subject: Re: fir's sicl
From: "(fir)" <profesor.fir@gmail.com>
Injection-Date: Tue, 08 Aug 2017 00:41:39 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit