from __future__ import print_function
from sys import stdin
import random
import time

def printf(str, *args):
    print(str % args, end='')

# 해당 프로그램에 대한 안내를 출력
print("\n\t\t\t    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510")
print("\t\t\t    \u2502        페인트공 알고리즘 프로그램         \u2502")
print("\t\t\t    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n")


t1= ["" for i in range(5)]          # T1에 입력될 문장 5개를 위한 문자열 선언
t2= []                              # T2에 입력될 문장을 위한 문자열 선언
t1t2=[]                             # 접합 T1·T2를 저장하기 위한 문자열 선언


fp1=open("T1data.txt", 'w')             # 랜덤 데이터를 저장하기 위한 텍스트 파일 생성 및 열기
fp2=open("pointer_result.txt", 'w');    # 첫 번째 알고리즘으로 접합을 저장하기 위한 텍스트 파일 생성 및 열기
fp3=open("notpoint_result.txt", 'w');   # 두 번째 알고리즘으로 접합을 저장하기 위한 텍스트 파일 생성 및 열기

# 길이가 20000인 랜덤 문자열 5개를 생성하고 텍스트 파일에 저장
printf("\n\t\t\t      문자열 T1이 \"T1data.txt\" 파일에서 생성되었다.\n")
for i in range(0, 5):
    for j in range(0, 20000):
        temp=chr(random.randrange(0, 26)%26+65)
        fp1.write(temp)
        t1[i] = t1[i] + temp
    fp1.write("\n")

# 3개 문장을 입력받고 T2에 추가
printf("\n\t\t\t      문자열 T2에 대해 3개의 문자열을 입력하라.\n")
numbers = ["첫", "두", "세"]
for i in range(0, 3):
    printf("\t\t\t      %s번째 문자열 : "%numbers[i])
    printf("\r\r\t\t\t\t\t\t")
    t2.append(stdin.readline().strip("\n"))
    
# T2에 대한 Image를 출력
printf("\n\t\t\t      Image of T2\n")
for i in range(0, 3):
    printf("\t\t\t      <%s>\n" % t2[i])

# 접합 T1·T2를 계산하는 페인트공 알고리즘의 실행 시간으로 출력하고 접합을 텍스트 파일에 저장
printf("\n\t\t\t      페인트공 알고리즘 : T1\u25cfT2")

printf("\n\t\t\t      \"pointer_result.txt\" 파일이 생성되었다.\n")
start = time.perf_counter()

for g in range(0, 100):
    for j in range(0, 3):
        for i in range(0, 5):
            t1t2.append(t1[i] + t2[j])

end = time.perf_counter()

for i in range(0, 15):
    fp2.write("\t\t\t      %s\n" % t1t2[i])

printf("\t\t\t      실행 시간 : %.3f(ms)\n", (end-start)*1000.0)

# 접합 T1·T2를 계산하는 ‘반환값을 주는 포인터 없는 알고리즘’의 실행 시간으로 출력하고 접합을 텍스트 파일에 저장
printf("\n\t\t\t      반환값을 주는 포인터 없는 알고리즘 : T1\u25cfT2")
printf("\n\t\t\t      \"notpointer_result.txt\" 파일이 생성되었다.\n")
start = time.perf_counter()

for g in range(0, 100):
        for j in range(0, 3):
            for i in range(0, 5):
                for l in range(0, 20001):
                    try:
                        if t1[i][l] == "\000":
                            break;
                    except IndexError:
                        break;
                t1t2.append(t1[i] + t2[j])

end = time.perf_counter()
for i in range(0, 15):
    fp3.write("\t\t\t      %s\n" % t1t2[i])
printf("\t\t\t      실행 시간 : %.3f(ms)\n", (end-start)*1000.0)

# 생성된 파일들을 닫음
fp1.close()
fp2.close()
fp3.close()

stdin.readline()
