메뉴 건너뛰기

BLENDING

자유 게시판

[난해한코딩대회] 엄랭(Umjunsik-lang)

19이상엽2020.09.07 01:25조회 수 555추천 수 1댓글 3

    • 글자 크기

출처: https://github.com/rycont/umjunsik-lang/

 

카카오TV 방송인 엄준식이라는 분의 이름에서 따온 언어입니다. 근데 어떻게 엄준식이 사람이름이지 ㅋㅋㅋㅋㅋ

 

[엄랭 설명]

엄랭 코드는 "어떻게"로 시작해서 "이 사람이름이냐!"로 끝나며 각 명령은 한줄한줄 구분됩니다.

 

자료형에는 정수만 있고 온점, 반점의 갯수로 나타냅니다. 온점 갯수만큼 1을 더하고 반점 갯수만큼 1을 뺍니다.

공백으로 구분하면 양 옆의 정수를 곱합니다. 따라서 "... ....."는 3 * 5 = 15입니다.

 

엄 명령어로 변수에 정수를 대입할 수 있습니다. 음절 개수번째 변수에 값을 대입합니다.

어 명령어로 변수에 접근할 수 있습니다. 음절 개수번째 변수의 값을 불러옵니다.

 

식ㅋ 명령어로 문자를 출력합니다. 식과 ㅋ 사이에 오는 정수를 유니코드로 변환해서 콘솔에 출력합니다.

 

동탄 명령어는 if문입니다. 동탄{정수}?{명령}에서 정수가 0이라면 명령을 실행하며 그렇지 않으면 다음 줄로 넘어갑니다.

준 명령어는 goto문입니다. 뒤에 오는 정수번째 줄로 이동합니다.

 

[실행화면]

 

[소스코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
어떻게
엄...
어어어엄..........
어어엄.........
어어어어어엄.
어어어어엄어어어 어어어어
어엄어어어어 어어어어
식어어어어어,,,ㅋ
식어어.ㅋ
동탄어어어어어어?준...................
어어어어어엄어어어어어어,
식어어........ㅋ
어어엄어 어어어 어.
식어어어,,,,,,,,,ㅋ
어어어엄어어어........
식어어어어,,,,,ㅋ
식어어어어,,,,,,,ㅋ
준... ...
식.. .. ...........ㅋ
식.. .. .. .. ..ㅋ
어엄...
어어엄...........
식어어 어어어 ..ㅋ
식어어어어,,,,,,,,ㅋ
엄어어어 어어어,,
식어..ㅋ
식어어어 어어어,ㅋ
식어어어, 어어어,ㅋ
엄..... ..
어어어엄어어어
어어엄어 어
어엄어어어.....
식어어ㅋ
식어어어어 어ㅋ
식어어,,ㅋ
화이팅!
이 사람이름이냐!
cs

 

 

[소스코드 설명]

Welcome, Blending을 10진수로 변환하면 87 101 108 99 111 109 101 44 32 66 108 101 110 100 105 110 103 인데 이 정수를 만들어서 식ㅋ 명령어로 출력했습니다.

처음에는 큰 숫자를 다루기 어려워서 변수로 만들어서 곱하고 더하고 빼고 하는 식으로 수를 키우고 코드를 더 다채롭게 했습니다.

10번째 줄의 동탄 코드는 Welcome에 있는 두 개의 e를 같은 출력문으로 출력하도록 해서 코드를 약간 더 복잡하게 만들었습니다. 18번째 줄의 준 명령어로 9번째 줄로 이동하는 것을 볼 수 있습니다.

 

원본 깃허브의 Deno 구현체가 잘 작동안해서 Node.js 타입스크립트로 옮겨썼습니다. 아래 코드로 실행해볼 수 있어요.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import {promises as fs} from 'fs'
import * as readline from 'readline';
 
function getLines() {
    return new Promise<string[]>((resolve,  reject) => {
        const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout
        });
        
        const lines: string[] = []
        rl.on('end', () => { 
            resolve(lines);
        });
 
        rl.on('line', (line) => {
            lines.push(line);
        });
    })
}
 
