Generative Grammer

program: stmt program

program: ε

stmt: "return" assign ";"

stmt: assign ";"

assign: equality

assign: equality "=" assign

equality: relational

equality: equality "==" relational

equality: equality "!=" relational

relational: add

relational: relational "<" add

relational: relational "<=" add

relational: relational ">" add

relational: relational ">=" add

add: mul

add: add "+" mul

add: add "-" mul

mul: unary

mul: mul "*" unary

mul: mul "/" unary

unary: term

unary: "+" term

unary: "-" term

term: num

term: ident

term: "(" assign ")"

Union-Find Tree

#include<vector>

struct Unionfind {
  vector<int> par, rank, size;

  Unionfind(int n) : par(n), rank(n), size(n){
    for(int i=0;i<n;i++){
      par[i] = i;
      rank[i] = 0;
      size[i] = 1;
    }
  }

  int find(int x){
    if(par[x] == x){
      return x;
    }
    return par[x] = find(par[x]);
  }

  void unite(int x, int y){
    x = find(x);
    y = find(y);
    if(x == y) return;
    if(rank[x] < rank[y]){
      par[x] = par[y];
      size[y] += size[x];
    }else{
      par[y] = par[x];
      size[x] += size[y];
      if(par[x] == par[y]) rank[x]++;
    }
  }

  int get_size(int x) {
    return size[find(x)];
  }

  bool same(int x, int y){
    return find(x) == find(y);
  }
};

Pagination on GAE python with webapp

I don't know how to deal with session with webapp. So I just add all past stacks as a string with delimiter /, and pass it to the template.

test.py

cursors = self.request.get('cursors')
if cursors:
    list_cursors = cursors.split('/')
    query.with_cursor(list_cursors[-1])
    list_cursors.pop()
    result['previous_cursors'] = '/'.join(list_cursors)

result['has_search_result'] = True
result['query_results'] = [m for m in query.run(limit=LIST_LIMIT)]
result['next_cursors'] = cursors + '/' + query.cursor()

query.with_cursor(query.cursor())
has_next = False
for m in query.run(limit=1):
        has_next = True

result['has_next'] = has_next

test.html

{% if previous_cursors != None %}
  <form action="/admin/expenses" method="get" role="form">
    <input name="email" class="form-control" type="hidden" value={{email}}>
    <input name="cursors" class="form-control" type="hidden" value={{previous_cursors}}>
    <button type="submit" class="btn btn-success ml-2">Previous</button>
  </form>
{% endif %}
{% if has_next %}
  <form action="/admin/expenses" method="get" role="form">
  <input name="email" class="form-control" type="hidden" value={{email}}>
  <input name="cursors" class="form-control" type="hidden" value={{next_cursors}}>
  <button type="submit" class="btn btn-success ml-2">Next</button>
  </form>
{% endif %}