Sourcecode selfie


20

Zielsetzung:

Ein Guru sagte einmal, dass ein perfektes Code-Selfie am besten diagonal von der oberen linken Ecke aus aufgenommen werden kann. Ein Code Selfie ist fast wie ein Quine - aber um 45 Grad im Uhrzeigersinn gedreht. Ihre Mission ist es, ein Programm zu codieren, das ein Code-Selfie ausgibt.

Regeln:

  1. Sie können eine beliebige Programmiersprache verwenden.
  2. Ihre Programme sollten keine Eingaben von Dateien, Dateinamen, Netzwerken oder anderen Elementen entgegennehmen.

Obligatorische Kriterien:

Bei Selfies geht es um das Motiv und den Hintergrund, sodass Leerzeichen (und andere nicht sichtbare Inhalte wie Zeilenvorschübe usw.) nicht als Teil der Zeichenanzahl gelten. Alle sichtbaren Zeichen dürfen nur in der richtigen, um 45 Grad gedrehten Position ausgegeben werden, während alle nicht sichtbaren Zeichen nicht in der richtigen, um 45 Grad gedrehten Position angezeigt werden. Genau wie bei einer Farbpalette in einem normalen Selfie müssen in einem Code-Selfie mindestens 16 der folgenden Zeichen enthalten sein: {a-zA-Z0-9}

Beispiel:

Wenn dieses Beispiel ein gültiger Quellcode ist:

Output abcd
Output efgh
Output ijkl
Output mnop

Der Beispielcode sollte dies ausgeben:

   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

Dies ist Code-Golf, der kürzeste Quellcode in Bytes gewinnt!


2
16 von Unique [a-zA-Z0-9]?
Optimierer

Wie würden wir eine Einreichung in Whitespace erzielen?
Sp3000

Leerzeichen sind nicht möglich, da Leerzeichen nicht zählen. Ja, 16 von einzigartigen [a-zA-Z0-9], nicht mindestens 16 Zeichen.
Plarsen

Diese Herausforderung ist voreingenommen gegenüber Sprachen, die in ihrem Code Zeilenumbrüche erfordern. Es ist viel schwieriger, Multiline für diese Herausforderung zu unterstützen.
Nderscore

1
@nderscore Vielleicht hast du recht. Nun, wir sind alle zum Spaß hier, oder? Mach das Beste aus der Situation! ;)
Plarsen

Antworten:


7

Javascript ( ES6 ), 72 Byte

16 eindeutige alphanumerische Zeichenpalette: fjalert0plcgmixn

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

mund iFlags werden dem regulären Ausdruck hinzugefügt, um die Mindestanforderungen an die Palette zu erfüllen.


4

CJam, 30 28 25 Bytes

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

Dies ist etwas lang, da die maximale Länge 16 Zeichen A-Za-z0-9beträgt.

Dies ist eine etwas nicht triviale Variante einer Standard-Quine in CJam. Wird bald Erklärungen hinzufügen.

UPDATE - 2 Bytes gespart dank Martin, 3 Bytes gespart dank Dennis

Probieren Sie es hier online aus


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

Es gibt tatsächlich 326 Bytes, aber wenn ich die Regeln richtig verstehe, muss ich die 14 Leerzeichen nicht zählen.

Das Programm ist im Grunde ein Standard-Java-Quine plus viel Leerzeichen.


1

Python 3, 139 Zeichen - 10 Leerzeichen = 129 Zeichen

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

Da mein Code aus einer Zeile bestand, musste ich das Programm nur diagonal drucken. Meine Zeichenfolge hat den seltsamen Namen "sjxd", sodass mein Code die 16 eindeutigen alphanumerischen Zeichen enthalten kann.


0

CSS, 69 Bytes

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

Fügen Sie eine leere HTML-Seite ein, um Konflikte mit anderen Tags zu vermeiden.

Palette: stylebfortanm45dgiplck(22 Zeichen)


0

MATLAB, 40 Bytes

Etwas schwierig mit der ganzen Rekursionssache - wie können Sie Ihren eigenen Quellcode drucken, wenn Sie den Code zu einer zu druckenden Zeichenfolge hinzufügen, um die Größe des Quellcodes selbst zu erhöhen. Aber das Folgende wird es trotzdem tun:

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

Das 123456;Bit ist dazu da, die erforderlichen 16 eindeutigen Zeichen zu erfüllen. Folgendes wird verwendet:

'()123456;adgips

Der obige Code funktioniert aus irgendeinem Grund nicht in Octave, aber in MATLAB. Unten ist die Ausgabe:

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

Nun, wenn es Ihnen nichts ausmacht ans=, was MATLAB gerne schreibt, dann würde das folgende für 32 Bytes funktionieren :

12345678;diag('12345678;diag()')
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.