ソースコードの自撮り


20

目的:

教祖はかつて、完璧なコードの自撮りは、左上隅から斜めに撮影するのがベストだと言っていました。コードのセルフィーは、ほとんどQuineに似ていますが、時計回りに45度回転します。あなたの使命は、コードの自撮りを出力するプログラムをコーディングすることです。

ルール:

  1. 任意のプログラミング言語を使用できます。
  2. あなたのプログラムは、ファイル、ファイル名、ネットワーク、その他から何も入力してはいけません。

必須の基準:

Selfiesは動機と背景に関するものであるため、空白(および改行などの表示されないコンテンツ)は文字カウントの一部としてカウントされません。すべての非表示文字は正しい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]?
オプティマイザー

ホワイトスペースで提出物をどのように採点しますか?
Sp3000

空白はカウントされないため、空白は使用できません。はい、16個の一意の[a-zA-Z0-9]で、合計16文字ではありません。
プラーセン

この課題は、コード内で改行を必要とする言語に対して偏っています。この課題で複数行をサポートするのははるかに困難です。
nderscore

1
@nderscoreおそらくあなたはそれについて正しいでしょう。まあ、私たちはみんな楽しみのためにここにいますよね?状況を最大限に活用してください!;)
プラーセン

回答:


7

Javascript(ES6)、72バイト

16個の一意の英数字パレット: fjalert0plcgmixn

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

mそしてiフラグが最小パレットの要件を満たすために正規表現に追加されます。


4

CJam、30 28 25バイト

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

これは、A-Za-z0-9制限から16文字であるため、ある程度長いです。

これは、CJamの標準クインの少し重要なバリアントです。説明をすぐに追加します。

更新-Martinのおかげで2バイト節約、Dennisのおかげで3バイト節約

こちらからオンラインでお試しください


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

実際には326バイトありますが、ルールを正しく理解していれば、14個のスペースをカウントする必要はありません。

このプログラムは基本的には標準のJavaキーボードに加えて多くの空白です。


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

私のコードは1行なので、プログラムを斜めに印刷するだけで済みました。私のコードに16個の一意の英数字を含めることができるように、私の文字列には奇妙な名前「sjxd」があります。


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()')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.