Sourcecode selfie

20

Objektif:

Seorang guru pernah berkata bahwa selfie kode sempurna paling baik diambil secara diagonal dari sudut kiri atas. Selfie kode hampir seperti Quine - tetapi diputar 45 derajat searah jarum jam. Misi Anda adalah untuk membuat kode program yang menghasilkan selfie kode.

Aturan:

  1. Anda dapat menggunakan bahasa pemrograman apa pun.
  2. Program Anda tidak boleh mengambil input apa pun dari file, nama file, jaringan atau apa pun.

Kriteria wajib:

Selfie adalah tentang motif dan latar belakang, jadi blankspaces (dan konten tidak terlihat lainnya seperti linefeeds dan semacamnya) tidak dihitung sebagai bagian dari jumlah karakter. Semua karakter yang terlihat dibatasi untuk dikeluarkan pada posisi yang diputar 45 derajat yang benar sementara semua karakter yang tidak terlihat tidak dibatasi pada posisi yang diputar 45 derajat yang benar. Sama seperti palet warna pada selfie normal, yang wajib untuk selfie kode adalah yang berisi sedikitnya 16 karakter ini: {a-zA-Z0-9}

Contoh:

Jika contoh ini adalah kode sumber yang valid:

Output abcd
Output efgh
Output ijkl
Output mnop

Kode contoh harus menampilkan ini:

   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

Ini adalah kode-golf, kode sumber terpendek dalam byte yang menang!

Plarsen
sumber
2
16 unik [a-zA-Z0-9]?
Pengoptimal
Bagaimana kita mencetak kiriman di Whitespace?
Sp3000
Spasi tidak mungkin, karena ruang kosong tidak masuk hitungan. Ya, 16 unik [a-zA-Z0-9], bukan total 16 karakter.
Plarsen
Tantangan ini bias terhadap bahasa yang membutuhkan linebreak dalam kode mereka. Jauh lebih sulit untuk mendukung multiline untuk tantangan ini.
nderscore
1
@nderscore Mungkin Anda benar tentang itu. Ya, kita semua di sini untuk bersenang-senang, bukan? Lakukan yang terbaik dari situasi ini! ;)
Plarsen

Jawaban:

7

Javascript ( ES6 ), 72 byte

16 pallete karakter alfanumerik yang unik: fjalert0plcgmixn

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

mdan ibendera ditambahkan ke regexp untuk memenuhi persyaratan palet minimum.

nderscore
sumber
4

CJam, 30 28 25 byte

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

Ini agak lama karena 16 karakter dari A-Za-z0-9batas.

Ini adalah varian non-sepele dari standar quine di CJam. Akan segera menambahkan penjelasan.

UPDATE - 2 byte disimpan berkat Martin, 3 byte disimpan berkat Dennis

Cobalah online di sini

Pengoptimal
sumber
1

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

Sebenarnya ada 326 byte, tetapi jika saya memahami aturan dengan benar, saya tidak perlu menghitung 14 spasi.

Program ini pada dasarnya adalah Java quine standar, ditambah banyak spasi.

Ypnypn
sumber
1

Python 3, 139 karakter - 10 spasi = 129 karakter

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

Karena kode saya adalah satu baris, yang harus saya lakukan adalah mencetak program secara diagonal. String saya memiliki nama aneh 'sjxd' sehingga kode saya dapat memiliki 16 karakter alfanumerik yang unik.

Anthony Roitman
sumber
0

CSS, 69 byte

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

Masukkan halaman html kosong untuk menghindari konflik dengan tag lain.

Palet: stylebfortanm45dgiplck(22 karakter)

Mama Fun Roll
sumber
0

MATLAB, 40 byte

Agak sulit dengan keseluruhan rekursi - bagaimana Anda mencetak kode sumber Anda sendiri ketika menambahkan kode ke string yang akan dicetak meningkatkan ukuran kode sumber itu sendiri. Tapi, tidak pernah kalah, yang berikut ini akan melakukannya:

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

The 123456;bit yang ada untuk memenuhi diperlukan 16 karakter unik. Berikut ini digunakan:

'()123456;adgips

Kode di atas tidak berfungsi pada Oktaf karena beberapa alasan, tetapi bekerja di MATLAB. Di bawah ini adalah output:

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

Sekarang jika Anda tidak keberatan ans=sedikit yang MATLAB suka meletakkan, berikut ini akan bekerja selama 32 byte :

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