物理的な九九を印刷する


40

長方形はこの素晴らしい特性を持っています長方形は正確に文字で構成されています!n×mn×m

A ..より興味深い特性は、乗法テーブルで長方形をきれいに配置できることです-たとえば、テーブル:3×3

# ## ###

# ## ###
# ## ###

# ## ###
# ## ###
# ## ###

あなたの挑戦は、数()を与えられて、フォーマットされた乗算表を出力することです。nn>1n×n

ルール

  • 上または下の入力を使用できますn
  • デフォルトのI / Oルールが適用されます
  • ブロックを表すために任意の非空白文字を選択できます。他のすべての文字(改行は特別ですが)は空白と見なされます。選択した文字は入力ごとに異なる場合がありますが、入力全体で同じである必要があります
  • テーブルが整列し、必要な出力の一部ではない選択された文字の出現がない限り、結果に不要な文字が含まれることがあります
  • 区切り文字は1文字幅/高さでなければならず、長方形はパックする必要があります(つまり、文字間に区切り文字はありません)
  • 空の行は空でもかまいません。パディングは不要です
  • 結果は、文字列、行列、行ベクトル、文字配列の配列、または2Dishのいずれかです。
  • 別の方法として、マトリックス/ベクトルのベクトル/数字の2Dishを出力することもできますが、背景と前景は2つの異なる数字でなければならず(入力ごとに変化しますが、出力全体ではありません)、他の数字は存在できません。この形式では余分な周囲の文字も使用できます(ただし、背景番号と一致する必要があります)
  • これは、バイト単位の最短回答、言語ごと、勝ちです!

inputの場合、文字2を含む有効なascii-art出力は次のとおりです。

        ∙ ∙∙

Result: ∙ ∙∙.
        ∙ ∙∙

はい、混乱させるためにピリオドがあります
。2がバックグラウンド番号、9がフォアグラウンドである、数値マトリックスとしての別の有効な答え:

[[9,2,9,9,2,2],
 [2,2,2,2,2,2],
 [9,2,9,9,2,2],
 [9,2,9,9,2,2]]

無効な出力例は

#  # #


#  # #

#  # #

長方形の間にセパレーターがあるためです。

出力例:4×4

# ## ### ####

# ## ### ####
# ## ### ####

# ## ### ####
# ## ### ####
# ## ### ####

# ## ### ####
# ## ### ####
# ## ### ####
# ## ### ####


1 0 1 1 0 1 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1
1 0 1 1 0 1 1 1 0 1 1 1 1

テーブルの最後ではなく、前に背景文字の行/列を追加できますか?
キリルL.

@KirillL。確かに、列が並んでいる限り
dzaima

2
Nitpick:∙(U + 2219:BULLET OPERATOR)はASCII文字セットに存在しません。•(U + 2022:BULLET)または⋅(U + 22C5:DOT OPERATOR)または・(U + 00B7:MIDDLE DOT)もありません。:)
アンドレアス・レイブランド

回答:


10

Haskell、43バイト

f n=map=<<flip(map.max)$show.(10^)=<<[1..n]

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

ØrjanJohansenが0と1で出力し、各10...00部分を10のべき乗の文字列表現として生成する賢いアプローチ。

111111111
101001000
111111111
101001000
101001000
111111111
101001000
101001000
101001000

Haskell、49バイト

f n=map=<<flip(map.max)$[0^i|x<-[1..n],i<-[0..x]]

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

のようなパターンを生成し[1,0,1,0,0,1,0,0,0,...]minofのペアを取得して2Dを作成します。ポイントフリーの奇妙さは、より読みやすいものよりも2バイト節約します。

f n|l<-do x<-[1..n];0:(1<$[1..x])=[[a*b|a<-l]|b<-l]

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


3
:これは私の古い三角数のトリックを短縮することができます43バイト
Ørjanヨハンセン

1
ちょうど実現しましたflip(map.max)=mapM max
Ørjanヨハンセン

@ØrjanJohansenおっと、それはどのように機能しますか?あなた自身の答えを投稿することであなたができると思います:-)
xnor

