UEC25 Advent Calendar 2025
この記事は、UEC25アドベントカレンダー2025の12月24日の記事です。
前日の記事はまだ公開されていません。
翌日の記事はまだ公開されていません。
はじめに
前置き
さて、毎年12月24日の午後6時から12月25日の深夜2時までは、一年で一番Fuckが行われる8時間だと言われています。
実際にその通りで、私は今夜Fuckする予定がありますし、私の友人も今夜Fuckするそうです。
学校で会う友達、少し気になっているクラスの女子、教授、街中ですれ違う前髪がチャーミングな青いニットの女性、一日10時間画面に向かってゲームをしている学生、ミニスカ、マフラー、もふもふ手袋の防寒ばっちりな女子高生、みんな、これからFuckします。
気だるげにすき家で働いている大学生バイト、ぴょこんと寝癖のついた図書館の司書さん、看護婦さん、みなこれからFuckします。
ですが、電通大生にそんなやつはいないでしょう。1
悲しいですね。
そんな皆さんが、今からでも好きなFuckができるように、この記事に好きなFuckのやり方を全部書くことにしました。
この記事を読めば、皆さんFuckができるようになるはずです。
みんなでFuckしましょう。
環境について
1. Pythonの実行環境を用意する
"{} Python 環境構築".format(PCの環境)
などで調べれば、Pythonの実行環境の作り方は分かると思います。
Colabなどでも、工夫すれば実行できます。
2. Fuckの実行環境を用意する
- 自分のFuckファイルを好きな場所に保存してください
-
COMMANDSの内容を、自分の好きなFuckに置き換えた下のコードを、適当なファイル名で保存する(後に詳しく説明します) - 今保存したPythonコードを実行して、実行するFuckファイルを選ぶと、Fuckされます
COMMANDS = {
"+":"くり",
"-":"クリ",
">":"ます",
"<":"マス",
"[":"す",
"]":"ス",
",":"Xmas",
".":"めりー",
}
#!/usr/bin/python
#
# Brainfuck Interpreter
# Copyright 2011 Sebastian Kaspari
#
# Usage: ./brainfuck.py [FILE]
# From http://code.activestate.com/recipes/134892/
# "getch()-like unbuffered character reading from stdin
# on both Windows and Unix (Python recipe)"
import sys
import os.path
try:
import tkinter.filedialog
except:
pass
class _Getch:
"""Gets a single character from standard input. Does not echo to the
screen."""
def __init__(self):
try:
self.impl = _GetchWindows()
except ImportError:
self.impl = _GetchUnix()
def __call__(self): return self.impl()
class _GetchUnix:
def __init__(self):
import tty, sys
def __call__(self):
import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
class _GetchWindows:
def __init__(self):
import msvcrt
def __call__(self):
import msvcrt
return msvcrt.getch()
getch = _Getch()
def execute(filename):
f = open(filename, "r")
evaluate(f.read())
f.close()
def evaluate(code):
code = cleanup(list(code))
bracemap = buildbracemap(code)
cells, codeptr, cellptr = [0], 0, 0
while codeptr < len(code):
command = code[codeptr]
if command == ">":
cellptr += 1
if cellptr == len(cells):
cells.append(0)
if command == "<":
cellptr = 0 if cellptr <= 0 else cellptr - 1
if command == "+":
cells[cellptr] = cells[cellptr] + 1 if cells[cellptr] < 255 else 0
if command == "-":
cells[cellptr] = cells[cellptr] - 1 if cells[cellptr] > 0 else 255
if command == "[" and cells[cellptr] == 0:
codeptr = bracemap[codeptr]
if command == "]" and cells[cellptr] != 0:
codeptr = bracemap[codeptr]
if command == ".":
sys.stdout.write(chr(cells[cellptr]))
if command == ",":
cells[cellptr] = ord(getch())
codeptr += 1
def cleanup(code):
return "".join(
filter(lambda x: x in [".", ",", "[", "]", "<", ">", "+", "-"], code)
)
def buildbracemap(code):
temp_bracestack, bracemap = [], {}
for position, command in enumerate(code):
if command == "[":
temp_bracestack.append(position)
if command == "]":
start = temp_bracestack.pop()
bracemap[start] = position
bracemap[position] = start
return bracemap
def convert_to_bf(code:str) -> str:
i = 0
bf_code = ""
while i < len(code):
for command, symbol in COMMANDS.items():
if code[i:i+len(symbol)] == symbol:
bf_code += command
i += len(symbol)
break
else:
i += 1
continue
return bf_code
def convert_from_bf(bf_code):
code = ""
for s in bf_code:
for command, symbol in COMMANDS.items():
if s == command:
code += symbol
return code
def main():
if len(sys.argv) == 2:
print(sys.argv)
execute(sys.argv[1])
return
try:
file_name = tkinter.filedialog.askopenfilename()
except:
print("この環境では動かないようです")
return
if file_name is None:
return
with open(file_name) as f:
evaluate(convert_to_bf(f.read()))
if __name__ == "__main__":
main()
具体的な使い方
動作確認用
上のコードのCOMMANDSを特に変更しなければ、XmaxFuckを実行することができます。
UEC Xmas fuckと出力するXmasFuckのコードを下に置いておくので、ファイルに保存して試してみてもいいでしょう。
くりくりくりくりくりくりくりくりくりくりくりくりくりくりくりくりくりすますくりくり
くりくりくりマスクリスますめりーますくりくりくりくりくりくりくりすますくりくりくり
くりくりくりくりくりくりくりマスクリスますクリめりークリクリめりーますくりくりくり
くりくりくりくりくりすますくりくりくりくりマスクリスますめりーますくりくりくりくり
くりくりくりくりくりくりすますくりくりくりくりくりくりくりくりくりマスクリスます
クリクリめりーますくりくりくりくりくりくりくりくりくりくりくりすますくりくりくり
くりくりくりくりくりくりくりマスクリスますクリめりーますくりくりくりくりくりくり
くりくりくりくりすますくりくりくりくりくりくりくりくりくりくりマスクリスますクリ
クリクリめりーますくりくりくりくりくりくりくりくりくりくりくりすますくりくりくり
くりくりくりくりくりくりくりマスクリスますくりくりくりくりくりめりーますくりくり
くりくりくりくりくりくりくりくりすますくりくりくりマスクリスますくりくりめりーます
くりくりくりくりくりくりくりくりくりくりすますくりくりくりくりくりくりくりくりくり
くりマスクリスますくりくりめりーますくりくりくりくりくりくりくりくりくりくりくり
くりすますくりくりくりくりくりくりくりくりくりくりマスクリスますクリクリクリめりー
ますくりくりくりくりくりくりくりくりくりくりすますくりくりくりくりくりくりくりくり
くりくりマスクリスますクリめりーますくりくりくりくりくりくりくりくりくりくりくりす
ますくりくりくりくりくりくりくりくりくりくりマスクリスますクリクリクリめりーます
くりくりくりくりくりくりくりくりくりくりめりー
COMMANDS変更の詳しいやり方
お察しがつくと思われますが、"+":"UEC",というように変更した場合、インクリメントに対応する文字がUECになります。
余計なところを消さないよう気をつけてください。
例として、フレンズ Kemonoとして動かす場合のCOMMANDSを置いておきます。
COMMANDS = {
"+":"たーのしー!",
"-":"すっごーい!",
">":"たのしー!",
"<":"すっごーい!",
"[":"うわー!",
"]":"わーい!",
",":"おもしろーい!",
".":"なにこれなにこれ!",
}
謝辞 Thanks
Code
githubhttps://github.com/pocmo/Python-Brainfuck
こちらのコードを改造させていただきました。ありがとうございます
I've fucked this fucking. Fuck you.
-
この記事は電通大のアドベントカレンダーとして作成されました。 ↩