The Way

주어진 텍스트를 출력하는 아희 코드 만들기 본문

잡정보

주어진 텍스트를 출력하는 아희 코드 만들기

Jeonggyun 2019. 8. 14. 05:28

아희 코드로 텍스트를 출력하려면 해당 텍스트의 유니코드에 해당하는 숫자를 2~9를 이용해 만들어야 해서 상당히 번거롭다.

이 과정이 다소 귀찮았던지라, 특정 텍스트를 출력해주는 아희 코드를 만들어주는 코드다.


예를 들어서 '임'을 출력하려면 '임'에 해당하는 유니코드 번호를 알아야 한다.

이 번호는 51076인데, 2~9 사이의 숫자를 이용해서 만들려면 상당히 귀찮을 것이다.


decomposite 함수는 2~9와 덧셈, 곱셈을 이용해 해당 숫자를 만들어준다. 예외적으로 1은 나누기를 이용한다.

음수를 만드는 기능은 넣지 않았는데, 만들고 반받타따를 하면 -1을 곱해주어 만들 수 있다.


아까 나온 숫자인 51076을 만들면 이렇게 된다.

51076 = ((((((3*8)+7)*2*5)+9)*5*8)+9)*4


최대한 큰 수를 이용하도록 코드를 짜서, 최소한은 아니지만 적은 수의 숫자를 이용한다.


이제 각 문자별로 해당하는 유니코드 숫자를 스택에 추가 후 계산하는 아희 코드로 바꾸어주고, 종료 문자 (보통 희를 많이 쓰는 듯)를 추가해주면 완성된다.


def decomposite(n):
    if n == 1:
        return [2, '나', 2]
    if n < 10:
        return [n]
    for i in range(9, 1, -1):
        if n % i == 0:
            return decomposite(n // i) + ['따', i]
    cand = -1
    maxdiv = -1
    for i in range(2, 10):
        for j in range(2, 10):
            if (n - i) % j == 0 and j > maxdiv:
                maxdiv = j
                cand = i
                break
    return decomposite(n - cand) + ['다', cand]

def each(n):
    name = ['', '', '박', '받', '밤', '발', '밦', '밝', '밣', '밞']
    arr = decomposite(n)
    string = ''
    for i in range(len(arr) - 1, -1, -2):
        string += name[arr[i]]
    for i in range(1, len(arr), 2):
        string += arr[i]
    string += '맣'
    return string

def aheui(string):
    ret = ''
    for i in string:
        ret += each(ord(i))
    return ret + '희'

aheui('''임나연''')


이 코드로 출력 문제를 다 조져놨다.


랭작 개꿀 ㅋㅋ


이건 출력 문제는 아니고, 꽤 많은 사람이 푼 문제인데 아희로는 나만 풀었길래 캡처해놨다.


Comments