(->) b次に、モナドをに設定しmapM :: (a -> b -> c) -> [a] -> b -> [c]ます。
Ørjanヨハンセン

@xnorあなたは変更に忘れてしまったflip(map.max)mapM max
ASCIIのみの


6

JavaScript(ES6)、 73 72  69バイト

1、スペース、および改行で構成される文字列を返します。

n=>(g=s=>n-->0?g(s+`${p+=1} `):s[~n]?(+s[~n]?s:'')+`
`+g(s):'')(p='')

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


JavaScript(ES7)、 87 83  82バイト

@dzaimaのおかげで3バイト節約

セルごとに構築されたバイナリマトリックスを返します。

n=>[...Array(n*(n+3)/2)].map((_,y,a)=>a.map(h=(z,x)=>(17+8*x)**.5%1&&(z||h(1,y))))

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

どうやって?

w

w=Tn+n1=(n+12)+n1=n(n+3)21

(注意:チャレンジルールで許可されているように、代わりに幅行列を出力します。)w+1

同様に、次の2次がまたは整数根を受け入れる場合、にあるセルは空です。(X,Y)k=Xk=Y

x(x+3)21k=0x2+3x22k=0

その決定要因は次のとおりです。

Δ=94(22k)=17+8k


バイトを節約できるかどうかはわかりませんが、その2次関数の解はになるため、が奇数の場合、整数の根があります。 、は奇数の完全な正方形です。3±17+8k2 ΔΔΔ
アウトゴルファーのエリック

5

MATL、14 10バイト

:"@:Fv]g&*

この答えは1、ブロックと0背景に使用します

MATL Online試しください

説明

     % Implicitly grab the input as an integer, N
     %   STACK: { 3 }
:    % Create an array from 1...N
     %   STACK: { [1, 2, 3] }
"    % For each element M in this array
  @: % Create an array from 1...M
     %   STACK (for 1st iteration): { [1] }
     %   STACK (for 2nd iteration): { [1; 0], [1, 2] }
     %   STACK (for 3rd iteration): { [1; 0; 1; 2; 0], [1, 2, 3] }
  F  % Push a zero to the stack
     %   STACK (for 1st iteration): { [1], 0 }
     %   STACK (for 2nd iteration): { [1; 0], [1, 2], 0 }
     %   STACK (for 3rd iteration): { [1; 0; 1; 2; 0], [1, 2, 3], 0 }
  v  % Vertically concatenate everything on the stack
     %   STACK (for 1st iteration): { [1; 0] }
     %   STACK (for 2nd iteration): { [1; 0; 1; 2; 0] }
     %   STACK (for 3rd iteration): { [1; 0; 1; 2; 0; 1; 2; 3; 0] }
] 
g    % Convert everything to be boolean (turns all non-zeros to 1)
     %   STACK: { [1; 0; 1; 1; 0; 1; 1; 1; 0] }
&*   % Perform element-wise multiplication to expand this array out into the 2D grid
     % Implicitly display the result


4

APL(Dyalog Unicode)12 10 12 バイトSBCS

∘.×⍨∊,\0,⎕⍴1

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

編集: ngnから-2バイト。前の回答が無効だったため、+ 2バイト(ngnとdzaimaのおかげで)

説明

∘.×⍨∊,\0,⎕⍴1

             Take input.
           1  An array of 1s of length our input. Example: 1 1 1
       0,      Prepend a 0. Example: 0 1 1 1
     ,\        Take all the prefixes and concatenate them. Example: 0  0 1  0 1 1  0 1 1 1
              Flatten the list. Example: 0 0 1 0 1 1 0 1 1 1
∘.×⍨           Turn the above list into a multiplication table of 0s and 1s
               by multiplying the list with itself.

出力は次のようになります。

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1
0 0 1 0 1 1 0 1 1 1

1
あなたは、入力を取ることができる避けるために{ }
NGN

4

ゼリー、7バイト

‘RÄṬ|þ`

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

長方形にを使用し、長方形間のパディングにを使用して、数字マトリックスを出力します。TIOリンクには、行と列を並べることにより、人間が読める方法で数字マトリックスをフォーマットするフッターが含まれています。01

説明

‘RÄṬ|þ`
 R       Take a range from 1 to
