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


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.