源代码自拍照


20

目的:

一位大师曾经说过,最好从左上角对角线拍摄完美的代码自拍照。代码自拍照几乎像Quine,但顺时针旋转了45度。您的任务是编写一个输出代码自拍照的程序。

规则:

  1. 您可以使用任何编程语言。
  2. 您的程序不应从文件,文件名,网络或其他任何内容中获取任何输入。

强制标准:

自拍照是关于动机和背景的,因此空格(以及其他不可见的内容,如换行符等)不算作字符计数的一部分。限制所有可见字符在正确的45度旋转位置上输出,而所有不可见字符并不限于正确的45度旋转位置。就像普通自拍照上的调色板一样,代码自拍照必须执行的操作是它包含至少16个字符:{a-zA-Z0-9}

例:

如果此示例是有效的源代码:

Output abcd
Output efgh
Output ijkl
Output mnop

示例代码应输出以下内容:

   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

这是代码高尔夫,以字节为单位的最短源代码!


2
16个独特的[a-zA-Z0-9]?
Optimizer

我们如何在空白中对提交的内容评分?
Sp3000

空格是不可能的,因为空格不计算在内。是的,唯一[a-zA-Z0-9]中的16个字符,而不是总共至少16个字符。
普拉森,2015年

这项挑战针对需要在代码中使用换行符的语言。支持多行解决这一挑战要困难得多。
nderscore 2015年

1
@nderscore也许您是正确的。好吧,我们都是在这里玩,对吧?尽力做到最好!;)
Plarsen

Answers:


7

Javascript(ES6),72个字节

16个唯一的字母数字字符调色板: fjalert0plcgmixn

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

mi标志添加到正则表达式以满足最低调色板要求。


4

CJam,30 28 25字节

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

由于A-Za-z0-9限制为16个字符,因此时间较长。

这是CJam中标准quine的不平凡的变体。即将添加说明。

更新-感谢Martin,节省了2个字节,感谢Dennis,节省了3个字节

在这里在线尝试


1

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

实际上有326个字节,但是如果我正确理解规则,则不必计算14个空格。

该程序基本上是标准的Java quine,外加大量空格。


1

Python 3,139个字符-10个空格= 129个字符

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

由于我的代码只有一行,因此我所要做的就是对角打印程序。我的字符串有一个奇怪的名字“ sjxd”,所以我的代码可以有16个唯一的字母数字字符。


0

CSS,69字节

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

放入空白的html页,以避免与其他标签冲突。

调色板:stylebfortanm45dgiplck(22个字符)


0

MATLAB,40个字节

整个递归操作有点困难-将代码添加到要打印的字符串时,如何打印自己的源代码会增加源代码本身的大小。但是,无论如何,以下将做到这一点:

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

123456;位可以满足所需的16个唯一字符。使用以下内容:

'()123456;adgips

上面的代码由于某些原因在Octave上不起作用,但是在MATLAB中起作用。以下是输出:

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

现在,如果您不介意ans=MATLAB喜欢的功能,则以下内容将适用于32个字节

12345678;diag('12345678;diag()')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.