From 1c410da387a3785b5bb8e1868847e7684e9dbe6a Mon Sep 17 00:00:00 2001 From: Dmitry Date: Sun, 19 Jul 2020 14:55:14 +0300 Subject: [PATCH] Initial commit --- .gitignore | 2 + gen_formula.py | 75 +++++++++++++++++++++++++++++ output/placeholder | 0 templates/base.jinja2 | 3 ++ templates/wins_black_formula.jinja2 | 6 +++ templates/wins_formula.jinja2 | 6 +++ templates/wins_red_formula.jinja2 | 6 +++ 7 files changed, 98 insertions(+) create mode 100644 .gitignore create mode 100644 gen_formula.py create mode 100644 output/placeholder create mode 100644 templates/base.jinja2 create mode 100644 templates/wins_black_formula.jinja2 create mode 100644 templates/wins_formula.jinja2 create mode 100644 templates/wins_red_formula.jinja2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f319992 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode/ +output/*.txt diff --git a/gen_formula.py b/gen_formula.py new file mode 100644 index 0000000..8e996da --- /dev/null +++ b/gen_formula.py @@ -0,0 +1,75 @@ +from jinja2 import Environment, FileSystemLoader +import os + +def column_code(num): + result = '' + alfa_count = 1 + ord('Z') - ord('A') + shift = ord('A') - 1 + while num > 0: + if num <= alfa_count: + result = chr(shift + num) + result + num = 0 + else: + cur_chr = ((num -1) % alfa_count) + 1 + num = int((num -1) / alfa_count) + result = chr(shift + cur_chr) + result + return result + + +def column_num(code): + result = 0 + alfa_count = 1 + ord('Z') - ord('A') + shift = ord('A') - 1 + mult = 1 + length = len(code) + while length > 0: + cur_chr = code[-1] + result = result + mult * (ord(cur_chr) - shift) + length -= 1 + if 0 == length: + code = '' + else: + code = code[:-1] + mult *= alfa_count + return result + + +def generate_columns(): + column_start = column_num('H') + column_end = column_num('ZZ') + column_current = column_start + while(column_current <= column_end): + yield column_code(column_current) + column_current += 1 + + +def render_template(name, template): + vals = { + 'сol_start': 'H', + 'row_num': 4, + 'fixed_row': 3, + 'columns': [c for c in generate_columns()] + } + print(template.render(vals)) + + +def init_templates(): + names = ['wins_formula', 'wins_red_formula', 'wins_black_formula'] + templates = {} + env = Environment( + loader=FileSystemLoader(os.path.join(os.path.dirname(os.path.dirname(__file__)),'templates')) + ) + for name in names: + templates[name] = env.get_template(f'{name}.jinja2') + return templates + + +def main(): + templates = init_templates() + for template in templates.items(): + print(template[0], template[1]) + render_template(template[0], template[1]) + + +if __name__ == "__main__": + main() diff --git a/output/placeholder b/output/placeholder new file mode 100644 index 0000000..e69de29 diff --git a/templates/base.jinja2 b/templates/base.jinja2 new file mode 100644 index 0000000..5f3f8ed --- /dev/null +++ b/templates/base.jinja2 @@ -0,0 +1,3 @@ +=SUM( +{% block conditions %}{% endblock %} +) diff --git a/templates/wins_black_formula.jinja2 b/templates/wins_black_formula.jinja2 new file mode 100644 index 0000000..a864a9c --- /dev/null +++ b/templates/wins_black_formula.jinja2 @@ -0,0 +1,6 @@ +{% extends 'base.jinja2' %} +{% block conditions %} +{% for column in columns %} +IF(AND({{column}}{{row_num}}={{column}}${{fixed_row}};{{column}}${{fixed_row}}="Ч");1;0); +{% endfor %} +{% endblock %} \ No newline at end of file diff --git a/templates/wins_formula.jinja2 b/templates/wins_formula.jinja2 new file mode 100644 index 0000000..b777068 --- /dev/null +++ b/templates/wins_formula.jinja2 @@ -0,0 +1,6 @@ +{% extends 'base.jinja2' %} +{% block conditions %} +{% for column in columns %} +IF({{column}}{{row_num}}={{column}}${{fixed_row}};1;0); +{% endfor %} +{% endblock %} \ No newline at end of file diff --git a/templates/wins_red_formula.jinja2 b/templates/wins_red_formula.jinja2 new file mode 100644 index 0000000..37b8061 --- /dev/null +++ b/templates/wins_red_formula.jinja2 @@ -0,0 +1,6 @@ +{% extends 'base.jinja2' %} +{% block conditions %} +{% for column in columns %} +IF(AND({{column}}{{row_num}}={{column}}${{fixed_row}};{{column}}${{fixed_row}}="К");1;0); +{% endfor %} +{% endblock %} \ No newline at end of file