1.

Zaimplementuj generator liczb pseudolosowych korzystając z algorytmu Wichmann–Hill. Zmodyfikuj generator tak, aby zwracał liczby: z zakresu z częstosliwością:

  • 1-10 -> 25%
  • 11-50 -> 15%
  • 51-75 -> 35%
  • 76 - 99 -> 20%
  • 100 -> 5%

Na próbce 100 tysięcy liczb, oblicz rozkład.

function(s1, s2, s3)

s1 = mod ( 171 * s1, 30269 )

s2 = mod ( 172 * s2, 30307 )

s3 = mod ( 170 * s3, 30323 )

r = mod ( s1/30269 + s2/30307 + s3/30323, 1 )

return r

2. Zaimplementuj dekorator `WordProcessor`, który można wbogacać o pluginy. Przykład użycia:


In [ ]:
@WordProcessor.register
def strip_text(text):
    pass

@WordProcessor.register
def capitalize_text(text):
    pass

@WordProcessor.process("   ala ma kota   ") # -> "Ala ma kota"

3. Zaimplementuj dekorator Singleton, który będzie zapewniał dla danej klasy wzorzec Singleton

4. Zaimplementuj metaklasę sprawdzającą implementację interfejsu. Nazwy metod powinny być przechowywane w atrybucie `__interfaces__`

5. Dekorator poprawiający funkcje typu def(l=[]): pass

6. Zaimplementuj polecenie tail