Skip to content

Commit 2df49df

Browse files
authored
Add files via upload
1 parent 3d06e2d commit 2df49df

9 files changed

Lines changed: 246 additions & 0 deletions

File tree

bomb.nyan

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
기지개 {
2+
import time
3+
4+
박스 카운트 = 5
5+
6+
야옹("🚨 비상! 책상 위의 물컵이 떨어지기 직전이다냥!")
7+
야옹("집사가 오기까지 남은 시간...")
8+
9+
꾹꾹이 (카운트 > 0) {
10+
야옹(카운트, "초 전...")
11+
time.sleep(1)
12+
카운트 = 카운트 - 1
13+
}
14+
15+
야옹("콰장창!!! 🌊")
16+
야옹("도망쳐라냥!!! 🐈💨")
17+
} 식빵굽기

diary.nyan

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
기지개 {
2+
그루밍: 집사의 행동을 기록하는 프로그램
3+
4+
야옹("오늘 집사가 무슨 짓을 했는지 기록하겠다냥.")
5+
박스 날짜 = 쫑긋("날짜 입력(예: 2026-01-24): ")
6+
박스 행동 = 쫑긋("집사의 행동: ")
7+
8+
그루밍: 파일 열기 (쓰기 모드 'w')
9+
박스 일기장 = open("cat_diary.txt", "w", encoding="utf-8")
10+
11+
그루밍: 파일에 내용 쓰기
12+
일기장.write("날짜: " + 날짜 + "\n")
13+
일기장.write("관찰: " + 행동 + "\n")
14+
일기장.write("작성자: 고양이\n")
15+
16+
그루밍: 파일 닫기 (필수!)
17+
일기장.close()
18+
19+
야옹("기록 완료! 'cat_diary.txt' 파일을 확인해봐라냥.")
20+
} 식빵굽기

fibo.nyan

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
기지개 {
2+
그루밍: 피보나치 수열 구하기
3+
4+
박스 a = 1
5+
박스 b = 1
6+
박스 횟수 = 0
7+
박스 목표 = 10
8+
9+
야옹("=== 냥보나치 수열 시작 ===")
10+
11+
꾹꾹이 (횟수 < 목표) {
12+
야옹(a, "마리 고양이")
13+
14+
그루밍: 변수 스왑 로직
15+
박스 임시 = a + b
16+
a = b
17+
b = 임시
18+
19+
횟수 = 횟수 + 1
20+
}
21+
22+
야옹("=== 이제 박스가 꽉 찼다냥 ===")
23+
} 식빵굽기

fish.nyan

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
기지개 {
2+
import random
3+
4+
그루밍: 1부터 100 사이의 물고기 위치를 정한다냥
5+
박스 물고기 = random.randint(1, 100)
6+
박스 낚싯대 = 0
7+
박스 시도횟수 = 1
8+
9+
야옹("=== 🎣 물고기 잡기 게임 시작 ===")
10+
야옹("연못 어딘가(1~100)에 물고기가 숨었다냥!")
11+
12+
꾹꾹이 (낚싯대 != 물고기) {
13+
야옹("-----------------------------")
14+
15+
그루밍: 입력받은 문자를 숫자로 변환
16+
박스 입력값 = 쫑긋("어디를 찌를까냥? (숫자 입력): ")
17+
낚싯대 = int(입력값)
18+
19+
간식주면 (낚싯대 < 물고기) {
20+
야옹("물고기는 더 깊은 곳(더 큰 수)에 있다냥!")
21+
}
22+
23+
간식주면 (낚싯대 > 물고기) {
24+
야옹("물고기는 더 얕은 곳(더 작은 수)에 있다냥!")
25+
}
26+
27+
시도횟수 = 시도횟수 + 1
28+
}
29+
30+
야옹("잡았다!! 🐟 월척이다냥!")
31+
야옹("총 ", 시도횟수, "번 만에 잡았다냥.")
32+
} 식빵굽기

gugu.nyan

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
기지개 {
2+
그루밍: 2단부터 9단까지 출력하는 냥냥단
3+
4+
박스 단 = 2
5+
6+
꾹꾹이 (단 < 10) {
7+
야옹("----- ", 단, "단 -----")
8+
9+
박스 수 = 1
10+
꾹꾹이 (수 < 10) {
11+
// 파이썬처럼 콤마로 연결해서 출력 가능
12+
야옹(단, " x ", 수, " = ", 단 * 수)
13+
수 = 수 + 1
14+
}
15+
16+
단 = 단 + 1
17+
야옹("")
18+
}
19+
} 식빵굽기

hello.nyan

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
기지개 {
2+
그루밍: 들여쓰기 테스트
3+
4+
박스 츄르 = 3
5+
6+
꾹꾹이 (츄르 > 0) {
7+
야옹("남은 츄르: ", 츄르)
8+
츄르 = 츄르 - 1
9+
}
10+
11+
간식주면 (츄르 == 0) {
12+
야옹("잘 먹었다냥!")
13+
} 아니면 {
14+
하악질("밥 더 내놔라냥!")
15+
}
16+
} 식빵굽기

