Código fonte GO!

18

Vamos usar a realidade aumentada para caçar pequenas criaturas escondidas no código-fonte. Escreva um programa quine que produza sua própria fonte de código, exceto 5 caracteres consecutivos que serão modificados e que exibirão um PCG-mon :(^_^)

Os 5 caracteres consecutivos podem ser posicionados em qualquer lugar do código fonte (da posição 0até n-5, nsendo o comprimento do código fonte). O código fonte deve ter um comprimento mínimo de 5 caracteres. A cadeia de caracteres (^_^)ou qualquer uma de suas substring de comprimento> = 2 não deve aparecer no código-fonte inicial, apenas na saída.

Exemplo de envio válido:

  • código fonte my source code, saídamy (^_^)e code

Inválido:

  • código fonte (^_^) copy;, saída(^_^) (^_^)

Critérios de vitória

O código mais curto em bytes vence.

Arnaud
fonte
5
Não deve ser excessivamente negativo, mas essa é uma solução generalizada e um x sem problemas com y . Em uma linguagem com um método geral de quining, isso é bastante monótono. Você também não especificou o que deve acontecer se o seu código fonte for 5 bytes ou menos.
FryAmTheEggman 13/09/16
@ Fried Não acho que é possível exibir os 5 caracteres (^_^)com um código-fonte com menos de 5 caracteres? talvez com codificação específica ...
Arnaud
3
Embora eu não esteja certo de que seja possível, neste caso, é bastante trivial criar um programa que imprima mais bytes do que ele contém. Por exemplo, o programa Pyth Gproduz a saída abcdefghijklmnopqrstuvwxyz.
FryAmTheEggman 13/09/16
3
Eu recomendo que os programas tenham no mínimo 6 caracteres, para que ninguém tente, digamos, Bubblegum .
Sp3000 13/09/16
2
@FryAmTheEggman A linha entre um quine generalizado e um interessante generalizado é bastante boa. Minha meta resposta refere-se principalmente a quines em que a única solução viável é obter uma string que representa todo o código-fonte e depois processar essa string. Se há soluções que podem escapar sem criar o código fonte completo em algum momento, acho que isso já permite soluções interessantes (por exemplo, a resposta CJam atualmente líder). Quanto ao do X sem Y, a restrição de substrings parece necessária para evitar soluções triviais (quine).
Martin Ender

Respostas:

14

Javascript ES6, 44 bytes

$=_=>`$=(\^\_\^\)${($+'').slice(5)};$()`;$()

Resultado:

