<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FCw10</id>
	<title>/Cw10 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=%2FCw10"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/Cw10&amp;action=history"/>
	<updated>2026-04-24T01:34:13Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=/Cw10&amp;diff=2050&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;= TI:WTBD/Ćwiczenia 10 = == Sprawdzian 1 == === Zadania dla gr. 1 === # Ustalić ile w 1 księdze Pana Tadeusza występuje słów zawieraj...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=/Cw10&amp;diff=2050&amp;oldid=prev"/>
		<updated>2015-05-23T15:03:03Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;= &lt;a href=&quot;/edu/index.php/TI:WTBD&quot; title=&quot;TI:WTBD&quot;&gt;TI:WTBD&lt;/a&gt;/Ćwiczenia 10 = == Sprawdzian 1 == === Zadania dla gr. 1 === # Ustalić ile w &lt;a href=&quot;/edu/index.php/Plik:PanTadeusz1.txt&quot; title=&quot;Plik:PanTadeusz1.txt&quot;&gt;1 księdze Pana Tadeusza&lt;/a&gt; występuje słów zawieraj...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= [[TI:WTBD]]/Ćwiczenia 10 =&lt;br /&gt;
== Sprawdzian 1 ==&lt;br /&gt;
=== Zadania dla gr. 1 ===&lt;br /&gt;
# Ustalić ile w [[Plik:PanTadeusz1.txt|1 księdze Pana Tadeusza]] występuje słów zawierających ,,polskie litery&amp;quot;, a ile takich, które ich nie zawierają, oraz jaka jest średnia długość słowa w ramach jednej i drugiej klasy (z uwzględnieniem powtarzających się słów).&lt;br /&gt;
# Korzystając z zawartości pliku ''/usr/share/dict/words'' wyodrębnić z niego wszystkie słowa (linijki) składające się wyłącznie z liter (tzn. pominąć te z apostrofami, łącznikami itp.), a wśród nich — znaleźć te, w których występuje najdłuższy ciąg spółgłosek nie oddzielonych samogłoskami. Na użytek tego zadania uznajemy, że samogłoskami w języku angielskim są jedynie 'a', 'e', 'i', 'o', 'u'.&lt;br /&gt;
# Napisać program, który na podstawie jednego lub więcej plików takich, jak ''Warszawa.csv'' wypisze ile w nich występuje różnych kodów pocztowych dla wszystkich pojawiających się w nich zestawów 2 cyfr początkowych, w kolejności malejącej liczby kodów.&lt;br /&gt;
=== przykładowe rozwiązania ===&lt;br /&gt;
==== Zad. 1 ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
# coding: utf-8&lt;br /&gt;
&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
pliterki = re.compile(u'[ĄĆĘŁŃÓŚŻŹąćęłńóśżź]').search&lt;br /&gt;
odstepy = re.compile(u'[^A-Za-zĄĆĘŁŃÓŚŻŹąćęłńóśżź]+') # w tym znaki przestankowe&lt;br /&gt;
&lt;br /&gt;
def szukaj(tekst):&lt;br /&gt;
    slowa = odstepy.split(tekst)&lt;br /&gt;
    z_pl, bez_pl = list(), list()&lt;br /&gt;
    for s in slowa:&lt;br /&gt;
        m = pliterki(s)&lt;br /&gt;
        if m:&lt;br /&gt;
            z_pl.append(s)&lt;br /&gt;
        else:&lt;br /&gt;
            bez_pl.append(s)&lt;br /&gt;
    return (len(z_pl), float(sum(len(s) for s in z_pl)) / len(z_pl),&lt;br /&gt;
            len(bez_pl), float(sum(len(s) for s in bez_pl)) / len(bez_pl) )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    from sys import argv&lt;br /&gt;
    f = open(argv[1])&lt;br /&gt;
    tekst = f.read().decode('utf-8')&lt;br /&gt;
    f.close()&lt;br /&gt;
    print (u'z literami PL: {0} słów; średnia długość: {1}\n'&lt;br /&gt;
           u'bez liter PL: {2} słów; średnia długość: {3}'&lt;br /&gt;
          ).format(*szukaj(tekst)).encode('utf-8')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== Zad. 2 ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
