From c4a220e0c69283a54891413a574f79e5491e34cc Mon Sep 17 00:00:00 2001 From: "Dawid J. Kubis" Date: Tue, 3 Dec 2019 13:34:48 +0100 Subject: [PATCH] better site... hopefully? --- 1/kricici_lukas.md | 16 ++++++++++++ 1/sude_nebo_liche.md | 22 ++++++++++++++++ 2/umocnovani.md | 39 ++++++++++++++++++++++++++++ 3/fizzbuzz.md | 25 ++++++++++++++++++ 4/bigdick_sito.md | 15 +++++++++++ 4/erastotenovo_sito.md | 53 +++++++++++++++++++++++++++++++++++++ 4/nejbigdick.md | 9 +++++++ 4/vic_bigdick_sito.md | 13 ++++++++++ README.md | 14 ++++++++++ code_gen.md | 23 ++++++++++++++++ code_gen.py | 20 ++++++++++++++ site_gen.md | 59 ++++++++++++++++++++++++++++++++++++++++++ site_gen.py | 8 +++--- 13 files changed, 312 insertions(+), 4 deletions(-) create mode 100644 1/kricici_lukas.md create mode 100644 1/sude_nebo_liche.md create mode 100644 2/umocnovani.md create mode 100644 3/fizzbuzz.md create mode 100644 4/bigdick_sito.md create mode 100644 4/erastotenovo_sito.md create mode 100644 4/nejbigdick.md create mode 100644 4/vic_bigdick_sito.md create mode 100644 code_gen.md create mode 100644 site_gen.md diff --git a/1/kricici_lukas.md b/1/kricici_lukas.md new file mode 100644 index 0000000..e73a9ab --- /dev/null +++ b/1/kricici_lukas.md @@ -0,0 +1,16 @@ +# kricici_lukas.py +```python + +# ptame se uzivatel jestli lukas krici +krici = input('Krici Lukas? : ') +# promenna `krici` ma typ str + +# zjistujeme jestli uzivatel napsal ano +# tady je rozdil mezi 'ano' a 'Ano' (velka pismena nemame osetrena) +if krici == 'ano': + print('Lukasi, mohl by ses trochu ztisit?') +else: + print('zrovna nemluvi?') + +# btw tohle vymyslel Lada +``` \ No newline at end of file diff --git a/1/sude_nebo_liche.md b/1/sude_nebo_liche.md new file mode 100644 index 0000000..3b3bfc4 --- /dev/null +++ b/1/sude_nebo_liche.md @@ -0,0 +1,22 @@ +# sude_nebo_liche.py +```python + +# zjistujeme cislo od uzivatele +x = input('zadej cislo : ') # x je typ str +# prevadime x na typ int pomoci funkce `int` +# tohle vyhodi chybu pokud uzivatel je dement +# a napsal neco ve smyslu 'ahoj'; to totiz nelze prevest na int +x = int(x) + +# koukame se jestli zbytek z deleni dvemi je 0 +# -> jesli je `x` delitelne dvemi +if x % 2 == 0: + print('je sude') +else: + # tohle je sice ekvivalent `elif x % 2 == 1` + # ale takhle je to prehlednejsi + # mohli bychom taky napsat dalsi if + # - fungovalo by to stejne ale tohle je + # mnohem prehlednejsi + print('je liche') +``` \ No newline at end of file diff --git a/2/umocnovani.md b/2/umocnovani.md new file mode 100644 index 0000000..654baa5 --- /dev/null +++ b/2/umocnovani.md @@ -0,0 +1,39 @@ +# umocnovani.py +```python + +# takze tohle je implementace +# skriptu ktery umocnuje cisla +# bez pouziti operatoru `**` +# je to uprimne trochu gay a +# ve skutecnosti byste tohle nikdy +# nepouzili, ale hezky to ukazuje praci +# s loopama + +# ziskame zaklad +a = int(input("zadejte zaklad : ")) +# ziskame exponent +e = int(input("zadejte exponent : ")) + +i = 0 # tohle je iteracni promenna +# budeme totiz loopovat tolikrat, kolik mame exponent +# coz je trochu problem protoze exponent musi +# byt cele cislo +# no nic + +prod = 1 # do tyhle promenny to budeme vsechno nasobit +# pozor; nemuze byt 0 protoze by nula je nulovy prvek +# grupy celych cisel s nasobenim; to je jedno +# proste by nam pohltila cely nasobeni a vysledek +# by byl nula + +while i < e: # loopujeme tolikrat kolik je exponent + + prod *= a # nasobime cislo samym sebou + # ekvivalent + # prod = prod * a + + i += 1 # pricitame iterator aby to fungovalo + +# vypisujeme vysledek +print(f"vysledek : {prod}") +``` \ No newline at end of file diff --git a/3/fizzbuzz.md b/3/fizzbuzz.md new file mode 100644 index 0000000..7cb46ad --- /dev/null +++ b/3/fizzbuzz.md @@ -0,0 +1,25 @@ +# fizzbuzz.py +```python + +# tahame hodnotu od uzivatele +lim = int(input('zadej cislo : ')) + +# prazny string +output = '' +# vsechna cisla do lim +for i in range(lim): + # reset promenny output + output = '' + + # pokud delitelne tremi + if i % 3 == 0: + output += 'fizz' + # pokud delitelne peti + if i % 5 == 0: + output += 'buzz' + + # zjistujeme jestli nam to + # stoji za to vypsat + if output != '': + print(output) +``` \ No newline at end of file diff --git a/4/bigdick_sito.md b/4/bigdick_sito.md new file mode 100644 index 0000000..a84a79d --- /dev/null +++ b/4/bigdick_sito.md @@ -0,0 +1,15 @@ +# bigdick_sito.py +```python +# Tak tady bude nejaka cool implementace erastotenova sita +# timhle se radsi zatim netrapte +from functools import reduce +def gen_primes(lim): # kratsi nazev -> optimalizace :D + return [i for i in reduce((lambda a, b : [(i[0] if i[0]==i[1] else 0) for i in zip(a,b)]),[[(0 if ((x % i == 0) and (x != i)) else x) for x in range(2, lim)] for i in range(2, lim)]) if i != 0] # hehe :D +# lol tohle je doslova nenormalni +# prosim nepiste takovyhle kod, nikdo tomu nebude rozumet +# ale je to celkem flex + +print(gen_primes(int(input("zadej cislo : ")))) + +# je to dost pomalejsi nez to predtim ale je to rozhodne vic cool +``` \ No newline at end of file diff --git a/4/erastotenovo_sito.md b/4/erastotenovo_sito.md new file mode 100644 index 0000000..501e5eb --- /dev/null +++ b/4/erastotenovo_sito.md @@ -0,0 +1,53 @@ +# erastotenovo_sito.py +```python +# yeehaw +# budeme hledat prvocisla +# fakt super +# zacnu od udelani funkce ktera bere +# horni hranici intervalu a vrati mi seznam +# vsech prvocisel do tyto hranice + +# generate_primes(10) ma vyhodit [2, 3, 5, 7] +def generate_primes(lim): # lim je horni hranice intervalu + nums = list(range(2, lim)) # seznam vsech cisel od 2 do lim + primes = [] # prazny seznam + + x = nums[0] # ulozime si prvni cislo + # ktery je prvocislo + while x < int(lim**0.5): # staci ze hledam do odmocniny z lim + # teoreticky bych mohl napsat jenom + # while nums[0] < lim + # ale je to pomalejsi + # jo a int() mi z toho udela cele cislo + # coz odmocnina neni + x = nums[0] # aktualizace x, ma smysl az po prvnim cyklu + # prvocislo + + temp = [] # temporary seznam do kteryho budeme kopirovat + + primes.append(x) # ukladame prvocislo do seznamu prvocisel + + for i in nums: # prochazime nums a snazime se rasove cistit + # cili nechat jenom cisla ktery nejsou delitelna nove pridanym + # prvocislem + if i % x: + temp.append(i) # temp nam slouzi jako budouci nums + + nums = temp # pozirame temp a aktualizujeme nums + + primes += nums # jinak by mi chybely cisla protoze jsem nahore + # napsal : + # while x< int(lim**0.5) + # kdybych to tam nenapsal tak tohle muzu vynechat + + return primes # vracim cisla + +print(generate_primes(int(input("zadej cislo : ")))) +# tohle je mozna trochu prasacky +# mohl jsem to rozepsat jako : + +# i = int(input("zadej cislo : ")) +# print(generate_primes(i)) + +# ale nechtelo se mi lol +``` \ No newline at end of file diff --git a/4/nejbigdick.md b/4/nejbigdick.md new file mode 100644 index 0000000..363a3a3 --- /dev/null +++ b/4/nejbigdick.md @@ -0,0 +1,9 @@ +# nejbigdick.py +```python +# tady te mam docente +def gp(n): + return [n[0]] + gp([i for i in n[1:] if i%n[0] != 0]) if n else [] # mnohem rychlejsi + +print(gp(range(2, int(input('zadej cislo : '))))) +# touche +``` \ No newline at end of file diff --git a/4/vic_bigdick_sito.md b/4/vic_bigdick_sito.md new file mode 100644 index 0000000..9722ea1 --- /dev/null +++ b/4/vic_bigdick_sito.md @@ -0,0 +1,13 @@ +# vic_bigdick_sito.py +```python +# Sire Kubisi, tady jsem vas dobehl +# Tohle single line sito je lepsi, kratsi a rychlejsi +# (Meril jsem to pomoci timeit) + +from functools import reduce + +def primes(n): + return reduce(lambda l, x: [y for y in l if y==x or y%x!=0], range(2, n), range(2, n)) + +print(primes(int(input("Zadej cislo: ")))) +``` \ No newline at end of file diff --git a/README.md b/README.md index f156005..366c0ff 100644 --- a/README.md +++ b/README.md @@ -8,20 +8,30 @@ Učí profesor Kubis a docent Veškrna. + [if](1/if) + [interpretace](1/interpretace) + [komentare](1/komentare) ++ [kricici_lukas](1/kricici_lukas) + [operace](1/operace) + [promenne](1/promenne) + [python_interpreter](1/python_interpreter) ++ [sude_nebo_liche](1/sude_nebo_liche) + [zakladni_funkce](1/zakladni_funkce) ## 2 ++ [umocnovani](2/umocnovani) + [while](2/while) ## 3 ++ [fizzbuzz](3/fizzbuzz) + [for](3/for) + [funkce](3/funkce) + [range](3/range) + [seznam](3/seznam) +## 4 ++ [bigdick_sito](4/bigdick_sito) ++ [erastotenovo_sito](4/erastotenovo_sito) ++ [nejbigdick](4/nejbigdick) ++ [vic_bigdick_sito](4/vic_bigdick_sito) + ## [5](5) ## [6](6) @@ -37,3 +47,7 @@ Učí profesor Kubis a docent Veškrna. ## [9](9) +## ++ [code_gen](code_gen) ++ [site_gen](site_gen) + diff --git a/code_gen.md b/code_gen.md new file mode 100644 index 0000000..a745965 --- /dev/null +++ b/code_gen.md @@ -0,0 +1,23 @@ +# code_gen.py +```python +#!/usr/bin/python3 + +from site_gen import get_ext +import os + +def mkformat(name, lines): + result = [] + result.append(f'# {name}\n') + result.append('```python\n') + result += lines + result.append('```') + return result + +if __name__=='__main__': + files = [(i + '.py', i + '.md') for i in get_ext('.', '.py')] + + for py, md in files: + with open(py) as p: + with open(md, 'w') as m: + m.writelines(mkformat(os.path.split(p.name)[1], p.readlines())) +``` \ No newline at end of file diff --git a/code_gen.py b/code_gen.py index e69de29..f4eff12 100755 --- a/code_gen.py +++ b/code_gen.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 + +from site_gen import get_ext +import os + +def mkformat(name, lines): + result = [] + result.append(f'# {name}\n') + result.append('```python\n') + result += lines + result.append('```') + return result + +if __name__=='__main__': + files = [(i + '.py', i + '.md') for i in get_ext('.', '.py')] + + for py, md in files: + with open(py) as p: + with open(md, 'w') as m: + m.writelines(mkformat(os.path.split(p.name)[1], p.readlines())) diff --git a/site_gen.md b/site_gen.md new file mode 100644 index 0000000..4a8c5d8 --- /dev/null +++ b/site_gen.md @@ -0,0 +1,59 @@ +# site_gen.py +```python +#!/usr/bin/python3 + +import os +from functools import reduce + +def get_ext(path, ext): + results = [] + for i in os.listdir(path): + if i[0] == '.': + continue + if os.path.isdir(i): + results = results + get_ext(os.path.join(path, i), ext) + else: + name, extension = os.path.splitext(i) + if extension == ext: + results.append(os.path.join(path, name)) + return results + +def mkformat(files): + result = [] + files = [list(os.path.split(i)) for i in files] + files = path_dict(files) + + for key in files: + if 'README' in files[key]: + result.append(f'## [{key}]({key})') + else: + result.append(f'## {key}') + for name in [i for i in sorted(files[key]) if i != 'README']: + result.append(f'+ [{name}]({os.path.join(key, name)})') + result.append('') + + return result + + +def path_dict(files): + di = dict() + for x, y in files: + if not di.get(x): + di[x] = [] + di[x].append(y) + return di + +if __name__=='__main__': + prefix = [] + if os.path.exists('PREFIX.md'): + with open('PREFIX.md') as p: + prefix = p.readlines() + + files = sorted([i[2:] for i in get_ext('.', '.md') if i != './README' and i != './PREFIX']) + + with open('README.md', 'w') as f: + to_write = mkformat(files) + to_write = [i + '\n' for i in to_write] + to_write = prefix + to_write + f.writelines(to_write) +``` \ No newline at end of file diff --git a/site_gen.py b/site_gen.py index 94c944e..a535a29 100755 --- a/site_gen.py +++ b/site_gen.py @@ -3,16 +3,16 @@ import os from functools import reduce -def get_mds(path): +def get_ext(path, ext): results = [] for i in os.listdir(path): if i[0] == '.': continue if os.path.isdir(i): - results = results + get_mds(os.path.join(path, i)) + results = results + get_ext(os.path.join(path, i), ext) else: name, extension = os.path.splitext(i) - if extension == ".md": + if extension == ext: results.append(os.path.join(path, name)) return results @@ -47,7 +47,7 @@ if __name__=='__main__': with open('PREFIX.md') as p: prefix = p.readlines() - files = sorted([i[2:] for i in get_mds('.') if i != './README' and i != './PREFIX']) + files = sorted([i[2:] for i in get_ext('.', '.md') if i != './README' and i != './PREFIX']) with open('README.md', 'w') as f: to_write = mkformat(files)