コードのネガを印刷する


100

次のように、辺の長さNの正方形の印刷可能なASCII文字(コードポイント0x20〜0x7E)を考えます(ここではN = 6)。

=\    
 g \  
7     
m+y "g
  L ~ 
e> PHq

また、各行各列には、少なくとも1つのスペース1つの非スペース文字を含める必要があります。(上記の例はこれを満たします。)

このような正方形のネガを、同じサイズの正方形と定義します。各スペースは非スペースで置き換えられ、その逆も同様です。たとえば、次の例は上記の例の有効なネガになります。

  1234
a b cd  
 ZYXWV
   !  
{} [ ] 
  ?   

スペース以外の文字の選択は無関係です(印刷可能なASCII範囲からのものである限り)。

挑戦

辺の長さがN> 1の正方形のソースコードを使用してプログラムを作成します。これは、自身のネガをSTDOUTに出力します。末尾のスペース印刷する必要があります。単一の末尾の改行を印刷する場合としない場合があります。

通常のクインルールも適用されるため、直接または間接的に独自のソースコードを読み取ってはなりません。同様に、入力された各式の値を自動的に出力するREPL環境を想定しないでください。

勝者は、最小の辺の長さNのプログラムです。同点の場合、ソースコードに含まれるスペース以外の文字が最も少ないものが優先されます。まだ同点の場合、最も早い回答が優先されます。


関数の戻り値は受け入れられますか、それはSTDOUTに出力されるべきですか?
ポールギュヨ14年

1
@PaulGuyotこの課題については、完全なプログラムとSTDOUTに固執してください(大まかに言えば、クイーンバリアントです)。
マーティンエンダー14年

ボードサイズはN> 0でなければならないことを明確にする必要があります。あなたの例はN> 1を指定している(そしてN> = 1を意味しているのですか?)が、これは適切なルールにはないことがわかります。
イマレット14年

2
@imallettは、「各行と各列に少なくとも1つのスペースと1つの非スペース文字を含める必要がある」ことを暗示しています。待つ。いいえ。そうではありません。いい視点ね。ただし、N == 0 || N> 1を意味します。
ジョンドヴォルザーク14年

1
@jpcooperはい、それは正方形ですが、「各行と各列に少なくとも1つのスペースと1つの非スペース文字を含める必要があります」を満たしていません。最初のm列にはスペースが含まれず、最後のn列にはスペースが含まれないためです。
マーティンエンダー14

回答:


18

CJam、4 x 4(8個の非スペース)

 L _
{ _ 
 _ }
_ p 

CJamインタプリタでオンラインで試してください。

出力

{ _ 
 _ }
{ _ 
 _ }

使い方

  • L空の配列を_プッシュし、そのコピーをプッシュします。

  • ブロック

    { _ 
     _ }
    

    そのブロックをスタックにプッシュします。

  • _コードブロックのコピーをプッシュしてp印刷し、その後に改行が続きます。

  • 最後に、インタープリターはスタック上の残りのすべての項目を出力します。出力に影響しない2つの空の配列と元のコードブロックです。

代替バージョン

 L ~
{ _ 
 p }
_ ~ 

CJamインタプリタでオンラインで試してください。

出力

{ _ 
 p }
{ _ 
 p }

使い方

  • L空の配列をプッシュして~ダンプします。スタックは再び空になります。

  • ブロック

    { _ 
     p }
    

    そのブロックをスタックにプッシュします。

  • _ブロックのコピーをプッシュし、コピーを~実行します。

    _ブロックのコピーの内側は、元のブロックのコピーをプッシュし、p印刷してからラインフィードが続きます。

  • 最後に、インタープリターはスタック上の残りの項目、つまり元のコードブロックを出力します。


104

Perl、7×7(42個の非スペース)

for$i( 
1..56 )
{$_= $i
%8? $i%
7? $":7
: $/;1;
 print}

出力:

      7
     7 
    7  
   7   
  7    
 7     
7      

10
これは、私が長い間見た中で最もクールなコードの1つです。
カズラン14年

簡単でシンプルですが、退屈です。まだ+1。
ノヴァ14年

8
それが7作られたものを展示するなら、それはさらにクールでしょう7。:)
AL 14年

1
@ALあと8文字(7スペースと改行)が必要です。
Qix 14

77

CJam、4X4(12 10個の非スペース)

 6, 
SS +
* 4/
 N* 

出力:

0  1
  2 
 3  
4  5

12個の非スペースを含む以前のバージョン:

 4a4
* 4S
** 4
/N* 

そして、出力は

4   
 4  
  4 
   4