$=(^_^)=(\^\_\^\)${($+'').slice(5)};$()`;$()

Ainda trabalhando no golfe, mas funciona por enquanto.

Mama Fun Roll
fonte
12
+1 por ter outro rosto:=_=
Cyoce 13/09/16
2
Você não pode fazer $=_=>`(\^\_\^\)${($+'').slice(3)};$()`;$()isso (na verdade, parece ainda melhor, porque agora parece que você está acordando um rosto adormecido). :)
Martin Ender
10

Vim, 33 , 27 pressionamentos de tecla

qqqqqS(<C-v>94_<C-v>94)q@q<esc>hh"qPq@q

Observe que <C-v>significa ctrl + v, e é byte 0x16e <esc>é o caractere de escape e é byte 0x1B.

Isso apenas usa uma versão levemente modificada do meu Golf, uma solução excelente! responda.

Saídas:

(^_^)S(^V94_^V94)q@q^[hh"qPq@q

Isso é válido, pois ^Vé o modo como o vim representa <C-v>e ^[é o modo como o vim representa <esc>.

A idéia básica é apenas inserir o texto (^_^)por seus pontos de código, para evitar colocar esses caracteres no código-fonte. No modo de inserção, <C-v>numberirá inserir o caractere ASCII de "número". No entanto, já que o desafio diz:

A cadeia de caracteres (^_^)ou qualquer uma de suas substring de comprimento> = 2 não deve aparecer no código-fonte inicial, apenas na saída.

Esta resposta abusos a regra "substring" Por apenas digitando os codepoints dos ^personagens, e entrando (, _e )diretamente.

Aqui está um gif que permite ver esta solução em ação e coloca o código fonte e a saída lado a lado para comparação:

insira a descrição da imagem aqui

DJMcMayhem
fonte
muito sorrateira, usando o ^caractere de controle ... +1
Rɪᴋᴇʀ
7

CJam , 13 11 bytes

"(_)"
_p'^*

Intérprete online (-2 bytes graças a @MartinEnder) .

"(_)"             Push string
      _p          Duplicate and print repr with newline
        '^*       Join string with '^'
Sp3000
fonte
3

Python, 115 111 107 bytes

def f():s='def f():s=%r;print s%%s.replace(s[:5],"^".join("(_)"))';print s%s.replace(s[:5],"^".join("(_)"))

A chamada f()e a saída são:

def f():s='(^_^)():s=%r;print s%%s.replace(s[:5],"^".join("(_)"))';print s%s.replace(s[:5],"^".join("(_)"))

Inspirado em parte por esta resposta a uma pergunta semelhante .

SCB
fonte
Bem vindo ao site!
DJMcMayhem
3

CJAM, 16 15 bytes

Experimente aqui .

{"^(_)"(*}_~sss
Arnaud
fonte
3

Go (golang), 131 bytes

Esse desafio deve ter uma resposta no Go!

package main;import"fmt";func main(){a:="package main;import\"fmt\";func(%c_%[1]c)(){a:=%q;fmt.Printf(a,94,a)}";fmt.Printf(a,94,a)}

Experimente online!

CryptoBob
fonte
3

JavaScript (ES6), 91 bytes

Já existe uma resposta JavaScript, mas não existe uma resposta JS que não seja de leitura da fonte:

a="a=%s;co%s.log(a,uneval(a),`(${'^'}_${'^'})`)";console.log(a,uneval(a),`(${'^'}_${'^'})`)

Isto é baseado na minha resposta que não é de leitura da fonte ao Golf you a quine for great good! . Saídas

a="a=%s;co%s.log(a,uneval(a),`(${'^'}_${'^'})`)";co(^_^).log(a,uneval(a),`(${'^'}_${'^'})`)

Isso pode ser modificado facilmente, movendo-se o segundo %sna string. Por exemplo,

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`(${'^'}_${'^'})`)

saídas

a="a=%s;console.log(a,uneval(a),`($%s_${'^'})`)";console.log(a,uneval(a),`($(^_^)_${'^'})`)
ETHproductions
fonte
2

Gelatina , 22 bytes

“4094959441b³ỌØV”ṘVabc

Disponível em TryItOnline

Usa o quine integrado com capacidade de carga útil.“ØV”ṘV
No abcfinal, apenas o preenchimento a ser substituído
converte o número inteiro na base 100, resultando em [40,94,95,94,41]
projeções em caracteres, resultando em (^_^)
Portanto, todo o resultado é“4094959441b³ỌØV”(^_^)

Jonathan Allan
fonte
2

C # 5.0, 715 bytes

Eu sei, isso é enorme. Só queria adicionar uma solução C #.

/*^()_*/using System.CodeDom;namespace System{class P{static void Main(){var b="/*^()_*/using System.CodeDom;namespace System{{class P{{static void Main(){{var b={0};var f=new string(new[]{{b[3],b[2],b[5],b[2],b[4]}});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider(\"CSharp\").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace(\"[4]}}}}}}}}\",f),w);Console.ReadKey();}}}}}}";var f=new string(new[]{b[3],b[2],b[5],b[2],b[4]});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace("[4]}}}}",f),w);Console.ReadKey();}}}

A saída é:

/*^()_*/using System.CodeDom;namespace System{class P{static void Main(){var b="/*^()_*/using System.CodeDom;namespace System{{class P{{static void Main(){{var b={0};var f=new string(new[]{{b[3],b[2],b[5],b[2],b[4]}});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider(\"CSharp\").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace(\"[4]}}}}}}}}\",f),w);Console.ReadKey();}}}}}}";var f=new string(new[]{b[3],b[2],b[5],b[2],b[4]});var w=new IO.StringWriter();CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp").GenerateCodeFromExpression(new CodePrimitiveExpression(b),w,null);Console.WriteLine(b.Replace("(^_^)}}",f),w);Console.ReadKey();}}}

Disponível em Ideone.com

cyber_zodiac
fonte
1

MATL , 14 bytes

')_`_*i't&Dwqh

Produz a saída ')_`_*i'(^_^)h.

Experimente online!

Explicação

')_`_*i'  % Push this string
t&D       % Duplicate and get string representation (i.e. enclose with quotes)
w         % Swap
q         % Subtract 1. Transforms ')_`_*i' into the code points of '(^_^)h'
h         % Concatenate. Automatically casts code points to chars. Implicitly display
Luis Mendo
fonte
1
Minha primeira tentativa de quine!
Luis Mendo
1

Bash, 178 bytes

Q='#(8_8)
printf "Q=\47"
echo -n "$Q"|sed -r "s~(_|\()8~\1^~g"
echo -e "\x27"
tail<<<"$Q" -n4'
printf "Q=\47"
echo -n "$Q"|sed -r "s~(_|\()8~\1^~g"
echo -e "\x27"
tail<<<"$Q" -n4

Pfff, não sou bom em quines: / Qualquer sugestão de golfe é mais do que bem-vinda! :-)

Master_ex
fonte