Código fuente selfie

20

Objetivo:

Un gurú dijo una vez que un selfie de código perfecto se toma mejor en diagonal desde la esquina superior izquierda. Un código selfie es casi como un Quine, pero gira 45 grados en el sentido de las agujas del reloj. Tu misión es codificar un programa que genere un código selfie.

Reglas:

  1. Puedes usar cualquier lenguaje de programación.
  2. Sus programas no deben tomar ninguna entrada del archivo, nombre de archivo, red o cualquier otra cosa.

Criterios obligatorios:

Selfies trata sobre el motivo y el fondo, por lo que los espacios en blanco (y otro contenido no visible como saltos de línea y demás) no cuentan como parte del recuento de caracteres. Se restringe la salida de todos los caracteres visibles en la posición rotada correcta de 45 grados, mientras que todos los caracteres no visibles no están restringidos a la posición rotada correcta de 45 grados. Al igual que una paleta de colores en una selfie normal, lo obligatorio para una selfie de código es que contiene al menos 16 de estos caracteres: {a-zA-Z0-9}

Ejemplo:

Si este ejemplo es un código fuente válido:

Output abcd
Output efgh
Output ijkl
Output mnop

El código de ejemplo debería mostrar esto:

   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 es el código de golf, ¡el código fuente más corto en bytes gana!

Plarsen
fuente
2
16 de único [a-zA-Z0-9]?
Optimizador
¿Cómo calificaríamos una presentación en Whitespace?
Sp3000
El espacio en blanco no es posible, ya que los espacios en blanco no cuentan. Sí, 16 de único [a-zA-Z0-9], no un total de al menos 16 caracteres.
Plarsen
Este desafío está sesgado contra los idiomas que requieren saltos de línea en su código. Es mucho más difícil soportar multilínea para este desafío.
nderscore
1
@nderscore Quizás tengas razón sobre eso. Bueno, todos estamos aquí por diversión, ¿verdad? ¡Haz lo mejor de la situación! ;)
Plarsen

Respuestas:

7

Javascript ( ES6 ), 72 bytes

16 paletas de caracteres alfanuméricos únicos: fjalert0plcgmixn

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

my las ibanderas se agregan a la expresión regular para cumplir con los requisitos mínimos de paleta.

nderscore
fuente
4

CJam, 30 28 25 bytes

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

Esto es bastante largo debido a los 16 caracteres del A-Za-z0-9límite.

Esta es una variante poco trivial de una quine estándar en CJam. Agregará explicaciones pronto.

ACTUALIZACIÓN: 2 bytes guardados gracias a Martin, 3 bytes guardados gracias a Dennis

Pruébalo en línea aquí

Optimizador
fuente
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+=' ';}}

En realidad, hay 326 bytes, pero si entiendo las reglas correctamente, no tengo que contar los 14 espacios.

El programa es básicamente una quine estándar de Java, además de muchos espacios en blanco.

Ypnypn
fuente
1

Python 3, 139 caracteres - 10 espacios = 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 mi código era una línea, todo lo que tenía que hacer era imprimir el programa en diagonal. Mi cadena tiene el nombre extraño 'sjxd' para que mi código pueda tener los 16 caracteres alfanuméricos únicos.

Anthony Roitman
fuente
0

CSS, 69 bytes

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

Poner en una página html en blanco para evitar conflictos con otras etiquetas.

Paleta: stylebfortanm45dgiplck(22 caracteres)

Mama Fun Roll
fuente
0

MATLAB, 40 bytes

Un poco difícil con todo lo relacionado con la recursividad: ¿cómo imprime su propio código fuente cuando agrega el código a una cadena para imprimir? Aumenta el tamaño del código fuente en sí. Pero, sin embargo, lo siguiente lo hará:

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

los 123456; bit está ahí para cumplir con los 16 caracteres únicos requeridos. Se utilizan los siguientes:

'()123456;adgips

El código anterior no funciona en Octave por alguna razón, pero funciona en MATLAB. A continuación se muestra la salida:

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

Ahora, si no le importa el ans=bit que le gusta poner a MATLAB, lo siguiente funcionaría para 32 bytes :

12345678;diag('12345678;diag()')
Tom Carpenter
fuente