Selfie codice sorgente


20

Obbiettivo:

Un guru una volta disse che un selfie di codice perfetto è meglio sparare in diagonale dall'angolo in alto a sinistra. Un selfie di codice è quasi come un Quine, ma ruotato di 45 gradi in senso orario. La tua missione è codificare un programma che genera un selfie di codice.

Regole:

  1. Puoi usare qualsiasi linguaggio di programmazione.
  2. I tuoi programmi non dovrebbero ricevere alcun input da file, nome file, rete o altro.

Criteri obbligatori:

I selfie riguardano il motivo e lo sfondo, quindi gli spazi vuoti (e altri contenuti non visibili come avanzamenti di riga e simili) non contano come parte del conteggio dei personaggi. Tutti i caratteri visibili non possono essere emessi sulla corretta posizione ruotata di 45 gradi, mentre tutti i caratteri non visibili non sono limitati alla corretta posizione ruotata di 45 gradi. Proprio come una tavolozza di colori su un selfie normale, obbligatoria per un selfie di codice è che contiene almeno 16 di questi caratteri: {a-zA-Z0-9}

Esempio:

Se questo esempio è codice sorgente valido:

Output abcd
Output efgh
Output ijkl
Output mnop

Il codice di esempio dovrebbe generare questo:

   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

Questo è code-golf, vince il codice sorgente più breve in byte!


2
16 di un unico [a-zA-Z0-9]?
Ottimizzatore,

Come segneremmo un invio in Whitespace?
Sp3000,

Gli spazi bianchi non sono possibili, poiché gli spazi vuoti non contano. Sì, 16 di unici [a-zA-Z0-9], non un totale di almeno 16 caratteri.
Plarsen,

Questa sfida è parziale rispetto alle lingue che richiedono interruzioni di riga nel loro codice. È molto più difficile supportare multilinea per questa sfida.
nderscore,

1
@nderscore Forse hai ragione. Bene, siamo tutti qui per divertimento, vero? Fai il meglio dalla situazione! ;)
Plarsen,

Risposte:


7

Javascript ( ES6 ), 72 byte

16 caratteri alfanumerici unici pallete: fjalert0plcgmixn

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

me i iflag vengono aggiunti a regexp per soddisfare i requisiti minimi della tavolozza.


4

CJam, 30 28 25 byte

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

Questo è un po 'lungo a causa del A-Za-z0-9limite di 16 caratteri .

Questa è una variante un po 'non banale di un quine standard in CJam. Aggiungeremo presto delle spiegazioni.

AGGIORNAMENTO: 2 byte salvati grazie a Martin, 3 byte salvati grazie a Dennis

Provalo online qui


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

In realtà ci sono 326 byte, ma se capisco correttamente le regole, non devo contare i 14 spazi.

Il programma è fondamentalmente un quine Java standard, oltre a un sacco di spazi bianchi.


1

Python 3, 139 caratteri - 10 spazi = 129 caratteri

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

Dato che il mio codice era una riga, tutto quello che dovevo fare era stampare il programma in diagonale. La mia stringa ha il nome strano 'sjxd' in modo che il mio codice possa avere i 16 caratteri alfanumerici univoci.


0

CSS, 69 byte

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

Inserisci una pagina HTML vuota per evitare conflitti con altri tag.

Tavolozza: stylebfortanm45dgiplck(22 caratteri)


0

MATLAB, 40 byte

Un po 'difficile con l'intera cosa della ricorsione: come si stampa il proprio codice sorgente quando si aggiunge il codice a una stringa da stampare aumenta la dimensione del codice sorgente stesso. Ma, comunque, lo farà quanto segue:

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

Il 123456;bit è lì per soddisfare i 16 caratteri unici richiesti. Sono utilizzati i seguenti:

'()123456;adgips

Il codice sopra non funziona su Octave per qualche motivo, ma funziona in MATLAB. Di seguito è riportato l'output:

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

Ora, se non ti dispiace il ans=bit che MATLAB ama mettere, il seguente funzionerebbe per 32 byte :

12345678;diag('12345678;diag()')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.