Совершенство / Несовершенство
Вот это было весело.
Совершенство / Несовершенство завершается только при наличии бесконечных совершенных чисел. Если есть, это называется Совершенство, а если нет, это называется Несовершенство. Пока эта тайна не разгадана, она держит оба имени.
Совершенное число - это число, сумма делителей которого равна числу, поэтому шесть - это идеальное число, потому что 1+2+3=6
.
Совершенство / Несовершенство имеет следующие функции:
Совершенство / Несовершенство основано на стеке, с индексированным стеком.
Команды:
p(x, y)
: выталкивает x в стек в y-й позиции.
z(x, y)
: выталкивает x в стек в y-й позиции, избавляется от того, что было ранее в y-й позиции
r(x)
: удаляет x-й элемент из стека
k(x)
: возвращает x-й элемент в стеке
a(x, y)
: добавляет х и у. При использовании со строками он складывает их в порядке xy.
s(x, y)
: вычитает у из х. со строками, удаляет последний len (y) из x
m(x, y)
: умножает x и y. Если используется со строками, умножается в x раз на len y.
d(x, y)
: делит х на у
o(x)
: печатает х
i(x, y)
: если x имеет значение true, тогда он выполняет функцию y
n()
: возвращает счетчик, на котором вызывается кодовый блок.
q()
: возвращает длину стека
t()
: пользовательский ввод
e(x, y)
: Если x является целым числом, если x и y имеют одно и то же значение, то это возвращает 1. Если y является строкой, то она получает длину y. если x является строкой, то он преобразует y в строку и проверяет, совпадают ли они, и, если они есть, возвращает 1. В противном случае возвращается 0.
l(x, y)
: если x больше, чем y, он возвращает 1. Если есть строка, то она использует длину строки.
b()
: останавливает программу.
c(x, y)
: работает x, затем y.
Чтобы получить эквивалент Python and
, умножьте два значения вместе. Для or
, добавьте значения, и для not
, вычтите значение из 1. Это работает, только если значение равно 1 или 0, что может быть достигнуто путем деления числа на себя.
Типы данных: целые числа и строки. Строки обозначены ''
, а все нецелые числа округлены.
Синтаксис:
Код состоит из вложенных функций внутри десяти {}
с. Например, программа , которая получит на входы и распечатать их добавили бы: {o(a(t(), t()))}
. На заднем плане программы есть счетчик, который начинается с 0 и прогрессирует на 1 каждый раз, когда он выполняет блок кода. Первый блок кода работает в 0
и так далее. После выполнения десяти кодовых блоков шестой выполняется каждый раз, когда счетчик достигает идеального числа. Вам не нужно иметь все десять блоков кода для работы программы, но вам нужно 7, если вы хотите сделать цикл. Чтобы лучше понять , как работает этот язык, запустите следующую программу, которая печатает счетчик каждый раз , когда счетчик достигает совершенное число: {}{}{}{}{}{}{o(n())}
.
Переводчик можно найти здесь: repl.it/GL7S/37 . Либо выберите 1 и введите свой код в терминале, либо вставьте код на code.perfect
вкладке и выберите 2 при запуске. Это будет иметь смысл, когда вы попробуете это.
Доказательство полноты по Тьюрингу / отсутствие полноты по Тьюрингу.
Согласно этой статье об обмене стеками разработки программного обеспечения , завершение Тьюринга должно иметь возможность условного повторения перехода и иметь возможность чтения или записи в память. Он может считывать / записывать память в виде стека и выполнять цикл из-за того, что 6-й кодовый блок выполняется каждый раз, когда счетчик достигает идеального числа. Если существует бесконечное число совершенных чисел, оно может бесконечно зацикливаться и является полным по Тьюрингу, в противном случае это не так.
Интерпретатор Self Bitwise Cyclic Tag, который принимает 5 символов, 1 или 0, в качестве входных данных:
{p(t(),0)}{(p(t(),0)}{p(t(),0)}{p(t(),0)}{p(t(),0)}{p(0,0)}{c(i(e(k(s(q(),k(0))),0),c(r(q()),i(l(k(0),0),z(s(k(0),1),0)))),i(e(k(s(q(),k(0))),1),c(z(a(k(0),1),0),i(e(k(q()),1),p(k(s(q(),k(0))),1)))))}
Его можно расширить, чтобы принимать любое количество символов в качестве входных данных. Это может занять бесконечный ввод, но только если есть бесконечные совершенные числа!