Sequência Quine crescente

18

Você deve escrever uma sequência de 10 programas p1 p2 ... p10que atendam às seguintes propriedades:

  • pKgravuras pK+1para K1-9
  • p10 impressões p10
  • Quando os primeiros Kprogramas são concatenados, o programa resultante é p1...pKimpresso p1...pK.
  • Cada programa pKdeve ter um tamanho de bytes maior que o programa anterior pK-1.
  • Todos os programas devem estar no mesmo idioma.
  • Funções embutidas de quining (por exemplo, Qem muitos idiomas) são permitidas.

Sua pontuação é a soma das contagens de bytes dos 10 programas. Como existem apenas dez programas, você deve tornar seus códigos o mais curtos possível. Boa sorte.

Conor O'Brien
fonte
"Cada programa pK deve ter um tamanho de bytes maior que o programa anterior pK-1" - huh, por que esse requisito estranho?
Nicael
6
@nicael Porque é uma sequência de quine crescente .
Conor O'Brien
Por que o p10 imprime a si mesmo e não o p11? Isso torna o problema um pouco mais difícil.
precisa saber é o seguinte
@ SuperJedi224 Porque simplesmente não há p11.
Conor O'Brien
Esse desafio teria sido muito mais interessante se as funções embutidas de quining tivessem sido proibidas.
Dennis

Respostas:

15

Sério, 245 bytes:

Todos os dez programas concatenaram:

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.









Existem caracteres invisíveis que se tornam visíveis quando executados, uma propriedade estranha do byte 7F. As novas linhas finais em cada programa são significativas. De fato, o Seriously acrescenta automaticamente novas linhas à sua saída, quer você queira ou não. Isso conta apenas o número de novas linhas na saída e, assim que esse número exceder 8, ele excluirá o último caractere da saída. Como tal, p1..pKimprimirá p1..pKpara todos os 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.)
quintopia
fonte
1
Interessante! É de fato possível.
Conor O'Brien
7
eu posso haz explicação Leik wat cada caractere duz
Seadrus
3
Deve-se notar que isso usa o quining interno Qque empurra o código fonte do programa.
Martin Ender
(E ainda, que o comprimento total estaria em algum lugar na vizinhança de 150 bytes mais tempo sem disse built-in.)
quintopia
Funções internas de quining são permitidas para esse desafio.
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);

Eu não entendi as regras anteriormente, então minha resposta anterior estava incorreta.

Este usa função de elevação em vez de variável, por isso não depende do programa 10. Na verdade, acho que é uma solução para qualquer combinação de dois ou mais programas concatenados.

Isenção de responsabilidade: é realmente tarde agora, então tudo acima pode estar completamente errado.

grc
fonte
Eu não acho que você precise alertpor causa da saída da função.
Mama Fun Roll
Oh, entendo, deixa pra lá.
Mama Fun Roll
Você pode retirar o ponto e vírgula, economizando 20 bytes. (Certifique-se de atualizar o interior corda modelo, também.)
Mama Fun rolo
1
@ ՊՓԼՃՐՊՃՈԲՍԼ Acho que o ponto e vírgula é necessário para concatenação, já que não estou incluindo as novas linhas.
grc
Deixa pra lá de novo então.
Mama Fun Roll
9

Javascript ES6, 1935 bytes

Dez programas:

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();
SuperJedi224
fonte
4
É lindo de se olhar.
Conor O'Brien
4
Todas essas vírgulas extra apenas para garantir que o programa 2 é mais longo do que o programa 1 ...
SuperJedi224
Você poderia usar o regex (\S)+e a substituição $0$1para salvar alguns bytes?
Martin Ender
@ MartinBüttner Provavelmente, vou tentar esta tarde
SuperJedi224
2

𝔼𝕊𝕄𝕚𝕟 2, 214 caracteres / 334 bytes

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

Try it here (Firefox only).

Explicação

ℹ)                // 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

O programa conta as pesquisas por 9 espaços seguidos, que é a quantidade de espaços iniciais no 10º programa. Se encontrar uma correspondência, o código fonte será emitido; caso contrário, o código-fonte, liderado por um espaço, é emitido.

Mama Fun Roll
fonte
Qual codificação você está usando? Parece ter 284 bytes na codificação ISO 8859-1. Testado aqui
Downgoat 04/01
Estou usando UTF-8.
Mama Fun Roll
Eu esqueci que é o ESmin 2, então li a contagem de caracteres como "2.214 caracteres": P
Conor O'Brien