lotto.nyan

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
기지개 {
2+
// 파이썬 코드를 그대로 써도 돌아갑니다 (들여쓰기만 맞으면)
3+
import random
4+
5+
야옹("이번 주 로또 번호를 점지해주겠다냥!")
6+
7+
박스 횟수 = 0
8+
꾹꾹이 (횟수 < 6) {
9+
박스 번호 = random.randint(1, 45)
10+
야옹("번호: ", 번호)
11+
횟수 = 횟수 + 1
12+
}
13+
} 식빵굽기

menu.nyan

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
기지개 {
2+
그루밍: 집사에게 메뉴를 물어보고 반응하는 프로그램
3+
4+
야옹("집사야, 오늘 저녁 메뉴가 뭐냥? (참치 / 사료 / 야채)")
5+
6+
// 쫑긋은 파이썬의 input() 입니다.
7+
박스 메뉴 = 쫑긋("메뉴 입력: ")
8+
9+
간식주면 (메뉴 == "참치") {
10+
야옹("최고다냥! 골골송을 불러주겠다냥~ 🎵")
11+
}
12+
간식주면 (메뉴 == "사료") {
13+
야옹("음... 배고프니까 먹어주겠다냥.")
14+
}
15+
간식주면 (메뉴 == "야채") {
16+
하악질("고양이는 육식동물이다!! 저리 치워라냥!")
17+
}
18+
} 식빵굽기

nyan.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import sys
2+
import re
3+
4+
class NyanTranspiler:
5+
def __init__(self):
6+
# 냥스크립트 -> 파이썬 키워드 매핑
7+
self.map = {
8+
r'기지개': 'if __name__ == "__main__"',
9+
r'식빵굽기': 'pass',
10+
r'박스': '', # 변수 선언 삭제
11+
r'야옹': 'print',
12+
r'쫑긋': 'input',
13+
r'꾹꾹이': 'while',
14+
r'간식주면': 'if',
15+
r'아니면': 'else',
16+
r'하악질': 'raise Exception',
17+
r'잡았다': 'True',
18+
r'놓쳤다': 'False',
19+
r'그루밍': '#',
20+
}
21+
22+
def transpile(self, code):
23+
lines = code.split('\n')
24+
py_lines = []
25+
indent_level = 0
26+
27+
for line in lines:
28+
# 1차 정리: 앞뒤 공백 제거
29+
line = line.strip()
30+
if not line: continue
31+
32+
# 1. 닫는 중괄호 '}' 처리
33+
if '}' in line:
34+
indent_level = max(0, indent_level - 1)
35+
line = line.replace('}', '')
36+
37+
# 2. 키워드 치환
38+
for nyan_key, py_key in self.map.items():
39+
line = line.replace(nyan_key, py_key)
40+
41+
# [✨ 추가할 코드] C스타일 주석(//)을 파이썬 주석(#)으로 변환
42+
line = line.replace('//', '#')
43+
44+
# [✅ 중요 수정] 치환 후 '박스 ' 처럼 키워드 뒤에 남은 공백을 다시 한 번 제거!
45+
line = line.strip()
46+
if not line: continue
47+
48+
# 3. 여는 중괄호 '{' 처리
49+
if '{' in line:
50+
line = line.replace('{', ':')
51+
increment_indent = True
52+
else:
53+
increment_indent = False
54+
55+
# 4. 들여쓰기 적용
56+
indent_str = ' ' * indent_level
57+
py_lines.append(f"{indent_str}{line}")
58+
59+
if increment_indent:
60+
indent_level += 1
61+
62+
return '\n'.join(py_lines)
63+
64+
def execute(self, file_path):
65+
try:
66+
with open(file_path, 'r', encoding='utf-8') as f:
67+
source_code = f.read()
68+
69+
py_code = self.transpile(source_code)
70+
71+
# 디버깅: 깔끔해진 코드 확인
72+
# print("=== 📜 변환된 파이썬 코드 ===")
73+
# print(py_code)
74+
# print("===========================\n")
75+
76+
exec(py_code, globals())
77+
78+
except IndentationError as e:
79+
print(f"😿 들여쓰기 오류다냥! 줄을 맞춰라냥: {e}")
80+
except Exception as e:
81+
print(f"😿 실행 중 하악질 발생: {e}")
82+
83+
if __name__ == "__main__":
84+
if len(sys.argv) < 2:
85+
print("사용법: python nyan.py [파일이름.nyan]")
86+
else:
87+
interpreter = NyanTranspiler()
88+
interpreter.execute(sys.argv[1])

0 commit comments

Comments
 (0)