Martinが指摘したように、このバージョンには

  • 4つのスペース、
  • 4 *
  • 4 4
  • 他の4人のキャラクター、および
  • 4出力として4

;)

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


22
また、4つの賛成票がありますが、私はあなたのためにそれを台無しにしようとしています。ごめんなさい!:-D
squeamish ossifrage

7
たぶん44になりますか?+1 :)
ドアノブ

4
ペースを4 ^ 4まで続ける
オプティマイザー14

17
4 ^ 4 == 0ではありませんか?;)
zennehoy 14

1
ええ、ビットごとのXORが指数に使用されるべきシンボルを盗んだという事実は好きではありません。正直、コードを読みやすくします。
SuperJedi224

50

マーベラス-16x16

....@0..@1....  
@3..0A08..@2  ..
/\--....>1  ..Hp
..@2..\\  =0@3..
ss..//  --\\\\..
@0/\  @1/\Hp..!!
:s  #the-cake-is
  2020#a-pie/lie

ここでテストしてください!空白、円筒形のボード、およびライブラリを含むスペースはすべてチェックする必要があります。

出力

              07
            06  
          05    
        04      
      03        
    02          
  01            
01              

説明

ここには2つのボードがあります。メインボード(以下に示す)と、ss入力を受け取らず、STDOUTに2つのスペース(0x20)を出力するボードです。

空白のセルはに相当し、aの..#はコメントです。

ボードの写真

ティックごとに、ss2つのスペースをSTDOUTに出力します。

緑のパスは、7目盛りごとに改行(0x0A)を出力する単純なループです。

青いパスは、Hp6ティックごとに出力にある数字を出力します(大理石を2桁の16進数として印刷します)。

01一度印刷すると、ループは終了し、赤いパスを下に移動します。これにより、この大理石が複製されます。

1つは印刷され(2つ目01)、もう1つは黒いパスに送られ、ボードが!!セルで終了します。Hpこの最後の印刷で使用される場所のため、他のすべての呼び出しの動作の後ではなく、同じ目盛りの2つのスペースの01表示されます。Hp


9
ソースのグラフィカル表現に対する賛成。
ライキング14

35

Python-11x11

import re
[print(
    re.sub(
"0",   " ",
bin(x)[
2:].zfill(
11)))for x
in[19,15,
1920,116,
15,1,5,3,
3,3, 67]]

出力

      1  11
       1111
1111       
    111 1  
       1111
          1
        1 1
         11
         11
         11
    1    11

それはかなり面倒で退屈な解決策ですが、私はそれを示すと思いました...

  1. Pythonで行うことができます
  2. コードに関する情報をコードよりも短く圧縮できる場合は、次のようなものを実行できます:)

このソリューションは、Pythonの角括弧内にいる場合、コードを複数行に分割し、IndentationError。このようなことを行う別の方法は、バックスラッシュで行を終了することです。


33

Python-7x7(37個の非スペース)

print( 
'%+7s' 
'\n'%1 
*6+'%' 
'-7s'% 
111111 
      )

出力

      1
      1
      1
      1
      1
      1
111111 

Pythonの古い使用しています%:仕事をするために、文字列の書式オペレーターを+7して-7ための閉じ括弧と一致するように、左/右の正当化の世話をし、最後のスペースprint特にを。フォーマット文字列を準備する際に、

  • 複数行にわたる文字列リテラルの自動連結、および
  • 乗算による文字列の繰り返し(1つの価格で複数の置換フィールドを提供)

18

JavaScript(9x9)

 i=9;q=""
; for(;++
i< 91;){;
var q=q+(
!(i% 10.0
)?1:" ");
;i%9|| (q
+="\n") }
alert(q) 

出力

1        
 1       
  1      
   1     
    1    
     1   
      1  
       1 
        1

ノート

任意のサイズnの対角線を持つ正方形のコードを作成し、(できる限り)コードを作成しました。

q="";for(i=***n***;++i<***n^2+n+1***;i%***n***||(q+="\n"))q+=i%***n+1***?"0":1

*** asdf ***の数値を辺の長さnに応じて定数に置き換えます。たとえば、n = 6の場合:

q="";for(i=6;++i<43;i%6||(q+="\n"))q+=i%7?" ":1

しかし、そのコードの長さは46であるにもかかわらず、コードの対角線上のスペースと一定のスペースを揃えることはできませんでした。

編集:alert()を追加するように変更されました。前:

 i=9;q=""
; while((
++ i)<91)
{q= q+""+
""+( "")+
(!((i %10
))?1:" ")
;i%9||( q
+="\n")} 

