Selfie do código fonte


20

Objetivo:

Um guru disse uma vez que um selfie de código perfeito é melhor filmado na diagonal do canto superior esquerdo. Uma selfie de código é quase como uma Quine - mas girada 45 graus no sentido horário. Sua missão é codificar um programa que gera uma selfie de código.

Regras:

  1. Você pode usar qualquer linguagem de programação.
  2. Seus programas não devem receber nenhuma entrada de arquivo, nome de arquivo, rede ou qualquer outra coisa.

Critérios obrigatórios:

Selfies é sobre o motivo e o plano de fundo, portanto, os espaços em branco (e outros conteúdos não visíveis, como feeds de linha e outros) não contam como parte da contagem de caracteres. Todos os caracteres visíveis estão restritos a serem emitidos na posição rotativa correta de 45 graus, enquanto todos os caracteres não visíveis não estão restritos à posição rotativa correta de 45 graus. Assim como uma paleta de cores em uma selfie normal, obrigatória para uma selfie de código é que ela contém pelo menos 16 desses caracteres: {a-zA-Z0-9}

Exemplo:

Se este exemplo for código fonte válido:

Output abcd
Output efgh
Output ijkl
Output mnop

O código de exemplo deve gerar isso:

   O         
  O u
 O u t
O u t p
 u t p u
  t p u t
   p u t
    u t   a  
     t   e b
        i f c
       m j g d
        n k h
         o l
          p

Este é o código-golfe, o código-fonte mais curto em bytes ganha!


2
16 dos únicos [a-zA-Z0-9]?
Optimizer

Como classificaríamos uma apresentação no Whitespace?
Sp3000

Espaço em branco não é possível, pois os espaços em branco não contam. Sim, 16 dos únicos [a-zA-Z0-9], no mínimo 16 caracteres.
Plarsen 26/05

Esse desafio é influenciado por idiomas que exigem quebras de linha em seu código. É muito mais difícil oferecer suporte a múltiplas linhas para esse desafio.
Ndscore # 26/15

1
Talvez você esteja certo sobre isso. Bem, estamos todos aqui por diversão, certo? Faça o melhor possível da situação! ;)
Plarsen 26/05

Respostas:


7

Javascript ( ES6 ), 72 bytes

Palete de 16 caracteres alfanuméricos exclusivos: fjalert0plcgmixn

(f=j=>alert(`(f=${f})(0)`.replace(/./gmi,x=>' '.repeat(j++)+x+'\n')))(0)

me isinalizadores são adicionados ao regexp para atender aos requisitos mínimos da paleta.


4

CJam, 30 28 25 bytes

{95c103ic]seeSf.*N*Xmr}_g

Isso é demorado devido ao A-Za-z0-9limite de 16 caracteres .

Esta é uma variante pouco trivial de uma coluna padrão no CJam. Adicionará explicações em breve.

ATUALIZAÇÃO - 2 bytes salvos graças a Martin, 3 bytes salvos graças a Dennis

Experimente online aqui


1

Java, 312

class Z{public static void main(String[]a){String s="class Z{public static void main(String[]a){String s=%c%s%1$c,t;for(int i=0,j;i<326;System.out.println(t+s.format(s,34,s).charAt(i++)))for(j=i,t=%1$c%1$c;j-->0;)t+=' ';}}",t;for(int i=0,j;i<326;System.out.println(t+s.format(s,34,s).charAt(i++)))for(j=i,t="";j-->0;)t+=' ';}}

Na verdade, existem 326 bytes, mas se eu entendi as regras corretamente, não preciso contar os 14 espaços.

O programa é basicamente um quine Java padrão, além de muito espaço em branco.


1

Python 3, 139 caracteres - 10 espaços = 129 caracteres

sjxd='sjxd=%r;[print(" "*i+(sjxd%%sjxd)[i]) for i in range(len(sjxd%%sjxd))]';[print(" "*i+(sjxd%sjxd)[i]) for i in range(len(sjxd%sjxd))]

Como meu código era uma linha, tudo que eu precisava fazer era imprimir o programa na diagonal. Minha string tem o nome estranho 'sjxd', para que meu código possa ter os 16 caracteres alfanuméricos exclusivos.


0

CSS, 69 bytes

<style>:before,*{transform:rotate(45deg;display:block;content:'<style>

Coloque uma página html em branco para evitar conflitos com outras tags.

Paleta: stylebfortanm45dgiplck(22 caracteres)


0

MATLAB, 40 bytes

Um pouco difícil com a coisa da recursão - como você imprime seu próprio código-fonte ao adicionar o código a uma string a ser impressa aumenta o tamanho do próprio código-fonte. Mas, mesmo assim, o seguinte será feito:

123456;disp(diag('123456;disp(diag())'))

O 123456;bit existe para atender aos 16 caracteres únicos necessários. São utilizados os seguintes:

'()123456;adgips

O código acima não funciona no Octave por algum motivo, mas funciona no MATLAB. Abaixo está a saída:

1                  
 2                 
  3                
   4               
    5              
     6             
      ;            
       d           
        i          
         s         
          p        
           (       
            d      
             i     
              a    
               g   
                (  
                 ) 
                  )

Agora, se você não se importa com o ans=que o MATLAB gosta de colocar, o seguinte funcionaria para 32 bytes :

12345678;diag('12345678;diag()')
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.