Автограммы

в 21:24, , рубрики: автореферентность, квайн, куайн, ненормальное программирование, рекурсия, метки: , , ,

В связи с тем, что моя первая статья, Мультиязыковые квайны, похоже, понравилась коллегам-программистам, хочу продолжить и написать ещё несколько статей про всякие автореферентные штуки. Меня всегда поражала автореферентность — рекурсия, фракталы, квайны, человеческое самосознание… Сейчас я начну разглагольствовать и мне совершенно справедливо накидают чего-нибудь нехорошего в карму. Я лучше посоветую прочитать «Гёдель Эшер Бах» Хофштадтера тем, кто ещё не читал. Это гениальная книга и гимн автореферентности. А теперь к делу.

Автограммы.

Пока программисты пишут квайны на разных языках, те, кто программирование ещё по каким-либо причинам не освоил, могут заняться не менее интересным и довольно таки похожим делом — сочинением автограмм.
Автограммы — это предложения на естественном языке, описывающие собственную внутреннюю структуру.

Примеры автограмм:

Это предложение на русском языке.

В этом предложении пять слов.

В этом предложении один предлог, одно указательное местоимение, семь существительных, одно прилагательное, один союз и шесть числительных.

Фраза, которую Вы читаете, содержит: два слова «Фраза», два слова «которую», два слова «Вы», два слова «читаете», два слова «содержит», двадцать пять слов «слова», два слова «слов», два слова «двоеточие», два слова «запятых», два слова «по», два слова «левых», два слова «и», два слова «правых», два слова «кавычек», два слова «а», два слова «также», два слова «точку», два слова «одно», два слова «одну», двадцать два слова «два», три слова «три», два слова «четыре», три слова «пять», четыре слова «двадцать», два слова «тридцать», одно двоеточие, тридцать запятых, по двадцать пять левых и правых кавычек, а также одну точку.

В этом предложении есть сорок четыре буквы «а», тридцать четыре буквы «б», сорок четыре буквы «в», одна буква «г», тридцать четыре буквы «д», двадцать семь букв «е», одна буква «е», две буквы «ж», одна буква «з», триднацать букв «и», одна буква «й», тридцать шесть букв «к», две буквы «л», шесть букв «м», девятнадцать букв «н», двадцать букв «о», три буквы «п», восемнадцать букв «р», одиннадцать букв «с», тридцать шесть букв «т», тридцать четыре буквы «у», одна буква «ф», одна буква «х», пятнадцать букв «ц», семь букв «ч», четыре буквы «ш», одна буква «щ», одна буква «ъ», восемнадцать букв «ы», двадцать одна буква «ь», две буквы «э», одна буква «ю», и три буквы «я».

Принцип построения таких предложений (ну кроме самого первого примера) чем-то похож на принцип построения квайнов — оставляются незаполненные места, обеспечивающие «свободу облегания» и заполняются когда остальная часть автограммы уже дописана.

А теперь задачка (решить можно с применением программирования (признаюсь, сам решил именно так), а можно на бумаге).
Несколько лет назад я придумал максимально упрощённую разновидность автограмм. Автограмма представляет из себя список пар. Первый элемент в паре — цифра, второй — число раз, которое эта цифра встречается в списке.
Ну например:

0 — 1
1 — 2
2 — 3
3 — 2

Читать это следует так:
0 в этой автограмме встречается 1 раз, 1 — 2 раза, 2 — 3 раза, 3 — 2 раза.

Полной автограммой обзовём автограмму, которая использует все цифры системы счисления.
Для двоичной системы полная автограмма может выглядеть например так:

0 — 11
1 — 100

Для троичной, так:

0 — 10
1 — 10
2 — 2

Для четверичной вполне подойдёт самая первая из приведённых автограмм (она будет являться автограммой так же в любой системе с основанием большим четырёх, но там она не будет полной).

Ну и вопрос — можно ли составить полную автограмму для любой системы счисления и существует ли универсальный метод для составления таких автограмм.

Решение задачки здесь: dl.dropboxusercontent.com/u/20473637/autograms_solution.txt

Автор: gromozeka1980

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js