ああ、そうだ、おっと、あなたの言っていることがわかります。すぐに修正します、ごめんなさい。
桂林李14年

あなたはあそこにいくつかのunitialisedグローバル変数を持っている:P
トマーシュZatoに

16

CJam、5x5、12個の非スペース

勝者ではありませんが、ほとんどの回答は対角線を印刷するだけなので、かなり小さくまばらな投稿を追加したかったのです。

 1 ]
D * S
 * 5
/ N *
 1 ; 

プリント

1 1 1
 1 1 
1 1 1
 1 1 
1 1 1

ここでテストしてください。

コードの最後の2文字は何もしないため、実際には実際のコードは10バイトしかありません。小さいグリッドの場合は、さらに2バイト削減して8にすることもできますが、3x3には収まらず、このコードはグリッドサイズが同じでも機能しません。

使い方:

1]           "Push [1].";
  D*         "Repeat 13 times.";
    S*       "Riffle with spaces.";
      5/     "Split into runs of five elements.";
        N*   "Join those with line breaks.";
          1; "Push and pop a 1. No-op.";

爆発したCJamとPythの回答は、このサイトで私のお気に入りです。Redditスタイルの賛成票を持っています。
ソーハムチョードリー

14

Befunge、9x9

なぜそうしたのか分かりません。それは取ったが長すぎます。私は今、大きな頭痛がしています。

8>v_20gv 
v9<^v#<4 
1@,/<>^6 
v1,*$:<p 
->,!-^87 
:^*25<^g 
_88g,^^4 
9vp\v#6< 
        @

出力:

        @
        @
        @
        @
        @
        @
        @
        @
$$$$$$$$ 

いくつかの説明

このコードは、「オンザフライ」でグリッドから文字gを読み取り@(最後のスペースである@ / 2)、p最後の出力行を書き込むようにループを変更するために使用します。

コード上のすべての文字は、コードまたはデータ(最後の2行の9and)として、ある時点で使用され@ます。

基本的には、コードを機能させるために多くの回避策を実行する必要がありました。命令ポインターは、実行中に複数の交差点を実行しますが、その一部は飛び越します。(干渉するため、異なる方向に命令を使用することはできませんでした。NOPはありません。)他の場所では、同じ文字を再利用するか、単に元に戻しました($:中央を参照)。

また、スタックでいくつかの創造的な仕事をしました。

  • (内部の)文字の書き込みループが終了すると(この行に対して行われたすべてのスペース)、スタックはを持ちn,0ます。それから私は減らさなければなりませんn。明らかな解決策はありますが$1-、私はを使用してそれを短くすることができました!-
  • (外側の)行書き込みループが終了すると(すべての通常行が印刷されます)、スタックにはがあり0ます。それからコードチェンジャー(20g46p7g46\p)を使って0、2文字を無駄にする代わりにそれを使いました$0

Befungeは常に私から+1を受け取ります。といいですね!-。それは私がしたいことです。楽しい事実:Funge-98ではz、NOPです。
カズラン14

@Kasranうん。zwikiにリストされていなかったため、コーディングにこれを使用ました。つまり、コマンド以外のコマンドはIPの方向を反転させました。NOPである必要がある場所があるため、コードの70%をリファクタリングする必要がほとんどありました。
PurkkaKoodari 14

そうすることの利点は、コードがBefunge-95(スペース以外のNOPを持っているとは思わない)と98で実行されることです。95を使用するのは非常に難しいので、これらの回答は非常に印象的です。
カズラン14

13

Python 3、8x8

50個の非スペース文字と14個のスペースがあります。最後の行には役に立たない文字が1つありますが、それ以外はすべて必要です。

(*_,q,n 
)=p=''' 
       p
'''[2:] 
print(p 
*2+q*7, 
n+p*4+p 
[0:-1]) 

出力:

       p
       p
ppppppp 
       p
       p
       p
       p
       p

2
ただ遊んでみました(a,*b,c)="12345"...スター付きの割り当ては興味深いです:)
Sp3000 14年

@ sp3000種類のハスケル風。私はHaskellのより道以上のpython、どのように私はこのことを知りませんでした使用
undergroundmonorail

11

ルビー、8x8

 (0...8)
. map(){
|x |$><<
32. chr*
x+[x ]*'
'<<32 .\
chr*(7 -
x)+?\n} 

出力:

0       
 1      
  2     
   3    
    4   
     5  
      6 
       7


9

C ++、12x12

編集:だから、私はこの挑戦に少し夢中になり、17x17から12x12にそれを下げることができました。/**/トークン区切り文字として使用できることに気づくまでに少し時間がかかりました。このコードは、警告を与え、Xcodeのコードの色付けを台無しにしますが、ラインスプライスがClangで引き続きスペースの後に機能するという事実を利用します。