export const run = async (code: string) => {
  let proceed = code.split('\n')
 
  const encoder = new TextEncoder()
 
  if(!(proceed[0=== '어떻게' && proceed.slice(-1)[0] === '이 사람이름이냐!')) {
    console.log("Error: 어떻게 이 코드가 엄랭이냐ㅋㅋ")
    return
  }
 
  const variables: number[] = []
  if(code.includes('~')) proceed = code.split('~')
  let pointer = 0;
  const numberify = async (a: string): Promise<number> => {
    let numbered = 0;
    if(a.includes(' ')) return (await Promise.all(a.split(' ').map(numberify))).reduce((a, b) => a * b)
    if(a.includes('식?')) {
      for await (const line of await getLines()) {
        a = a.replace('식?''.'.repeat(Number(line)))
        break
      }
    }
    if(a.includes('어')) numbered += variables[a.split('어').length - 1]
    if(a.includes('.')) numbered += a.split('.').length - 1
    if(a.includes(',')) numbered -= a.split(',').length - 1
    return numbered
  }
  const stringify = (unicode: number) => {
    return String.fromCharCode(unicode)
  }
 
  const parseOperation = async (operation: string): Promise<number|undefined> => {
    if (operation.includes('동탄'&& operation.includes('?')) { //IFGOTO
      const condition = await numberify(operation.substring(2, operation.lastIndexOf('?'+ 1))
      if (condition === 0) {
        return parseOperation(operation.substr(operation.lastIndexOf('?'+ 1))
      }
      return
    }
    if(operation.includes('엄')) {
      const variablePointer = operation.split('엄')[0].split('어').length
      const setteeValue = await numberify(operation.split('엄')[1])
      variables[variablePointer] = setteeValue
    }
    if (operation.includes('식'&& operation[operation.length - 1=== '!') {
      await process.stdout.write(encoder.encode(String(await numberify(operation.slice(1-1)))))
    }
    if (operation.includes('식'&& operation[operation.length - 1=== 'ㅋ') {
      if (operation === '식ㅋ'console.log()
      await process.stdout.write(encoder.encode(stringify(await numberify(operation.slice(1-1)))))
    }
    if(operation.includes('준')) {
      pointer = await numberify(operation.split('준')[1]) - 1
    }
    if (operation.indexOf('화이팅!'=== 0) {
      return numberify(operation.split('화이팅!')[1])
    }
  }
 
  while(proceed[pointer] !== '이 사람이름이냐!') {
    const operation = proceed[pointer++]
    const evaludated = await parseOperation(operation)
    if(evaludated) return evaludated
  }
}
 
const bootstrap = async (path: string) => {
  try {
    if(await fs.stat(path)) run(await fs.readFile(path, 'utf-8'))
  } catch(e) {
    console.log(`Error: ${path}가 어떻게 파일이름이냐ㅋㅋ`)
  }
}
 
if(process.argv[2]) bootstrap(process.argv[2])
cs
    • 글자 크기
[난해한 코딩대회] brain F**k (by 15전민기) [전국과제자랑]결과발표 (by 19방은영)

댓글 달기

댓글 3
번호 제목 글쓴이 날짜 조회 수
공지 [난해한코딩대회] 예시4 16황지우 2020.08.31 424
공지 회장님 훈화말씀16 16황지우 2020.03.16 8651
공지 스맛폰으로 BLENDING홈피 새글 알림 받기1 BLENDING 2011.06.25 195347
3782 [전국강의자랑] 생각해보니까 실시간이 있었네 16황지우 2020.12.20 116
3781 [전국강의자랑] 참여합니다!! 20최건우 2020.12.20 99
3780 [전국강의자랑] 참여합니다. 19장효순 2020.12.19 71
3779 [전국강의자랑] 참여합니다2 19이민경 2020.12.19 128
3778 [전국강의자랑] 참여합니다.6 19김서현 2020.12.18 156
3777 [전국강의자랑] 제가 강의 가장 많이 들었을 줄 알았는데...1 19임영서 2020.12.18 89
3776 [전국강의자랑] 참여합니다. 20유태서 2020.12.16 73
3775 [전국강의자랑] 참여합니다1 19박성호 2020.12.14 96
3774 [난해한코딩대회] 제가 할 수 있는 가장 난해한 코드입니다아...1 19임영서 2020.09.13 251
3773 [난해한코딩대회] Java2 19방은영 2020.09.13 290
3772 [난해한 코딩대회] brain F**k2 15전민기 2020.09.13 279
[난해한코딩대회] 엄랭(Umjunsik-lang)3 19이상엽 2020.09.07 555
3770 [전국과제자랑]결과발표 19방은영 2020.07.08 132
3769 다들 과제 개수가 이게 뭐야!!!3 16황지우 2020.07.08 4388
3768 [전국과제자랑]학점을많이수강을안해서 많지는않지만 올려봅니당1 20김기현 2020.07.02 3429
3767 [전국과제자랑] 다들 즐거운 방학 되세요.1 19김서현 2020.07.01 84
3766 [전국과제자랑] 1등은..제가 아닐까 조심스레 예상행봅니다..^^6 19이민경 2020.06.29 131
3765 [전국과제자랑] 앞으로 다신 없을 수많은 과제들...2 15배성원 2020.06.29 3211
3764 [전국과제자랑] 1학기 너무 힘들었어요,,4 20유태서 2020.06.29 94
3763 [전국과제자랑] ㅈㄱㄱㅈㅈㄹ6 19정재호 2020.06.29 77
이전 1 2 3 4 5 6 7 8 9 10... 190다음
첨부 (0)
위로