‘          {the input} plus 1
  Ä      Cumulative sum; produces the first {input}+1 triangular numbers
   Ṭ     Produce an array with 1s at those indexes, 0s at other indexes
     þ   Create a table of {the array}
      `    with itself
    |      using bitwise OR

結果のテーブルのセルの数値は、またはいずれかが三角形の場合は、そうでない場合は(ビット単位のORは0と1の論理ORのように機能するため)です。(Jellyは1ベースのインデックス付けを使用するため、範囲1 を使用します。したがって、列0が誤って0でいっぱいになることを心配する必要はありません。入力によって1を追加する必要があります。(x,y)1xy0R入力で指定された最大の要素で停止するため、右側と下部に線を引く必要があります。)三角形の数字の間の隙間は連続した整数であるため、線の間の隙間によって形成される長方形ブロックは終了します質問で要求されたサイズまで。また、OR演算(この場合はビット単位)を使用すると、線が互いに正しく交差できます。


なぜこれがコミュニティWikiなのですか?!担当者を放棄したい場合は、Erik the Outgolferにそれを与えることができます
ジョナサンアラン

1
私はすべての答えをCWします(彼らが報奨金を得る可能性があると思う場合を除き、その場合は一時的なアカウントを使用します)。高い評判を目指すということは、通常、サイトを悪化させることを意味します(私はそれが可能であることを証明するために1週間毎日毎日やり直しました。 tは本当にサイトに大きく貢献しています)。さらに、評判を獲得することは、そのサイトがモデレート作業をするようにあなたを悩ませるので、アカウントでほとんど否定的です。特権を取得すると、誤ってバッジを取得するリスクが高まります。
ais523

また、私はSEの投稿の所有権の概念にはほとんど同意しません(ただし、ほとんどの場合、回答ではなく質問を使用しますが、モデレーターの助けなしでは質問をCWできません)。CWマーカーは、「ここで何かおかしいことがある場合は、お気軽に編集してください」とはっきり言っています。だから、たとえ評判を放棄しなくても、すべてにCWマーカーを適用することになります。SEは結局wikiの一部となることを意図していますが、人々は常にそれをそのように使用するとは限りません。
ais523

あなたがそれを望んでいないなら、RE「高い評判を目指して」、それが意味があると思うときだけ投稿し、あなたが「浅い」Q&Aと呼ぶものを避けてください。この回答がサイトに何かを追加すると感じた場合、その場合はCWなしで投稿するか、「浅い」と思うか、その場合は投稿しないでください。RE「私はほとんどSEの投稿の所有権の概念に同意しません」-あなたは間違ったサイトにいるだけです。
ジョナサンアラン

2
答えはサイトに何かを追加すると思いますが、CWでない場合は、面白いと思うものを投稿するのではなく、評判を得る方法で投稿することを強いられます。私が2万人のユーザーだった頃、私はこのサイトを本当に嫌っていました。そのため、一般的にコードゴルフからほとんど追い出されたので、結果としてアカウントを削除しました。戻ったとき、投稿したすべての回答でアカウントを削除していました(次の回答用に新しいアカウントを作成しました)が、他の誰かがすべての回答をCWすると同様の効果があると指摘したので、最近では代わりにそれを行います。
ais523

4

05AB1E、9バイト

プログラムを定義し。fNatList[List[Nat]]

コード:

$L×0ýSDδ*

05AB1E -encoding使用します。オンラインでお試しください!または、きれいに印刷されたバージョンを使用します。


説明:

$#数字1と入力n 
 Lをプッシュする#リスト[1、2、3、...、n ]を作成する
  ×#ベクトル化された文字列乗算:1×[1、2、3、...、n ]
                 これにより、["1"、 "11"、 "111"、...、 "1"× n ]
   0ý#結果リストを「0」で結合すると、「10110111011110111110 ...」になります
     S#1桁に分割:[1、0、1、1、0、1、1、1、0、1、1、1、1、0、...]
      Dδ*#それ自体との乗算表

4

C#(Visual C#Interactive Compiler)96 95バイト

無知の実施のおかげで-1バイト

n=>{var l="";for(;n>0;)l=new string('#',n--)+' '+l;for(;n<l.Length;)WriteLine(l[n++]>32?l:"");}

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


必ず標準出力を介した引数が、出力を介して入力が許可されていない場合
ASCIIのみの

3
IO形式の混在は問題ありません
Jo King

1
なぜ追加しないn--new stringセクション?
無知の




3

、18バイト

≔⪫EN×#⊕ι θEθ⭆θ⌊⟦ιλ

オンラインでお試しください!リンクは、コードの詳細バージョンです。説明:

   N                Input number
  E                 Map over implicit range
       ι            Current value
      ⊕             Incremented
    ×               Repetitions of
     #              Literal `#`
 ⪫                  Join with spaces
