#!/usr/bin/env python3

def gen_abba(n, h='h', o='o'):
  s = h
  while len(s) < n:
    t = ''.join([o if x == h else h for x in s])
    s += t
  return s[:n]

def rotate(s, x):
  if x < 0: x = len(s) - ((len(s) - x) % len(s))
  x %= len(s)
  return s[x:] + s[:x]

def gen_horizontal(a, b, n, m):
  grid = [gen_abba(b)]
  field = []
  for i in range(n):
    field += [rotate(gen_abba(m), m-i*i)]
  return (grid, field)

def gen_vertical(a, b, n, m):
  grid, field = gen_horizontal(b, a, m, n)
  grid = [''.join([grid[j][i] for j in range(b)]) for i in range(a)]
  field = [''.join([field[j][i] for j in range(m)]) for i in range(n)]
  return (grid, field)

def gen_square1(a, b, n, m):
  u = gen_abba(a*b, 'x', 'y')
  v = gen_abba(n*m, 'x', 'y')
  grid = [u[i*b:(i+1)*b] for i in range(a)]
  field = [v[i*m:(i+1)*m] for i in range(n)]
  return (grid, field)

def write_case(name, grid1, grid2):
  print('writing case {}...'.format(name))
  with open('data/secret/{}.in'.format(name), 'w') as fin:
    for g in (grid1, grid2):
      print('{:d} {:d}'.format(len(g), len(g[0])), file=fin)
      for i in g:
        print(i, file=fin)

write_case('10-hoho-h', *gen_horizontal(a=1, b=1000, n=100, m=2000))
write_case('11-hoho-v', *gen_vertical(a=1000, b=1, n=2000, m=100))
write_case('12-hoho-sq', *gen_square1(a=100, b=100, n=500, m=500))
