Досконалість / недосконалість
Так, це було весело.
Досконалість / недосконалість завершується лише за наявності нескінченних досконалих чисел. Якщо є, це називається досконалістю, а якщо їх немає, воно називається недосконалістю. Поки ця таємниця не буде вирішена, вона носить обидва імені.
Ідеальне число - це число, дільники якого складають число, тому шість - це досконале число, оскільки 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)
: віднімає y від x. за допомогою рядків, видаляє останній len (y) з x
m(x, y)
: помножує х і у. Якщо використовується з рядками, множимо x разів len y.
d(x, y)
: ділить х на у
o(x)
: друкує х
i(x, y)
: якщо x оцінюється як істинне, то воно виконує функцію 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)
: виконує х, тоді у.
Щоб отримати еквівалент 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-й блок коду виконується щоразу, коли лічильник досягає ідеального числа. Якщо існує нескінченна кількість досконалих чисел, воно може циклічити нескінченно довго і Тюрінг завершений, інакше це не так.
Саморозрядний циклічний перекладач тегів, який містить 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)))))}
Його можна розширити, щоб прийняти будь-яку кількість символів як вхідних даних. Це може зайняти нескінченний вклад, але лише за наявності нескінченних ідеальних чисел!