import os
import random
import sys

MAX_N = 50
MAX_TEMP = 40
MIN_TEMP = -20

CASE = 1
DEST = os.path.join(os.getcwd(), '../data/secret')

def next_file(short_desc=None, long_desc=None):
    global CASE
    basename = os.path.join(DEST, '%02d' % CASE)
    CASE += 1
    if short_desc is not None:
        basename += '-' + short_desc
    if long_desc is not None:
        with open(basename+'.desc', 'w') as desc_out:
            desc_out.write(long_desc)
    return open(basename+'.in', 'w')

def save_case(T, short_desc=None, long_desc=None, shuffle_adj_list=True):
    n = len(T)
    assert 1 <= n <= MAX_N
    assert MIN_TEMP <= min(T)
    assert max(T) <= MAX_TEMP
    sys.stderr.write('save case n=%d\n' % n)
    f = next_file(short_desc, long_desc)
    f.write('%d\n' % n)
    f.write('%s\n' % ' '.join(map(str, T)))
    f.close()

    
def random_case(n):
    save_case([random.randint(MIN_TEMP, MAX_TEMP) for _ in range(n)], short_desc='random')


def main():
    random.seed(13)
    for _ in range(5):
        n = random.randint(5, 10)
        random_case(n)
    for _ in range(5):
        n = random.randint(11, MAX_N-10)
        random_case(n)
    for _ in range(5):
        n = random.randint(MAX_N-9, MAX_N)
        random_case(n)
    random_case(MAX_N)
    random_case(MAX_N)

    save_case(range(MIN_TEMP, MIN_TEMP + MAX_N), short_desc='ascending')
    save_case(range(MAX_TEMP, MAX_TEMP - MAX_N, -1), short_desc='descending')
    save_case([MAX_TEMP]*MAX_N, short_desc='constant')
    save_case([MAX_TEMP, MIN_TEMP]*(MAX_N/2), short_desc='alternating')
    save_case([MIN_TEMP, MAX_TEMP]*(MAX_N/2), short_desc='alternating')

    save_case([MAX_TEMP]*3, short_desc='n3')
    save_case([MAX_TEMP, MIN_TEMP, MAX_TEMP]*3, short_desc='n3')
    save_case([-1, 0, 1]*3, short_desc='n3')
    save_case([1, 0, -1]*3, short_desc='n3')
    save_case([0, 0, 0]*3, short_desc='n3')
    
if __name__=='__main__':
    main()
