Вирощування послідовності квінтів


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" - так, чому ця дивна вимога?
— nicael

6
@nicael Тому що це зростаюча послідовність квінти .
— Conor O'Brien

Чому p10 друкує себе, а не p11? Це ускладнює проблему трохи складніше.
— SuperJedi224

@ SuperJedi224 Тому що просто немає p11.
— Conor O'Brien

Цей виклик був би набагато цікавішим, якби вбудовані функції відвідання були заборонені.
— Денніс

Відповіді:


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. Нові рядки в кожній програмі є важливими. Насправді, Серйозно автоматично додає нові рядки до своїх результатів, хочете ви цього чи ні. Це просто підраховує кількість нових рядків у висновку, і як тільки це число перевищує 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
Цікаво! Це дійсно можливо.
— Conor O'Brien

7
Чи можу я пояснити, що лейк дивитись у кожного чару
— Seadrus

3
Слід зазначити, що для цього використовується вбудований квінінг, Qякий висуває вихідний код програми.
— Мартін Ендер

(І далі зазначалося, що загальна довжина буде десь біля 150 байт довше без вказаного вбудованого.)
— квінтопія

Для цього виклику дозволено вбудовані функції адвітування.
— Conor O'Brien

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
Це красиво подивитися.
— Conor O'Brien

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 байти. Випробуваний тут
— Пуховик

Я використовую UTF-8.
— Mama Fun Roll

Я забув, що це ESmin 2, тому я прочитав лічильник знаків як "2214 знаків": P
— Conor O'Brien
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.