Вращение-безопасный Quine


17

Напишите правильную квинну , каждое вращение которой само по себе является правильной квинной.

Например, если ваш исходный код abcdef, то:

  • abcdef будет выводить abcdef
  • bcdefa будет выводить bcdefa
  • cdefab будет выводить cdefab
  • defabc будет выводить defabc
  • efabcd будет выводить efabcd
  • fabcde будет выводить fabcde

Вращение «производится путем разделения строки на две части и изменения их порядка» .

счет

Это . Кратчайший ответ в байтах побеждает. Применяются стандартные лазейки .


Таким образом, у меня могла быть программа, aaabbbи я мог бы сказать, что следующий поворот - это bbbaaa? Или следующий поворот должен быть baaabb?
бета-распад

1
Следующий поворот есть baaabb.
Дрянная Монахиня

1
Дополнительное примечание: стандартная квинта Fission - это другая квинета, безопасная для вращения: независимо от того, как вы ее поворачиваете, она всегда будет печатать исходный исходный код.
Мартин Эндер

1
Если квин на языке составляет один байт, это обман?
MD XF

1
Является ли это правильный Куайн?
TSH

Ответы:


10

Motorola MC14500B Машинный код , 1 байт

1-байтовая оценка получается из двух 4-битных инструкций:

0000 0010

объяснение

Motorola MC145008 - это однокристальный однобитный статический CMOS-процессор, оптимизированный для решения задач. Процессор размещен в 16-контактном корпусе и содержит 16 четырехбитных инструкций. Команды выполняют логические операции над данными, появляющимися в однобитовой двунаправленной линии данных, и данными в однобитовом накопительном регистре результатов в ICU. Все операции выполняются на битовом уровне.

Контакты процессора пронумерованы:

Назначение пин-кода

Инструкции представлены на чип на штырьках 4 команд, ( I0, I1, I2, I3), и защелкиваются в регистр команд, (IR), на отрицательной текущей кромке X1.

В терминах непрофессионала, контакты с 4 по 7, используются, чтобы представить регистру команд команду, но биты интерпретируются в обратном порядке. Например, инструкция 0001будет иметь контакт № 7 в верхнем состоянии и контакты 6–4 в нижнем состоянии.

Инструкции декодируются в управляющей логике (CTL), посылая соответствующие логические команды в LU. Дальнейшее декодирование также выполняется в CTL , чтобы отправить число выходных флагов ( JMP, RTN, FLGO, FLGF) к контактам 9 до 12. Они используются в качестве внешних управляющих сигналов и остаются активными в течение полного периода тактового сигнала после отрицательного продолжающегося края X1.

Или, просто, контакты 9 через 12 являются выходными флагами FLGF, FLGO, RTNи JMP, соответственно. Обратите внимание, что данные обычно мультиплексируются на WRITEвывод (вывод № 2). Выводы флажка вывода аналогичны кодам выхода других языков.

Каждая из инструкций ICU выполняется за один такт.

Повороты

Начальная позиция

0000    NOPO
0010    LDC

Тактовые часы:

  1. NOPOИнструкция помещает контактный # 10 ( FLGO) в высоком состоянии. До следующего тактового периода выходные флажки выводятся в нижнее состояние.
  2. В LDCинструкции загружает комплемент значения шины данных в регистр результата, не влияя на контакты выходного флага.

Таким образом, в течение двух тактов программы были представлены выводы выходного флага 0100 0000, которые считываются в обратном порядке (например, входные выводы) 0000 0010, или исходные инструкции.

Первое вращение

0010    LDC
0000    NOPO

Тактовые часы:

  1. Дополнение к шине данных загружается в регистр результатов без влияния выводов флажка вывода.
  2. Вывод № 10 включен в верхнее состояние.

В течение этих двух тактов были представлены выходные флажки 0000 0100, которые при обращении являются инструкциями 0010 0000.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.