≔        θ          Assign to variable
           θ        Retrieve variable
          E         Map over characters
             θ      Retrieve variable
            ⭆      Replace characters with
              ⌊     Minimum of
               ⟦    List of
                ι   Row character
                 λ  Column character
                    Implicitly print each row on its own line

3

C#(.NET Core)208 155バイト

class M{static void Main(string[]a){int i=int.Parse(a[0]);var l="";for(;i>0;)l=new string('#',i--)+' '+l;for(;;)System.Console.WriteLine(l[i++]>32?l:"");}}

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

さまざまな役立つ人々のおかげで大幅に改訂されたバージョン(コメントを参照)。




1
@EmbodimentofIgnorance無効、... N> = 10のために仕事をしません
ASCIIのみ

1
@ ASCIIのみのこの作品:tio.run/...
無知の実施の形態

2
@Stackstuckはい。プログラムがクラッシュで終了するために許可されている
ASCIIのみの


3

Java 11、109バイト

n->{var l="";for(;n>0;)l="x".repeat(n--)+" "+l;for(;n<l.length();)System.out.println(l.charAt(n++)>32?l:"");}

@ ASCII-onlyのC#.NET回答のポート。

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

n->{                       // Method with integer parameter and no return-type
  var l="";                //  Line-String, starting empty
  for(;n>0;)               //  Loop until `n` is 0:
    l=...+l;               //   Prepend to `l`:
       "x".repeat(n--)+" " //    Repeat "x" `n` amount of times, appended with a space
                           //    And decrease `n` by 1 afterwards with `n--`
    for(;n<l.length();)    //   Inner loop as long as `n` is smaller than the length of `l`:
      System.out.println(  //    Print with trailing newline:
        l.charAt(n++)>32?  //     If the `n`'th character of the line-String is NOT a space:
                           //     And increase `n` by 1 afterwards with `n++`
         l                 //      Print the line-String
        :                  //     Else:
         "");}             //      Print nothing (so only the newlines)

repeatメソッドのため、8ではなくJava 11 です。
オリビエグレゴワール

@OlivierGrégoireおっと..修正
ケビン・クルーッセン

しかし、例外をスローするラムダを持つことは許容できますか?私はそれが完全なプログラムのために大丈夫だと思ったが、機能/例外のためではない
オリビエ・グレゴワール

@OlivierGrégoire期待どおりの結果が出力される限り、なぜtbhにならないのかわかりません。
ケビンクルーッセン

1
これはこの議論にリンクされています。答えは、REPLが受け入れられた場合(デフォルトでは受け入れられない場合)、stderrに出力するか例外をスローしても問題ありませんが、REPLが受け入れられない場合、std /例外は許可されません。
オリビエグレゴワール

2

APL + WIN、29バイト

m/⍉(m←¯1↓∊(⍳n),¨¯1)/(n,n←⎕)⍴1

説明:

(n,n←⎕)⍴1 prompt for integer n and create a nxn matrix of 1s

