Mariofuck

Mariofuck is a esolang made by Mihai Popa. It's Brainfuck, but you only use 1-letter names of Nintendo characters instead of symbols to make programs.
== Table ==
Command	Meaning (in full name)	Brainfuck equivalent	Description
M 	Mario 	> 	Move the pointer to the right
L 	Luigi 	< 	Move the pointer to the left
Y 	Yoshi 	+ 	Increment the memory cell at the pointer
C 	Captain Toad 	- 	Decrement the memory cell at the pointer
K 	Lakitu 	. 	Output the character signified by the cell at the pointer
T 	Toad 	, 	Input a character and store it in the cell at the pointer
D 	Toadette 	[ 	Jump past the matching B if the cell at the pointer is 0
B 	Blue Toad 	] 	Jump back to the matching D if the cell at the pointer is nonzero
Everything other than "M","L","Y","C","K","T","D","B" 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!===
YYYYYYYYDMYYYYYYYYLCBMYYYYYYYYKMYYYYYYYYDMYYYYYYYYYYYYLCBMYYYYYKYYYYYYYKKYYYKMYYYYYYYYDMYYYYYLCBMYYYYKCCCCCCCCCCCCKLLLLYYYYYYYYYYYYYYYKMMKYYYKCCCCCCKCCCCCCCCKMMYK
===Rickrolling, by printing all the lyrics of "Never Gonna Give You Up"===
Too long. See here: Mariofuck/Rickroll
===99 Bottles Of Beer===
Quite long. See here: Mariofuck/99 Bottles Of Beer
==Implementer==
===Ruby===
#!/usr/bin/ruby
eval 'm=Hash.new(p=0);'+ARGF.read.gsub(
 /./,
 'M'=>'p+=1;',
 'L'=>'p-=1;',
 'Y'=>'m[p]+=1;',
 'C'=>'m[p]-=1;',
 'D'=>'(',
 'B'=>')while((m[p]&=255)!=0);',
 'K'=>'putc m[p];',
 'T'=>'m[p]=STDIN.getbyte if !STDIN.eof;')
===Python===
====Version 1 (forked from ChatGPT), longer====
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 Mariofuck code: ")
 memory = [0] * 30000
 pointer = 0
 output_string = ""
 code_length = len(code)
 code_pointer = 0
 loop_stack = []
 commands = {
 'M': lambda: nonlocal_pointer('+'),
 'L': lambda: nonlocal_pointer('-'),
 'Y': lambda: increment_memory(),
 'C': lambda: decrement_memory(),
 'K': lambda: output_to_string(),
 'T': lambda: take_input(),
 'D': lambda: start_loop(),
 'B': 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] == 'D':
 count += 1
 elif code[code_pointer] == 'B':
 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()
====Version 2 (created by PrySigneToFry‎), shorter====
import sys
def interpretion(code):
 s=[]
 matches={}
 tape=[0]*1000000
 for i,j in enumerate(code):
 if j=='B':
 s.append(i)
 if j=='D':
 m=s.pop()
 matches[m]=i
 matches[i]=m
 cp=0
 p=0
 while cp<len(code):
 if code[cp]=='Y':
 tape[p]=(tape[p]+1)%256
 if code[cp]=='C':
 tape[p]=(tape[p]-1)%256
 if code[cp]=='K':
 c=sys.stdin.read(1)
 tape[p]=(ord(c) if c else 0)%256
 if code[cp]=='T':
 print(chr(tape[p]),end=)
 if code[cp]=='M':
 p-=1
 if code[cp]=='L':
 p+=1
 if code[cp]=='B':
 if not tape[p]:
 cp=matches[cp]
 if code[cp]=='D':
 if tape[p]:
 cp=matches[cp]
 cp+=1
interpretion(sys.stdin.read())
==Computational class==
Mariofuck is turing-complete because Brainfuck and Numberfuck are also turing-complete!
==See also==
* Numberfuck, a variant with numbers
* 锟斤拷烫烫烫fuck, a variant with hanzis
Category:Languages
Category:Turing tarpits
Category:Low-level
Category:Cell-based
Category:Implemented
Category:Brainfuck equivalents
Category:Brainfuck derivatives
Category:2024
Category:Turing complete