# coding: utf-8&lt;br /&gt;
&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
litery = re.compile(r'^[A-Za-z]+\n$').match&lt;br /&gt;
spolgloski = re.compile(r'(?:[aeiou]|^)'&lt;br /&gt;
                        r'([^aeiou]{3,})'&lt;br /&gt;
                        r'(?:[aeiou]|$)',&lt;br /&gt;
                        re.IGNORECASE).findall&lt;br /&gt;
&lt;br /&gt;
def dlugosci_i_slowa(slowa):&lt;br /&gt;
    for s in slowa:&lt;br /&gt;
        ciagi = spolgloski(s)&lt;br /&gt;
        if ciagi:&lt;br /&gt;
            yield max(len(x) for x in ciagi), s&lt;br /&gt;
&lt;br /&gt;
def znajdz_ciagi(linie):&lt;br /&gt;
    slowa = (l.strip() for l in linie if litery(l))&lt;br /&gt;
    d_i_s = sorted(dlugosci_i_slowa(slowa))&lt;br /&gt;
    max_dlugosci = d_i_s[-1][0]&lt;br /&gt;
    wynik = list()&lt;br /&gt;
    while d_i_s[-1][0] == max_dlugosci:&lt;br /&gt;
        wynik.append(d_i_s.pop()[1])&lt;br /&gt;
    return max_dlugosci, wynik&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    from fileinput import input&lt;br /&gt;
    max_dlugosci, wynik = znajdz_ciagi(input())&lt;br /&gt;
    print u'Max długości ciągu spółglosek: {}'.format(max_dlugosci).encode('utf-8')&lt;br /&gt;
    for s in wynik:&lt;br /&gt;
        print s&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== Zad. 3 ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! usr/bin/python&lt;br /&gt;
# coding: UTF-8&lt;br /&gt;
&lt;br /&gt;
import fileinput&lt;br /&gt;
&lt;br /&gt;
plik=fileinput.input()&lt;br /&gt;
&lt;br /&gt;
kody={}&lt;br /&gt;
&lt;br /&gt;
for line in plik:&lt;br /&gt;
        kod = line.split(';')[0]&lt;br /&gt;
        try:&lt;br /&gt;
            kody[kod[:2]].add(kod)&lt;br /&gt;
        except KeyError:&lt;br /&gt;
            kody[kod[:2]] = set((kod,))&lt;br /&gt;
kody = dict((k, len(v)) for (k, v) in kody.items())&lt;br /&gt;
kody_pokolei = sorted(kody.items(), key=lambda t: t[1], reverse=True)&lt;br /&gt;
        &lt;br /&gt;
for kod, ile in kody_pokolei:&lt;br /&gt;
        print (u'Liczba różnych kodów o poczatku: {0} to: {1}'&lt;br /&gt;
               .format(kod, ile)&lt;br /&gt;
               .encode('utf-8')&lt;br /&gt;
              )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadania dla gr. 2 ===&lt;br /&gt;