(m←¯1↓∊(⍳n) replicate the columns by 1,2,.....n and insert 0s between each replication

m/⍉ repeat replication and 0 insertion for the rows from above 

例:

⎕:
3
1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1
1 0 1 1 0 1 1 1
0 0 0 0 0 0 0 0
1 0 1 1 0 1 1 1
1 0 1 1 0 1 1 1
1 0 1 1 0 1 1 1



2

Ruby、55バイト

->n{(s=(1..n).map{|x|?#*x}*' ').chars.map{|c|c<?!?c:s}}

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

どうやって?

最初に、最初の行を作成してから、その文字を反復処理します。文字が「#」の場合は行全体を印刷し、そうでない場合は単一の文字(スペース)を印刷します



2

Perl 6の35の 33バイト

{((\*Xx$_+1)~"
"Xx$_+1)>>.say}o^*

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

数字を受け取り、乗算テーブルに*sを付けて末尾の改行を出力する匿名呼び出し可能オブジェクト。

説明:

{                             }o^* # Change the input to the range 0..n-1
  (\*Xx$_+1)    # Cross string multiply '*' by all of range 1..n
                # This creates the string "* ** *** ****" etc.
            ~"\n"                 # Append a newline
                 Xx$_+1           # Cross string multiply again
 (                     )>>.say    # And print all the lines

1

Haskell、69 68バイト

(a#b)0=[]
(a#b)n=(a#b)(n-1)++b:(a<$[1..n])
f n=((1#0)n#(0<$(1#0)n))n

数値の行列を返します。

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

f同じバイトカウントのバリアント:

f n=((#)<*>(0<$)$(1#0)n)n
f n|l<-(1#0)n=(l#(0<$l))n

0行と列は役立ちますか?
dfeuer

1
@dfeuer:はい、バイトを保存します。私の答えの最初のバージョンをご覧ください。
nimi


1

MathGolf、20バイト

╒ÉÄ10;]h\■mÆε*╣¡§y╠n

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

MathGolfは、リストを分割して2Dリストを作成するための機能を実際に取得する必要があります。

説明

╒                      range(1,n+1)
 É                     start block of length 3
  Ä                    start block of length 1
   1                   push 1
    0                  push 0
     ;                 discard TOS
      ]                end array / wrap stack in array
                       the stack now contains the list [1, 0, 1, 1, 0, 1, 1, 1, 0, 1, ...]
       h               length of array/string without popping (used for splitting string)
        \              swap top elements
         ■             cartesian product with itself for lists, next collatz item for numbers
          m            explicit map
           Æ           start block of length 5
            ε*         reduce list by multiplication (logical AND)
              ╣¡       push the string " #"
                §      get character at index 0 or 1 based on logical AND value
                       block ends here, stack is now ['#',' ','#','#',' ','#',...]
                 y     join array without separator to string
                  ╠    pop a, b, push b/a (divides the string using the length of a single line)
                   n   join array of strings with newlines

1

インク151 152 151バイト

VAR k=0
=t(n)
~k=n
-(u)
~n--
{n+1:->s(k-n)->u}->->
=r(c)
->g(c)->
{k-c:<>->r(c+1)}->->
=g(n)
{n>1:@<>->g(n-1)}@->->
=s(n)
{n:
->r(1)->
->s(n-1)
}
.->->

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

ルールが余分な文字を許可するのは良いことです。

編集:+1:間隔を修正しました。また、#(エスケープする必要はありません)ではなく@(エスケープする必要はありません)を使用して表示します。

編集:-1:この修正により、空でない行に改行を強制するために後続の期間が不要になったようです。きちんとした。


ああ、私は実際にそれらのスペースさえ気付かなかった。私はそれらについて何かできるかどうかを確認します...
サラJ


0

SmileBASIC、83 77バイト

グラフィカル出力。入力はN-1

INPUT N
FOR J=0TO N
X=0FOR I=0TO N
GFILL X,Y,X+I,Y+J
X=X+I+2NEXT
Y=Y+J+2NEXT


0

Perl 6、63バイト

{(1..$_).map(((1..$_).map("#"x*).join(" ")~"\n")x*).join("\n")}

1
.join(' ')、何もない'#'ことができる\*代わりに、改行文字列リテラル改行を使用することはできません、両方がl.map(str x*)可能(str Xx l)代わりに。38バイト
ジョーキング

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