#include<c\ 
stdio>/***/ 
int/**/mai\ 
n(){for(in\ 
t/**/i=0;i\ 
<12;++i)pr\ 
intf(i^8?"\ 
           \
|\n":"~~~~\ 
~~~~~~~\x2\ 
0\n");}/**/ 

出力:

           |
           |
           |
           |
           |
           |
           |
           |
~~~~~~~~~~~ 
           |
           |
           |

5

Befunge-98、8x8(56個の非スペース[11 nops])

注:優れたスポーツパーソンシップの利益のために、これはを介して独自のソースを読み取り、'一部の人にごまかします。ここで議論を読んでください

プログラム

 07'?>:8v
v y+da:%<
<v ':vj!-
,+# '<zzv
v1#a vj!<
>z,\1 -\v
z>+,$v z<
1_@#:<v -
zzzzzv<z 

出力

(       
 ,      
  &     
   %    
    $   
     #  
      " 
       !

説明

ゴルフされていないバージョン

07'?>:8%:ad+y-!jv>'n,$v
  !jv   a,\1-\v > 's,  
    >         >       v
    v-1_@#:           <

(非スペースとスペースは、読みやすくするために 'nと'に置き換えられます。)

このソリューションは、インデックス[0、width ^ 2)modを使用して正方形の幅を変更することで、行の最後にいるか、対角線にいるかを判断できるという事実に基づいています。すべてのスペースは対角線に沿って配置されるため、非スペースをいつ印刷するかを簡単に判断できます!

擬似コードで

const int WIDTH = 8
push 0    //Because of the way the 'y' instruction works when picking
int row=7 //8-1 rows
int i=63  //Starting at the end allows for the cheaper i != 0
do
{
    pick variable row from the stack bottom + 1//ad+y
    if(i%WIDTH == row)
    {
        print non-space
    }
    else
    {
        print space
        if(i%WIDTH == 0)
        {
            print new-line
            --row
        }
    }
  --i
}
while(i != 0);

討論

私はそれを非常に誇りに思っていますが、すべての非スペースも非ノープにしたかったのですが。また、標準のBefunge get-increment-putトロープを使用しなかったことを誇りに思います!私はそれのためのスペースがあり、退屈したくないので、それは非スペースのために異なるシンボルを印刷します。

BefungeSharpを使用してWindowsで試してみてください!


4

CJam、4 x 4(8個の非スペース)

 N a
` S 
 * N
X $ 

CJamインタプリタでオンラインで試してください。

出力

[ " 
 " ]
[ " 
 " ]

使い方

  • N改行をシングルトン文字列としてプッシュします。aその文字列を配列でラップします。

  • ` 結果を検査します。つまり、配列の文字列表現をプッシュします。

    これが結果です:

    ["
    "]
    
  • S*結果の文字列(文字の配列)を結合し、スペースを使用して要素を分離します。つまり、文字列の隣接する文字のすべてのペアの間にスペース文字を挿入します。

    これが結果です:

    [ " 
     " ]
    
  • N 別の改行をプッシュします。

  • X$ インデックス1(先頭から数えて)のスタック項目、つまり複数行の文字列をコピーします。

  • 最後に、インタプリタはスタック上のすべてのアイテムを印刷します。元の複数行文字列、改行、および複数行文字列のコピーです。


4

SOGL V0.12、2x2(2つの非スペース)

2 
 ╚

ここで試してみてください!

出力

 /
/ 

説明

SOGLでは、最後を除くすべての行が行を置き換えています-継続するコードのどこでも、行の最後の文字をその前のすべてで置き換えます。ここの最初の行はreplace space with 2 in the next lineです。
次に、次の行2╚が実行されます2。2をプッシュし、サイズ2の対角線を作成します。



3

ルビー、8x8 7x7

 print(
 (?f+"\
 "*6+?\
 )*6).!
 $><<"\
 f"<<!1
;      

出力:

f      
f      
f      
f      
f      
f      
 ffalse

前のバージョン、20個のスペースがある8x8:

  puts((
  "ff"+#
  ?\s*6+
  ?\n)*7
  );$><<
  ?\s*2+
  ?f;p:p
.!

出力:

ff     
ff     
ff     
ff     
ff     
ff
ff     
  ffalse

3

プッシュ型、4x4スクエア

言語が課題を後回しにしているため、競合しない:

コード:

 H32
2 C4
:" } 
\o/

出力:

d   
 d  
  d 
   d

オンラインでお試しください!

空白はPushyでは無関係であるため、出力のネガに一致するようにコードを簡単に配置できます。実際のプログラムは次のようになります。

H      \ Push char 100, 'd'
32 2C  \ Push char 32, a space, and make 2 extra copies
       \ We now have the string 'd   '
4:     \ 4 times do:
  "    \   Print the string
   }   \   Cyclically shift it right, once

バックスラッシュはコメントを開始するので\o/、ネガを完成させるために末尾がちょうどそこにあり、クールに見えます。


または、同じスコアに対して、次の解決策があります。

Code    Output

 35;    #
3 2j     #
2C 4      #
:"}        #

K 36     #
33 2      #
Ct4        #
 :}"    #

3

ハスケル、10×10

main=let{ 
0&c='\32' 
!c;n&c=c! 
'\32'>>(n 
-1)&c;a!b 
=putStrLn 
$(b<$[1.. 
10])++[a] 
}in(9&'*' 
         )

a ! bフォームの行を印刷するヘルパー関数と、フォームの行に続いてフォームの1行を印刷bbbbbbbbbaする再帰関数n & cを定義します。nccccccccc␣␣␣␣␣␣␣␣␣␣c

範囲で<$fmap const、再び)を使用して、文字を繰り返します。<$GHC 7.10以降のインポートでは、このチャレンジより後の日付でのみ利用可能であることに注意してください。これによりこの提出が競合しないかどうかは完全にはわかりません。

ここでレイアウトやアルゴリズムを選択しても、本当に刺激的なことはありません。余裕のあるバイトはありませんでしたが、幸運なことにputStrLn、途中で改行が発生する可能性があります。



3

05AB1E、3x3(6個の非スペースバイト

 3Ð
Λ q
°° 

出力:

3  
 3 
  3

オンラインでお試しください。

説明:

3Ð       # Push three 3s to the stack
  Λ      # Canvas with parameters num; filler; pattern
         #  num: The amount of characters to display (3)
         #  filler: The character to display ('3')
         #  pattern: The available options are single-digit integers in the range [0,7]
         #           indicating the direction to print in.
         #           (Option 3 is a top-left to bottom-right diagonal line)
    q    # Exit the program
°°       # no-ops to complete the pattern

2

Perl、6x6(26個の非スペース)

私はこれらに目を通しましたが、なんとか7x7より小さいPerlソリューションがあると確信していました...非常に楽しいチャレンジです!このソリューションにはが必要-Eです。

say+( 
$"x5, 
"5$/" 
)x5,5 
x5,$" 
     ;

使用法:

perl -E 'say+( 
$"x5, 
"5\n" 
)x5,5 
x5,$" 
     ;'

出力:

     5
     5
     5
     5
     5
55555 

2

CBM BASIC v2.0(9×9)

0dA8,7,6 
1dA5,4, 3
2dA2,1 ,0
3rEs: rem
4?sP s)::
5:? "*";:
6p =8---s
7 ?sPp):?
 8ifsgO3:

