Hanzifuck
Hanzifuck is a esolang made by Mihai Popa. It's Brainfuck, but you only use Chinese characters (Hanzi) instead of symbols to make programs.
What to do? Just speak Chinese!
Idea by None1 and PrySigneToFry!
Table
Command | Brainfuck equivalent | Description |
---|---|---|
乐 |
>
|
Move the pointer to the right |
蓝 |
<
|
Move the pointer to the left |
音 |
+
|
Increment the memory cell at the pointer |
你 |
-
|
Decrement the memory cell at the pointer |
还 |
.
|
Output the character signified by the cell at the pointer |
行 |
,
|
Input a character and store it in the cell at the pointer |
咖 |
[
|
Jump past the matching 啡 if the cell at the pointer is 0
|
啡 |
]
|
Jump back to the matching 咖 if the cell at the pointer is nonzero
|
Everything other than "乐","蓝","音","你","还","行","咖" and "啡" is a comment and it's ignored. But if you comment with these, it's executed as a command and it's a error.
Examples
Hello, World!
音音音音音音音音咖乐音音音音音音音音蓝你啡乐音音音音音音音音还乐音音音音音音音音咖乐音音音音音音音音音音音音蓝你啡乐音音音音音还音音音音音音音还还音音音还乐音音音音音音音音咖乐音音音音音蓝你啡乐音音音音还你你你你你你你你你你你你还蓝蓝蓝蓝音音音音音音音音音音音音音音音还乐乐还音音音还你你你你你你还你你你你你你你你还乐乐音还
Implementer
Python
Note: edited by myself. See the Numberfuck interpreter, coded by ChatGPT. Still is optimized for everything, including printing the full lyrics of the song Never Gonna Give You Up.
def interpret(): code = input("Enter Hanzifuck code: ") memory = [0] * 30000 pointer = 0 output_string = "" code_length = len(code) code_pointer = 0 loop_stack = [] commands = { '乐': lambda: nonlocal_pointer('+'), '蓝': lambda: nonlocal_pointer('-'), '音': lambda: increment_memory(), '你': lambda: decrement_memory(), '还': lambda: output_to_string(), '行': lambda: take_input(), '咖': lambda: start_loop(), '啡': lambda: end_loop() } def nonlocal_pointer(op): nonlocal pointer if op == '+': pointer += 1 else: pointer -= 1 def increment_memory(): nonlocal memory, pointer memory[pointer] = (memory[pointer] + 1) % 256 def decrement_memory(): nonlocal memory, pointer memory[pointer] = (memory[pointer] - 1) % 256 def output_to_string(): nonlocal memory, pointer, output_string output_string += chr(memory[pointer]) def take_input(): nonlocal memory, pointer user_input = input("Enter input (1 character): ") memory[pointer] = ord(user_input[0]) def start_loop(): nonlocal memory, pointer, code_pointer, loop_stack if memory[pointer] == 0: count = 1 while count != 0 and code_pointer < code_length - 1: code_pointer += 1 if code[code_pointer] == '咖': count += 1 elif code[code_pointer] == '啡': count -= 1 else: loop_stack.append(code_pointer) def end_loop(): nonlocal code_pointer, loop_stack if memory[pointer] != 0: code_pointer = loop_stack[-1] else: loop_stack.pop() while code_pointer < code_length: command = code[code_pointer] if command in commands: commands[command]() code_pointer += 1 print("Output:", output_string) interpret()
And easier version by PrySigneToFry:
import sys def hzfsck(code): s=[] matches={} tape=[0]*1000000 for i,j in enumerate(code): if j=='咖': s.append(i) if j=='啡': m=s.pop() matches[m]=i matches[i]=m cp=0 p=0 while cp<len(code): if code[cp]=='音': tape[p]=(tape[p]+1)%256 if code[cp]=='你': tape[p]=(tape[p]-1)%256 if code[cp]=='还': c=sys.stdin.read(1) tape[p]=(ord(c) if c else 0)%256 if code[cp]=='行': print(chr(tape[p]),end='') if code[cp]=='乐': p+=1 if code[cp]=='蓝': p-=1 if code[cp]=='咖': if not tape[p]: cp=matches[cp] if code[cp]=='啡': if tape[p]: cp=matches[cp] cp+=1 hzfsck(sys.stdin.read())
Computational class
Hanzifuck is turing-complete because Brainfuck, Mariofuck and Numberfuck are also turing-complete!
See also
- 锟斤拷烫烫烫fuck, another variant with hanzi
- 脑子爆掉, a more clear variant for Chinese people (Source of inspiration: Zhihu)