• Nie Znaleziono Wyników

Niekt´ore rozwi ,

N/A
N/A
Protected

Academic year: 2021

Share "Niekt´ore rozwi ,"

Copied!
4
0
0

Pełen tekst

(1)

Niekt´ ore rozwi azania wzorcowe do zestawu Perl 4 ,

Narzedzia informatyczne w j, ezykoznawstwie,

Marcin Junczys-Dowmunt 22 lutego 2008

Rozwiazania dotycz, a,

”wersji z plusem” z wyjatkiem zadania 4.3, gdzie chyba nie ma ele-, ganckiego sposobu by rozwiaza´, c zadanie zgodnie z poleceniem.

Zadanie 4.2

1 use s t r i c t ;

2

3 my % d o u b l e ;

4 w h i l e( < >) {

5 c h o m p;

6 $ d o u b l e { $_ }+ +;

7 }

8 p r i n t " $_ - $ d o u b l e { $_ }\ n " f o r e a c h(ke ys % d o u b l e );

Je´sli sobie przypomnimy, ˙ze warto´sci nieistniejace s, a w Perlu inicjalizowane automatycznie, (w kontek´scie numerycznym zerem), to krok w wierszu nr 6 staje sie zupe lnie jasny. Spos´, ob dzia lania reszty programu jest chyba oczywisty.

1

(2)

Zadanie 4.3

1 use s t r i c t ;

2

3 my % d o u b l e = map { c h o m p; $_ = > 1 } < >;

4 p r i n t " $_ \ n " f o r e a c h(ke ys % d o u b l e );

Funkcja map dzia la na listach, operator diamentowy znajduje si, e wi, ec w kontek´, scie li- stowym i tym samym informacje na wej´sciu zostana skonsumowane w ca lo´, sci, ka˙zdy wiersz jako element listy. Funkcja map tworzy na podstawie tej listy nowa list, e, gdzie elementy o, nieparzystym indeksie to wczytane wiersze, a elementy parzyste to same jedynki. Przypisanie wyniku funkcji map do hasza powoduje zlikwidowanie powtarzajacych si, e kluczy., 1

1Jest to wy laczna w lasno´, c haszy! Przypisanie do tablicy nie spowodowa loby usuniecia powtarzaj, acych si, e, element´ow.

2

(3)

Zadanie 4.4

Wersja 1

1 use s t r i c t ;

2

3 c h o m p(my @ l i n e s = so rt < >);

4 my $ c o u n t e r = 1;

5 f o r e a c h my $i (1 .. @lines -1) {

6 if( $ l i n e s [ $i -1] ne $ l i n e s [ $i ]) {

7 p r i n t " $ l i n e s [ $i -1] - $ c o u n t e r \ n ";

8 $ c o u n t e r = 1;

9 }

10 el se {

11 $ c o u n t e r ++;

12 }

13 }

14 p r i n t " $ l i n e s [ @lines -1] - $ c o u n t e r \ n ";

Tutaj nie korzystamy z haszy tylko z faktu, ˙ze po posortowaniu, powatarzajace si, e wiersze, bed, a wyst, epowa´, c kolejno po sobie. Wystarczy wiec ´, sledzi´c, kiedy dwa kolejne wiersze sa r´, o˙zne i wypisa´c wtedy liczbe wyst, apie´, n, kt´ora by la zwiekszana tylko wtedy, gdy dwa kolejne wiersze, sie nie r´, o˙zni ly. Ostatni wiersz programu zapewnia, ˙ze nie zapomnimy o ostatnim wierszu w li´scie.

Wersja 2

1 use s t r i c t ;

2

3 c h o m p(my @ l i n e s = so rt < >);

4 w h i l e( @ l i n e s ) {

5 my $ l i n e = s h i f t @ l i n e s ;

6 my $ c o u n t e r = 1;

7 w h i l e( @ l i n e s and $ l i n e eq $ l i n e s [0 ]) {

8 s h i f t @ l i n e s ;

9 $ c o u n t e r ++;

10 }

11 p r i n t " $ l i n e - $ c o u n t e r \ n ";

12 }

Ta wersja jest troche bardziej elegancka, ale nie wida´, c na pierwszy rzut oka, co sie na-, prawde dzieje. Po wczytaniu posortowanych wierszy do tablicy, usuwamy kolejne wiersze z, poczatku tablicy. G l´, owna petla usuwa pierwszy element z tablicy, a wewn, etrzna p, etla usuwa, wszystkie nastepuj, ace po nim duplikaty tego wiersza, zliczaj, ac je. Wewn, etrzna p, etla prze-, staje dzia la´c, gdy nastepny wiersz juz nie jest duplikatem lub gdy zosta ly usuni, ete wszystkie, wiersze. G l´owna petla przestaje dzia la´, c, gdy zostana usuni, ete wszystkie wiersze z tablicy., Mimo tego, ˙ze program zawiera zagnie˙zd˙zona p, etl, e, nie dzia la on d lu˙zej ni˙z pierwsza wersja.,

3

(4)

Zadanie 4.5

Wersja 1

1 use s t r i c t ;

2 my % ha sh ;

3 w h i l e( < >) {

4 c h o m p;

5 if( not e x i s t s( $ h a s h { $_ })) {

6 p r i n t $_ ." \ n ";

7 $ h a s h { $_ } = 1;

8 }

9 }

Tutaj r´ownie˙z korzystamy z hasza, ale w przeciwie´nstwie do poprzednich zada´n wypi- sujemy wiersze w czasie wczytywania pliku. Pomys l jest taki, ˙ze wy´swietlamy wiersz, gdy pojawi sie po raz pierwszy i tylko wtedy. Wystarczy wi, ec prze´, sledzi´c, czy dany wiersz ju˙z kiedy´s wystapi l (czyli, czy znajduje si, e w haszu), a je´, sli nie, to go wy´swietlimy.

Wersja 2

1 use s t r i c t ;

2 my % ha sh ;

3 w h i l e( < >) {

4 c h o m p;

5 if( not e x i s t s( $ h a s h { $_ })) {

6 $ h a s h { $_ } = $ .;

7 }

8 }

9 p r i n t $_ ." \ n " f o r e a c h(so rt { $ h a s h { $a } <= > $ h a s h { $b } } ke ys % ha sh );

Innym poprawnym rozwiazaniem jest powy˙zszy program. Tutaj najpierw wczytujemy ca ly, plik do hasza, ale jako warto´sci hasza zapisujemy informacje o pierwszym jego wystapieniu, w pliku (i tylko o pierwszym) w postaci numeru wiersza. Na ko´ncu wystarczy posortowa´c klucze hasza (wiersze) wed lug przypisanych im warto´sci (numery wierszy) i wy´swietli´c klucze wed lug tego porzadku.,

4

Cytaty

Powiązane dokumenty

[r]

(2 pkt) Podaj definicję kwantyla rzędu p rozkładu zmiennej losowej oraz jej źródło (autor, tytuł, rok wydania, strona).. (1 pkt) Niech zmienna losowa X posiada rozkład równomierny

Zbada´ c, czy dzia lanie to jest przemienne, czy jest l¸ aczne i czy ma ono element

[r]

Zbada´ c, czy dzia lanie to jest przemienne, czy jest l¸ aczne i czy ma ono element

Zbada´ c, czy dzia lanie to jest przemienne, czy jest l¸ aczne i czy ma ono element

Zbada´ c, czy dzia lanie to jest przemienne, czy jest l¸ aczne i czy ma ono element

Zbada´ c, czy dzia lanie to jest przemienne, czy jest l¸ aczne i czy ma ono element