Команды Brainfuck
1.
2.
3.
4.
5.
6.
7.
8.
1.
> — переместить указатель данных на одну ячейку вправо.2.
< — переместить указатель данных на одну ячейку влево.3.
+ — увеличить значение в текущей ячейке на 1.4.
- — уменьшить значение в текущей ячейке на 1.5.
. — вывести значение текущей ячейки как символ.6.
, — ввести символ и сохранить его значение в текущей ячейке.7.
[ — если значение текущей ячейки равно 0, перейти вперёд по тексту программы до соответствующей команды ].8.
] — если значение текущей ячейки не равно 0, вернуться назад по тексту программы до соответствующей команды [.
Технологии Чайника
Команды Brainfuck 1. > — переместить указатель данных на одну ячейку вправо. 2. < — переместить указатель данных на одну ячейку влево. 3. + — увеличить значение в текущей ячейке на 1. 4. - — уменьшить значение в текущей ячейке на 1. 5. . — вывести значение…
Вроде язык простой, но люди делают на нём что-то сложное
Не знаю откуда это у меня взялось, но...
Значитс.. есть в брейнфак ещё символы:
1. : — читает из ячейки памяти число, не переводя его в символ ASCII
2. ; — аналогично первому, только записывает число без перевода
3. # — добавляет в стак значение
4. $ — убирает из стака значение
С последними двумя не особо разобрался, но как я понял - это удобная вещь, в том плане, что это переменная, к которой можно обращаться из любой ячейки памяти
;>;[-<+>]<:
Значитс.. есть в брейнфак ещё символы:
1. : — читает из ячейки памяти число, не переводя его в символ ASCII
2. ; — аналогично первому, только записывает число без перевода
3. # — добавляет в стак значение
4. $ — убирает из стака значение
С последними двумя не особо разобрался, но как я понял - это удобная вещь, в том плане, что это переменная, к которой можно обращаться из любой ячейки памяти
Технологии Чайника
Не знаю откуда это у меня взялось, но... ;>;[-<+>]<: Значитс.. есть в брейнфак ещё символы: 1. : — читает из ячейки памяти число, не переводя его в символ ASCII 2. ; — аналогично первому, только записывает число без перевода 3. # — добавляет в стак значение…
Да, действительно
Я с помощью # добавил в стак значение 1, после чего с помощью $ удалил его из стака, при этом написав его во второй ячейке
Я с помощью # добавил в стак значение 1, после чего с помощью $ удалил его из стака, при этом написав его во второй ячейке
;+[->,.<]
Хотел написать этот код раньше, но использовал , вместо ;
В общем.. Вы пишите цифру, которая обозначает сколько вы хотите считать символов, после чего пишите слово и сколько цифр вы вписали, столько и выведет букв слова
Я сошёл с ума и под вдохновением от brainfuck создал... Brainfun!
from random import randint
MemoryStep = 0 # Выбранная ячейка памяти от 0 до 31
Memory = [] # Ячейки памяти
for i in range(32):
Memory.append(0)
CodeStep = 0 # Какой символ сейчас компилируется
Code = list(input("Вставьте код:\n\n"))
print("\n")
try:
while True:
if Code[CodeStep] == ">":
MemoryStep += 1
if MemoryStep > 31:
MemoryStep = 0
elif Code[CodeStep] == "<":
MemoryStep -= 1
if MemoryStep < 0:
MemoryStep = 31
elif Code[CodeStep] == ".":
print(Memory[MemoryStep])
elif Code[CodeStep] == "+":
Memory[MemoryStep] += 1
if Memory[MemoryStep] > 255:
Memory[MemoryStep] = 0
elif Code[CodeStep] == "-":
Memory[MemoryStep] -= 1
if Memory[MemoryStep] < 0:
Memory[MemoryStep] = 255
elif Code[CodeStep] == ",":
Memory[MemoryStep] = int(input(f"[(,){CodeStep};(S){MemoryStep}]: "))
if Memory[MemoryStep] < 0:
Memory[MemoryStep] = 0
elif Memory[MemoryStep] > 255:
Memory[MemoryStep] = 255
CodeStep += 1
except IndexError:
pass
OutMemory = ""
for i in Memory:
OutMemory += str(f"{i} ")
print(OutMemory)
Технологии Чайника
Я сошёл с ума и под вдохновением от brainfuck создал... Brainfun! from random import randint MemoryStep = 0 # Выбранная ячейка памяти от 0 до 31 Memory = [] # Ячейки памяти for i in range(32): Memory.append(0) CodeStep = 0 # Какой символ сейчас компилируется…
В будущем я буду дополнять этот файл новыми командами, так как это позволяет код... А вообще я удивлён тому, как мой мозг может оперировать данными дома, в то время как когда мне это необходимо, то я думать не могу чисто физически
Здесь пока что нет циклов или чего-то ещё, но это не сложно исправить теперь
Возможно я указал не всё:
MemoryStep - указывает на то, какая "ячейка памяти" сейчас выбрана
Memory - это в общем все "ячейки памяти", от чего следует, что Memory[MemoryStep] - показывает что внутри выбранной ячейки памяти
Code и CodeStep работает примерно аналогично
Так же я забыл о том, что портировал randint и не использовал его.. я случайно.. исправлю это позже
Здесь пока что нет циклов или чего-то ещё, но это не сложно исправить теперь
Возможно я указал не всё:
MemoryStep - указывает на то, какая "ячейка памяти" сейчас выбрана
Memory - это в общем все "ячейки памяти", от чего следует, что Memory[MemoryStep] - показывает что внутри выбранной ячейки памяти
Code и CodeStep работает примерно аналогично
Так же я забыл о том, что портировал randint и не использовал его.. я случайно.. исправлю это позже
Чутка поправил:
from random import randint
MemoryStep = 0 # Выбранная ячейка памяти от 0 до 31
Memory = [] # Ячейки памяти
for i in range(32):
Memory.append(0)
CodeStep = 0 # Какой символ сейчас компилируется
Code = list(input("Вставьте код:\n\n"))
print("\n")
Stack = 0
try:
while True:
if Code[CodeStep] == ">":
MemoryStep += 1
if MemoryStep > 31:
MemoryStep = 0
elif Code[CodeStep] == "<":
MemoryStep -= 1
if MemoryStep < 0:
MemoryStep = 31
elif Code[CodeStep] == ".":
print(Memory[MemoryStep])
elif Code[CodeStep] == "+":
Memory[MemoryStep] += 1
if Memory[MemoryStep] > 255:
Memory[MemoryStep] = 0
elif Code[CodeStep] == "-":
Memory[MemoryStep] -= 1
if Memory[MemoryStep] < 0:
Memory[MemoryStep] = 255
elif Code[CodeStep] == ",":
Memory[MemoryStep] = int(input(f"[(,){CodeStep};(S){MemoryStep}]: "))
if Memory[MemoryStep] < 0:
Memory[MemoryStep] = 0
elif Memory[MemoryStep] > 255:
Memory[MemoryStep] = 255
elif Code[CodeStep] == "r":
Memory[MemoryStep] = randint(0, 255)
elif Code[CodeStep] == "$":
Stack = Memory[MemoryStep]
elif Code[CodeStep] == "#":
Memory[MemoryStep] = Stack
Stack = 0
CodeStep += 1
except IndexError:
pass
OutMemory = ""
for i in Memory:
OutMemory += str(f"{i} ")
print("\n\n[Memory]:", OutMemory)
print("[Stack]:", Stack)
Сейчас я вспомнил, что когда я создавал коды на brainfuck, то думал, что неплохо было бы его где-то использовать, так как если не усложнять язык раздуванием из мухи слона, то brainfuck - удобный способ оперировать данными в виде ячеек данных... Поэтому у меня появилась мысль: может сделать библиотеку из brainfun и тогда любой сможет его использовать в своих кодах на питоне с целью управления данными?
В любом случае будет две вариации кода: лёгкая, куда вставляешь код и он компилируется и потяжелее, в которой можно задать количество ячеек памяти и прочее...
В любом случае будет две вариации кода: лёгкая, куда вставляешь код и он компилируется и потяжелее, в которой можно задать количество ячеек памяти и прочее...
BrainFun (v1.1)(c).zip
4.2 KB
Создал свой BrainFun! Теперь там куча функций!
Вот пример кода, который выводит "Hello!":
Вот пример кода, который выводит "Hello!":
++++++++++$*$*$*--------:>+++++$*$*$*$*>+++++$*$*$<*+:>>+++++$*$*$*$*>+++++$*$*$<*++++++++::>>+++++$*$*$*$*>+++++$*$*$<*+++++++++++:>>+++++$*$*$*-------:c«
Если я превратил brainfuck в brainfun, то следующим мне надо учить whitespace?