# Napisać program, który na podstawie jednego lub więcej plików takich, jak ''Warszawa.csv'' wypisze 3 najczęściej w nich występujące (w największej liczbie rekordów) kody pocztowe, oraz ich częstości. W przypadku ,,remisu&amp;quot; wypisze wszystkie kody, które osiągnęły jeden z 3 najwyższych wyników.&lt;br /&gt;
# Znaleźć 3 najdłuższe (w sensie liczby liter) słowa w [[Plik:PanTadeusz1.txt|1 księdze Pana Tadeusza]]. A dokładniej, wszystkie słowa o 3 największych wartościach długości.&lt;br /&gt;
# Korzystając z zawartości pliku ''/usr/share/dict/words/'' wyodrębnić z niego wszystkie słowa (linijki) składające się wyłącznie z liter (tzn. pominąć te z apostrofami, łącznikami itp.), a wśród nich -- znaleźć te, które składają się z na przemian samogłosek i spółgłosek, a zaczynają się i kończą na samogłoskę. Określić ile procent stanowią one w stosunku do pozycji wyodrębnionych w pierwszym kroku, i wypisać te z nich, które odznaczają się maksymalną długością. Na użytek tego zadania uznajemy, że samogłoskami w języku angielskim są jedynie 'a', 'e', 'i', 'o', 'u'.&lt;br /&gt;
=== przykładowe rozwiązania ===&lt;br /&gt;
==== Zad.1 ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
# coding: utf-8&lt;br /&gt;
&lt;br /&gt;
def main(linie):&lt;br /&gt;
    liczniki = dict()&lt;br /&gt;
    for l in linie:&lt;br /&gt;
        kod = l.split(';')[0]&lt;br /&gt;
        try:&lt;br /&gt;
            liczniki[kod] += 1&lt;br /&gt;
        except KeyError:&lt;br /&gt;
            liczniki[kod] = 1&lt;br /&gt;
    topowe = sorted(set(liczniki.values()), reverse=True)[:3]&lt;br /&gt;
    wynik = list()&lt;br /&gt;
    for n in topowe:&lt;br /&gt;
        nkrotne = list(kod for kod in liczniki if liczniki[kod] == n)&lt;br /&gt;
        wynik.append((n, nkrotne))&lt;br /&gt;
    return wynik&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    from fileinput import input&lt;br /&gt;
    wynik = main(input())&lt;br /&gt;
    for n, nkrotne in wynik:&lt;br /&gt;
        print '{} razy:'.format(n), ', '.join(nkrotne)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== Zad. 2 ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
import re&lt;br /&gt;
rx1 = re.compile(r'\W+',re.UNICODE)&lt;br /&gt;
&lt;br /&gt;
def longest_words(tekst):&lt;br /&gt;
    words = rx1.split(tekst)&lt;br /&gt;
    lengths = map(len, words)&lt;br /&gt;
    toplengths = sorted(set(lengths), reverse=True)[:3]&lt;br /&gt;
    maxwords = set(w for w in words if len(w) in toplengths)&lt;br /&gt;
    return sorted(maxwords,key = len, reverse = True)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    tekst = open('PanTadeusz1.txt').read().decode('utf-8')&lt;br /&gt;
    for word in longest_words(tekst):&lt;br /&gt;
        print word&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== Zad. 3 ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#! /usr/bin/python&lt;br /&gt;
# coding: utf-8&lt;br /&gt;
&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
litery = re.compile(r'^[A-Za-z]+\n$').match&lt;br /&gt;
szukane = re.compile(r'^(?:[aeiou][^aeiou])+[aeiou]$', re.IGNORECASE).match&lt;br /&gt;
&lt;br /&gt;
def znajdz(linie):&lt;br /&gt;
    slowa = list(l.strip() for l in linie if litery(l))&lt;br /&gt;
    znalezione = (szukane(s) for s in slowa)&lt;br /&gt;
    szukaneslowa = set(s.group() for s in znalezione if s)&lt;br /&gt;
    odsetek = 100. * len(szukaneslowa)/len(slowa)&lt;br /&gt;
    return odsetek, sorted(szukaneslowa, key=len)&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    from fileinput import input&lt;br /&gt;
    odsetek, slowa = znajdz(input())&lt;br /&gt;
    maxlen = len(slowa[-1])&lt;br /&gt;
    print u'szukane słowa stanowią {} procent.'.format(odsetek).encode('utf-8')&lt;br /&gt;
    while len(slowa[-1]) == maxlen:&lt;br /&gt;
        print slowa.pop()&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== dodatki ===&lt;br /&gt;
[[Plik:Warszawa.csv.txt]]: tu można pobrać plik ''Warszawa.csv'', musiałem mu dokleić do nazwy końcówkę ''.txt'', bo Mediawiki nie pozwala na pliki z końcówką ''.csv''. Tak czy owak jest to plik z danymi tekstowymi.&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>