Растущая последовательность Куайна


18

Вы должны написать последовательность из 10 программ, p1 p2 ... p10которые удовлетворяют следующим свойствам:

  • pKпечатает pK+1на Kот 1 до 9
  • p10 печать p10
  • Когда первые Kпрограммы объединяются, результирующая программа p1...pKпечатается p1...pK.
  • Каждая программа pKдолжна быть больше в байтах, чем предыдущая программа pK-1.
  • Все программы должны быть на одном языке.
  • Разрешены встроенные функции цитирования (например, Qво многих языках).

Ваша оценка - это сумма байтов в 10 программах. Поскольку существует всего десять программ, вы должны сделать свои коды максимально короткими. Удачи.


«Каждая программа pK должна иметь больший размер в байтах, чем предыдущая программа pK-1» - ну почему это странное требование?
Ника

6
@nicael Потому что это растущая последовательность Квина.
Конор О'Брайен

Почему p10 печатает сам, а не p11? Это делает проблему немного сложнее.
SuperJedi224

@ SuperJedi224 Потому что просто нет p11.
Конор О'Брайен

Этот вызов был бы намного интереснее, если бы встроенные функции квинирования были запрещены.
Деннис

Ответы:


15

Серьезно, 245 байтов:

Все десять программ объединены:

Q9ucQc8<WX#dXεj0WX.Q9ucQc8<WX#dXεj0WX.
Q9ucQc8<WX#dXεj0WX.

Q9ucQc8<WX#dXεj0WX.


Q9ucQc8<WX#dXεj0WX.



Q9ucQc8<WX#dXεj0WX.




Q9ucQc8<WX#dXεj0WX.





Q9ucQc8<WX#dXεj0WX.






Q9ucQc8<WX#dXεj0WX.







Q9ucQc8<WX#dXεj0WX.









Есть невидимые символы, которые становятся видимыми при выполнении, странное свойство байта 7F. Заменяющие строки в каждой программе важны. На самом деле, Seriously автоматически добавляет новые строки в свой вывод, хотите вы этого или нет. Это просто подсчитывает количество новых строк в выводе, и как только это число превышает 8, оно удаляет последний символ вывода. Таким образом, p1..pKбудет печатать p1..pKдля всех K> 4.

Q                                  Push source code.
 9uc                               Push \n
    Qc                             Push the number of times it appears in source code.
      8<                           Check if it appears more than 8 times.
        WX     0WX                 If so, run the included code.
          #dX                      Convert string to list, dequeue and discard a newline.
             εj                    Join list back into string.
                  .                Print and halt. (Invisible byte here.)

1
Интересный! Это действительно возможно.
Конор О'Брайен

7
Могу ли я дать объяснение лейк Ват каждый чар дуз
Seadrus

3
Следует отметить, что для этого используется встроенная функция квинтинга, Qкоторая выдвигает исходный код программы.
Мартин Эндер

(И далее отметил, что общая длина была бы где-то около 150 байтов больше без указанной встроенной функции.)
Quintopia

Встроенные функции квинтинга разрешены для этой задачи.
Конор О'Брайен

9

JavaScript (ES6), 985

function f(x){x<0||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(0);
 function f(x){x<1||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(1);
  function f(x){x<2||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(2);
   function f(x){x<3||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(3);
    function f(x){x<4||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(4);
     function f(x){x<5||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(5);
      function f(x){x<6||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(6);
       function f(x){x<7||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(7);
        function f(x){x<8||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(8);
         function f(x){x<9||x>8||f.a||x++;alert(f.a=' '.repeat(x)+`${f}f(${x});`.replace(/\d/,x))}f(9);

Я неправильно понял правила ранее, поэтому мой предыдущий ответ был неверным.

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

Отказ от ответственности: сейчас действительно поздно, поэтому все вышеперечисленное может быть совершенно неверным.


Я не думаю, что вам нужно alertиз-за функции вывода.
Mama Fun Roll

О, я вижу, неважно.
Mama Fun Roll

Вы можете удалить конечные точки с запятой, сэкономив 20 байтов. (Обязательно обновите строку шаблона внутри.)
Mama Fun Roll

1
@ ՊՓԼՃՐՊՃՈԲՍԼ Я думаю, что точки с запятой нужны для объединения, так как я не включаю символы новой строки.
grc

Тогда, неважно.
Mama Fun Roll

9

Javascript ES6, 1935 байт

Десять программ:

a=_=>{t=`a=${a};a()`;setTimeout(_=>alert(t.length>200?t:";".repeat(82)+'a=_=>{/*  */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\\s)+g,"$0$1"):u)};a();'))};a()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*  */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*   */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*    */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*     */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*      */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*       */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*        */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*         */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;a=_=>{/*          */u=";".repeat(82)+"a="+a+";a();";this.t?t+=u:alert(u.length<198?u.replace((\s)+g,"$0$1"):u)};a();

4
На это красиво смотреть.
Конор О'Брайен

4
Все эти лишние точки с запятой только для того, чтобы программа 2 была длиннее, чем программа 1 ...
SuperJedi224

Не могли бы вы использовать регулярное выражение (\S)+и подстановку, $0$1чтобы сохранить несколько байтов?
Мартин Эндер

@ MartinBüttner Возможно, я попробую сегодня днем
SuperJedi224

2

𝔼𝕊𝕄𝕚𝕟 2, 214 символов / 334 байта

ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
 ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
  ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
   ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
    ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
     ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
      ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
       ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
        ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)
         ℹ)đ ⬭ď9)?ℹ):⬭+ℹ)

Try it here (Firefox only).

объяснение

ℹ)                // quine function: get source code
  đ ⬭ď9)          // are there 9 spaces in a row anywhere in the source?
        ?ℹ):      // if so, pass the source itself to implicit output
            ⬭+ℹ) // otherwise, add a leading space to the source and pass to implicit output

Программа рассчитывает поиск 9 пробелов подряд, что является количеством ведущих пробелов в 10-й программе. Если он находит совпадение, то выводится исходный код; в противном случае выводится исходный код, ведущий пробелом.


Какую кодировку вы используете? Кажется, в кодировке ISO 8859-1 284 байта. Проверено здесь
Downgoat

Я использую UTF-8.
Mama Fun Roll

Я забыл, что это ESmin 2, поэтому я прочитал количество символов как «2214 символов»: P
Конор О'Брайен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.