Selfie code source

20

Objectif:

Un gourou a dit un jour qu'un selfie de code parfait était mieux tourné en diagonale depuis le coin supérieur gauche. Un selfie de code est presque comme un Quine - mais tourné à 45 degrés dans le sens des aiguilles d'une montre. Votre mission est de coder un programme qui génère un selfie de code.

Règles:

  1. Vous pouvez utiliser n'importe quel langage de programmation.
  2. Vos programmes ne doivent prendre aucune entrée de fichier, nom de fichier, réseau ou autre.

Critères obligatoires:

Les selfies concernent le motif et l'arrière-plan, donc les espaces vides (et tout autre contenu non visible comme les sauts de ligne et autres) ne comptent pas comme faisant partie du nombre de caractères. Tous les caractères visibles sont limités pour être émis sur la position de rotation correcte de 45 degrés tandis que tous les caractères non visibles ne sont pas limités à la position de rotation correcte de 45 degrés. Tout comme une palette de couleurs sur un selfie normal, obligatoire pour un selfie de code, il contient au moins 16 de ces caractères: {a-zA-Z0-9}

Exemple:

Si cet exemple est un code source valide:

Output abcd
Output efgh
Output ijkl
Output mnop

L'exemple de code devrait afficher ceci:

   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

C'est le code-golf, le code source le plus court en octets gagne!

Plarsen
la source
2
16 d'unique [a-zA-Z0-9]?
Optimizer
Comment noterions-nous une soumission dans un espace blanc?
Sp3000
Les espaces blancs ne sont pas possibles, car les espaces vides ne comptent pas. Oui, 16 uniques [a-zA-Z0-9], pas moins 16 caractères au total.
Plarsen
Ce défi est biaisé contre les langues qui nécessitent des sauts de ligne dans leur code. Il est beaucoup plus difficile de soutenir multiligne pour ce défi.
nderscore
1
@nderscore Vous avez peut-être raison à ce sujet. Eh bien, nous sommes tous ici pour le plaisir, non? Tirez le meilleur parti de la situation! ;)
Plarsen

Réponses:

7

Javascript ( ES6 ), 72 octets

Palette de 16 caractères alphanumériques uniques: fjalert0plcgmixn

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

met des idrapeaux sont ajoutés à l'expression rationnelle pour répondre aux exigences minimales de la palette.

nderscore
la source
4

CJam, 30 28 25 octets

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

C'est un peu long en raison du caractère 16 de la A-Za-z0-9limite.

Ceci est une variante non triviale d'un quine standard dans CJam. Ajoutera bientôt des explications.

MISE À JOUR - 2 octets enregistrés grâce à Martin, 3 octets enregistrés grâce à Dennis

Essayez-le en ligne ici

Optimiseur
la source
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+=' ';}}

Il y a en fait 326 octets, mais si je comprends bien les règles, je n'ai pas à compter les 14 espaces.

Le programme est fondamentalement un quine Java standard, plus beaucoup d'espaces.

Ypnypn
la source
1

Python 3, 139 caractères - 10 espaces = 129 caractères

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))]

Comme mon code n'était qu'une ligne, tout ce que j'avais à faire était d'imprimer le programme en diagonale. Ma chaîne porte le nom étrange «sjxd» afin que mon code puisse avoir les 16 caractères alphanumériques uniques.

Anthony Roitman
la source
0

CSS, 69 octets

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

Mettez une page html vierge pour éviter les conflits avec d'autres balises.

Palette: stylebfortanm45dgiplck(22 caractères)

Mama Fun Roll
la source
0

MATLAB, 40 octets

Un peu difficile avec l'ensemble de la récursivité - comment imprimer votre propre code source lorsque l'ajout du code à une chaîne à imprimer augmente la taille du code source lui-même. Mais, néanmoins, ce qui suit le fera:

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

Le 123456;bit est là pour répondre aux 16 caractères uniques requis. Les éléments suivants sont utilisés:

'()123456;adgips

Le code ci-dessus ne fonctionne pas sur Octave pour une raison quelconque, mais fonctionne dans MATLAB. Voici la sortie:

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

Maintenant, si cela ne vous dérange pas le ans=peu que MATLAB aime mettre, ce qui suit fonctionnerait pour 32 octets :

12345678;diag('12345678;diag()')
Tom Carpenter
la source