出力:

        *
       * 
      *  
     *   
    *    
   *     
  *      
 *       
*        

1

C(gcc)7x7 8x8

編集:以前のバージョンは不正な動作がありました。

 main(i)
{ for(;i
<9 ;pri\
ntf ("%\
*d%" "*\
c",i, 1,
9-i,10 )
,i++);} 

オンラインでお試しください!


また、各行各列には、少なくとも1つのスペース1つの非スペース文字を含める必要があります」最初の列には非スペース文字がありません。
ケビンクルーッセン

@KevinCruijssenどういうわけか私は列の基準を逃したので、それらはすべて間違っています。実際のコンピューターを手元に置いてリメイクします。
ガストロプナー

1

ゼリー、4 x 4(12個の非スペース)

 4=þ
¢ +⁴
¢+ ⁴
¢ỌY

オンラインでお試しください!

出力:

!   
 !  
  ! 
   !

これはとても楽しかったです。

使い方

 4=þ    Link 1 (nilad): Generate an identity matrix of size 4
¢ +⁴    Link 2 (nilad): Add 16 to above
¢+ ⁴    Link 3 (nilad): Add 16 again
¢ỌY     Main link (nilad): Convert the above to ASCII chars, and join by newline

簡単な部分:Jellyは空白を無視します(1バイトの組み込みのみが使用されている場合)。

難しい部分:Jellyの各行は個別のリンク(または関数)であるため、定数ステートメントを複数行に広げることはそれほど短くありません。文字列リテラルを使用することは良い候補ですが、ネガティブを生成する方法はわかりません。

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