Natal quine!

10

No idioma de sua escolha, escreva um programa organizado na forma de uma árvore de Natal que se imprima da mesma forma.

O que não é permitido:

  • Imprimindo o arquivo de origem
  • Código que nada mais é do que declarações que ecoam por um intérprete em virtude de serem literais (por exemplo, apenas usando uma torre de listas em forma de árvore em python)
Manishearth
fonte
"Imprimir o arquivo de origem" não é permitido, mas a leitura do código- fonte (não do arquivo) e a impressão são permitidas? Caso contrário, isso é praticamente impossível com o Befunge. : /
Justin

Respostas:

16

Javascript

A 'estrela' pode ser um pouco grande demais para a árvore ...

        (function _()
     {return('        (')
      +(''+''+''+''+'')
             +_+
            ')()'
           ;'We w'
          +'wis'+0+
         'h you a '
        +0+'merry Ch'
       +'ristmas, '+0+
      +'we '+0+'wish y'
     +0+'ou a merry Chr'
    +'istmas, we w'+0+'i'
   +0+'sh you '+0+'a merr'
  +'y Christmas and a h'+0+
 +'appy'+0+'new year! Ho ho'
+0+' ho! Merry '+0+'Christma'
            +'s!'
            })()

Os zeros são bugigangas e ficam melhores no editor:

Viva para destacar a sintaxe!

Saída nas ferramentas de desenvolvedor do Chrome

Dom Hastings
fonte
3
Bom truque com os enfeites!
Manishearth
2
Adoro a inclusão de "Desejamos a você um feliz Natal!"
Iszi
11

Rubi

Você nunca disse que não poderíamos usar o acesso à rede ...: D

        #
       s="
      open(
     'http:/
    /pastebin
   .com/raw.ph
  p?i=mGzbahp5'
 ).read";s=eval(
s.gsub! /\s/,'');
      puts(
      s+'')

Emite-se literalmente.

Sim, eu poderia ter usado um encurtador de URL, mas isso tornaria menos óbvio e divertido: P Também precisava de algo para ocupar espaço; caso contrário, a árvore seria pequena.

Execute assim:

ruby -ropen-uri christmasquine.rb
Maçaneta da porta
fonte
5
Na minha opinião, você trapaceou, mas você está certo sobre as regras. Superado por uma maçaneta da porta. De qualquer forma, aqui está sua upvote, por me fazer sorrir :)
Manishearth
11
@ Manishearth Sim, nós dobramos muito as regras aqui! Parte da diversão. : P (por exemplo, quines com 0 caracteres, etc.)
Maçaneta da porta
@ Manishearth Sim, o que a Maçaneta disse. Se você não deseja que uma regra seja dobrada, é necessário incluir uma regra contra a flexão dessa regra. Por isso, os desafios mais recentes de "quine reverso" e "espelho quine" tinham regras contra palíndromos e quines menores que 2 caracteres.
Iszi
4

perl

#!/usr/bin/perl
$_=<<'the source';eval $_;

          #
         #*#
        print
       "#!/u".
      "sr/bin".
     "/perl \n".
    "\$_=<<'the".
   " source';eva".
  "l \$_;\n${_}th".
 "e source\n";# Mery 
#Christmas to all !!!
         ###
         ###
         #*#

the source
hildred
fonte
4

Aqui está uma pequena no GolfScript :

   {
  ".~  
 "2/~\
+@@2$*}.
   ~

Observe que o código acima inclui dois caracteres de espaço no final da segunda linha da parte superior; esses espaços são essenciais para a operação correta. Além disso, o código deve ser salvo usando LFalimentações de linha no estilo Unix ( ), não no estilo Windows CR+ LF.


Aqui está um pouco maior (e menos sensível a espaços em branco), incluindo uma mensagem festiva:

     {
    " "
   MERRY
  5*n\+\n
 CHRISTMAS
".~"+2$*1>}
     .
     ~

Um recurso levemente interessante é que as palavras MERRYe CHRISTMASnão são literais de seqüência de caracteres, embora não sejam ops, e são copiadas para a saída junto com o bloco de código ao seu redor.

Ilmari Karonen
fonte