Selfie z kodem źródłowym

20

Cel:

Guru powiedział kiedyś, że idealne selfie z kodem najlepiej strzelać po przekątnej z lewego górnego rogu. Autoportret kodowy jest prawie jak Quine - ale obrócony o 45 stopni w prawo. Twoim zadaniem jest kodowanie programu, który generuje selfie kodu.

Zasady:

  1. Możesz użyć dowolnego języka programowania.
  2. Twoje programy nie powinny pobierać żadnych danych wejściowych z pliku, nazwy pliku, sieci ani niczego innego.

Obowiązkowe kryteria:

Autoportrety dotyczą motywu i tła, więc puste miejsca (i inne niewidoczne treści, takie jak linie i tym podobne) nie liczą się jako część liczby znaków. Wszystkie widoczne znaki są ograniczone do wyświetlania w prawidłowej pozycji obróconej o 45 stopni, podczas gdy wszystkie niewidoczne znaki nie są ograniczone do prawidłowej pozycji obróconej o 45 stopni. Podobnie jak paleta kolorów na normalnym selfie, obowiązkowe dla selfie kodu jest to, że zawiera co najmniej 16 z tych znaków: {a-zA-Z0-9}

Przykład:

Jeśli ten przykład jest prawidłowy kod źródłowy:

Output abcd
Output efgh
Output ijkl
Output mnop

Przykładowy kod powinien wypisać to:

   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

To jest kod-golf, wygrywa najkrótszy kod źródłowy w bajtach!

Plarsen
źródło
2
16 unikalnych [a-zA-Z0-9]?
Optymalizator
Jak ocenilibyśmy zgłoszenie w Whitespace?
Sp3000
Białe znaki nie są możliwe, ponieważ puste miejsca się nie liczą. Tak, 16 unikalnych [a-zA-Z0-9], nie łącznie co najmniej 16 znaków.
Plarsen
To wyzwanie jest stronnicze w stosunku do języków, które wymagają łamania linii w kodzie. W przypadku tego wyzwania znacznie trudniej jest obsłużyć multilinię.
nderscore
1
@nderscore Być może masz rację. Wszyscy jesteśmy tutaj dla zabawy, prawda? Zrób jak najlepiej z sytuacji! ;)
Plarsen

Odpowiedzi:

7

JavaScript ( ES6 ), 72 bajty

16 unikalnych palet alfanumerycznych: fjalert0plcgmixn

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

mi iflagi są dodawane do wyrażenia regularnego, aby spełnić minimalne wymagania dotyczące palety.

nderscore
źródło
4

CJam, 30 28 25 bajtów

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

Jest to dość długie ze względu na 16 znaków z A-Za-z0-9limitu.

Jest to nieco nietrywialna odmiana standardowej quine w CJam. Wkrótce doda wyjaśnienia.

AKTUALIZACJA - 2 bajty zapisane dzięki Martinowi, 3 bajty zapisane dzięki Dennisowi

Wypróbuj online tutaj

Optymalizator
źródło
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+=' ';}}

W rzeczywistości jest 326 bajtów, ale jeśli dobrze rozumiem reguły, nie muszę liczyć 14 spacji.

Program jest w zasadzie standardowym quine Java i dużą ilością białych znaków.

Ypnypn
źródło
1

Python 3, 139 znaków - 10 spacji = 129 znaków

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

Ponieważ mój kod składał się z jednej linii, wystarczyło wydrukować program po przekątnej. Mój ciąg ma dziwną nazwę „sjxd”, dzięki czemu mój kod może mieć 16 unikalnych znaków alfanumerycznych.

Anthony Roitman
źródło
0

CSS, 69 bajtów

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

Umieść pustą stronę HTML, aby uniknąć konfliktu z innymi tagami.

Paleta: stylebfortanm45dgiplck(22 znaki)

Mama Fun Roll
źródło
0

MATLAB, 40 bajtów

Trochę trudne z całą tą rekurencją - jak wydrukować własny kod źródłowy podczas dodawania kodu do ciągu, który ma zostać wydrukowany, zwiększa rozmiar samego kodu źródłowego. Niemniej jednak, zrobią to:

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

123456;Bit jest tam do spełnienia wymaganych 16 unikalnych postaci. Używane są następujące:

'()123456;adgips

Powyższy kod z jakiegoś powodu nie działa na Octave, ale działa w MATLAB. Poniżej znajduje się wynik:

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

Teraz, jeśli nie przeszkadza ci to, ans=że MATLAB lubi umieszczać, następujące działania będą działać dla 32 bajtów :

12345678;diag('12345678;diag()')
Tom Carpenter
źródło