三角数字


16

(いいえ、それらではありません)

チャレンジ

2つの入力が与えられます。最初の数値は正の整数で、数値の直角三角形n > 0を出力するために使用されます。この三角形は角から始まり、水平方向と垂直方向に1つ、対角線方向に2つ増加します。詳細については、以下の例を参照してください。列の間に1つのスペースを置き、特定の列ですべての数値を右揃えにします。(これは結局です)。n x n1, 2, 3, ... n

2番目の入力はx、三角形の開始コーナー(および方向)を決定する、選択した4つの異なる単一ASCII文字の1つです。たとえば、1,2,3,4またはa,b,c,dまたは#,*,!,)などを使用できます。オリエンテーションの動作方法を回答で指定してください。

この課題の明確化のために、左上に1,2,3,4対応するものを使用し12時計回りに使用します。

たとえばn = 5、のx = 1場合、次を出力します。

1 2 3 4 5
2 3 4 5
3 4 5
4 5
5

入力の場合n = 11x = 1出力は(一桁が右詰めされているので、余分なスペースに注意してください)以下:

 1  2  3  4  5  6  7  8  9 10 11
 2  3  4  5  6  7  8  9 10 11
 3  4  5  6  7  8  9 10 11
 4  5  6  7  8  9 10 11
 5  6  7  8  9 10 11
 6  7  8  9 10 11
 7  8  9 10 11
 8  9 10 11
 9 10 11
10 11
11

入出力n=6ありx=2

6 5 4 3 2 1
  6 5 4 3 2
    6 5 4 3
      6 5 4
        6 5
          6

入力n = 3およびでx = 4、出力:

3
2 3
1 2 3

input n = 1およびanyを使用するとx、出力:

1

ルール

  • 数字が適切に並んでいる場合、先頭または末尾の改行またはその他の空白はオプションです。(たとえば、正方形の出力を作成するための末尾の空白は許容されます)。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 出力は、コンソールに出力したり、画像として保存したり、文字列のリストとして返したりすることができます便利で許可されている形式
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

この質問は、単にあるこの + これ。まだわかりませんが、これはそのうちの1つであると思われます。
小麦ウィザード

4
@WheatWizardこれらの課題のいずれかからの答えは、ここで競争力があるように簡単に修正できるとは思いません。
AdmBorkBork

正直に言うと、多くの人がthatsが複製を作るものだと言っていることを知っていますが、それがルールではないと言えます。私にとって重複とは、既存の質問では提供されないチャレンジという点で何も提供しない質問です。
小麦ウィザード


私はその答えを読みました。普遍的な裁定ではなく、より具体的なコンテキストでの推奨事項。
小麦ウィザード

回答:



1

MATL、18バイト

:&YhiX!VZ{' 0'2:YX

最初の入力はnです。2番目の入力はx、次のいずれかです。

  • 0: 左上
  • 1: 左下の
  • 2: 右下
  • 3: 右上

(または、4を法として解釈される他の整数にすることもできます)。

MATL Online試しください


1

APL(Dyalog)、29バイト

{' '@(=∘0)⌽∘⍉⍣⍺⊢↑⌽(⍳+⍵-⊢)¨⍳⍵}

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

どうやって?

¨⍳⍵-のi範囲内のそれぞれn

(⍳+⍵-⊢)-のiベクトル化された加算の範囲を生成しますn - i

↑⌽ -逆にして平らにする

⌽∘⍉ - 右に回る

⍣⍺⊢- x

' '@(=∘0) -ゼロを削除する


1

JavaScriptの130 128 154 142 138 135 133バイト

*パディングの問題を修正

A=(n,x)=>(j=>{for(;n--;s=x<3?S+`
`+s:s+S+`
`)
for(S=O,i=j;i;S=i-->n^~-x%3?X+S:S+X)
X=(i>n?i+O:O).padStart(j.length+1)})(n+=s=O="")||s

console.log(A(6,1))
console.log(A(6,2))
console.log(A(6,3))
console.log(A(6,4))

console.log(A(12,1))
console.log(A(12,2))
console.log(A(12,3))
console.log(A(12,4))

/* 154 solution
A=(n,x)=>{s=""
for(j=n;n--;s=x<3?S+`
`+s:s+S+`
`)
for(S="",i=j;i;S=i-->n?~-x%3?S+X:X+S:~-x%3?X+S:S+X)
X=(i>n?i+"":"").padStart((j+"").length+1)
return s
}

142 solution
A=(n,x)=>{s=""
for(j=n;n--;s=x<3?S+`
`+s:s+S+`
`)
for(S="",i=j;i;S=i-->n ^ ~-x%3?X+S:S+X)
X=(i>n?i+"":"").padStart((j+"").length+1)
return s
}

138 solution
A=(n,x)=>{s=""
for(j=n+" ";n--;s=x<3?S+`
`+s:s+S+`
`)
for(S="",i=+j;i;S=i-->n^~-x%3?X+S:S+X)
X=(i>n?i+"":"").padStart(j.length)
return s
}

135 solution
A=(n,x)=>{for(j=n+=s=O="";n--;s=x<3?S+`
`+s:s+S+`
`)
for(S=O,i=j;i;S=i-->n^~-x%3?X+S:S+X)
X=(i>n?i+O:O).padStart(j.length+1)
return s
}
*/


@AdmBorkBork今修正したと思う
-DanielIndie

0

パイソン2124の 120バイト

n,x=input()
r=range(n)
for l in zip(*[(r+[n]+['']*i)[-n:]for i in r][::1-x%4/2*2])[::1-x/3*2]:print' %%%ds'%len(`n`)*n%l

オンラインでお試しください!またはすべてのテストケースを試す

(r+[n]+['']*i)[-n:]番号リストにいくつかの空の文字列を追加し、そして、適切なサイズに切るだろうzip[::1-x%4/2*2]し、[::1-x/3*2]回転を行います、と%%%ds'%len(`n`)*n(のようなfomatingの文字列を生成します' %3s %3s %3s'...+空の文字列リストの各番号に使用されます)


0

Mathematica、89バイト

(R=Reverse;Grid[{#&,R/@#&,R[R/@#]&,R@#&}[[#2]]@PadRight@Array[Range[#,s]&,s=#]/. 0->""])&   

TIOで機能する別のソリューションを次に示します。

Mathematica、122バイト

(R=Reverse;StringRiffle[""<>ToString/@#&/@({#&,R/@#&,R[R/@#]&,R@#&}[[#2]]@PadRight@Array[#~Range~s&,s=#]/. 0->" "),"\n"])&


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


0

、39バイト

Nτ≔EτEτ◧׋⁺ιλτI⊕⁺ιλLθσFN≔⮌EσEσ§μλσEσ⪫ι 

オンラインでお試しください!注:末尾のスペース。リンクは、コードの詳細バージョンです。2番目の値は反時計回りの回転数であるため、0は左上、1は左下、2は右下、3は右上です。説明:

Nτ                                      Assign the first input as an integer
   EτEτ                                 Map in two dimensions
               ⊕⁺ιλ                     Sum of zero-indexed coordinates plus 1
              I                         Cast to string
         ‹⁺ιλτ                          Is this the upper left triangle?
        ×                               Repeat the string once if so
       ◧           Lθ                   Pad to length of first input
  ≔                  σ                  Assign to variable
                          EσEσ§μλ       Transpose the array
                         ⮌              Reflect the array, giving a rotation
                        ≔        σ      Reassign to variable
                       N                Second input as an integer
                      F                 Repeat that many times
                                  Eσ    Map over array
                                    ⪫ι  Join with spaces and implicitly print

0

Javascript(ES6)、241 222 214バイト

let f = 

    (n,x)=>(L=x=>(''+x).length,M=b=>x&b?(c,i,a)=>a[n-1-i]:c=>c,Array(n).fill(b=' ').map((c,i)=>b.repeat(L(n)-L(++i))+i).map((c,i,a)=>a.map((v,j)=>j>i?b.repeat(L(n)):v)).map(M(1)).map(c=>c.map(M(2))).map(c=>c.join(b)))


function printTriangle() {  // display array of strings returned by f
    o.innerText = f(
       +Length.value, // number
       Rotate.value[0] // ASCII char
    ).join('\n');
}
Length: <input type="text" value="11" id="Length"><br>
Rotate: <input type="text" value="0" id="Rotate"> 0,1,2,3<br>
<button type="button" onclick="printTriangle()">
  OK
</button>
<br>
<pre id="o"></pre>

少ないゴルフ

(n,x)=>(
    L= x=> (''+x).length,                // strlen(x)
    M= b=> x&b ? (c,i,a)=>a[n-1-i] : c=>c, // reverse or identity map
    Array(n).fill(b=' ')
   .map((c,i)=>b.repeat(L(n)-L(++i))+i)  // a complete line of numbers
   .map((c,i,a)=>a.map((v,j)=>j>i?b.repeat(L(n)):v)) // to 2-d array
                                         // with spaces for blank numbers
   .map(M(1))                            // flip vertically?
   .map(c=>c.map(M(2)))                  // flip horizontally?
   .map(c=>c.join(b))                    // convert lines to strings
)

向きに注意してください。

2番目のパラメーターは{'0'、 '1'、 '2'、 '3'}の文字で、&オペレーターによって自動的に数値に型変換されます。数値のビット0(lsb)が設定されている場合、行は垂直に反転します。ビット1(nlsb)が設定されている場合、列は水平方向に反転します。他の10進数字を使用して、予測可能な結果を​​得ることができます。

末尾のスペース

出力文字列の空白エントリはスペースに置き換えられました。つまり、行の方向が「0」と「1」で末尾のスペースがあります。


0

Lua、250バイト

function f(w,m)d=""for y=1,w do for x=1,w do d=string.format("%s%"..tostring(w):len().."s ",d,m<2 and(y+x-1<=w and x+y-1 or"")or(m<3 and(x>=y and w-x+y or"")or(m<4 and(y+x-1>=w and w+w-x-y+1 or"")or(y>=x and w-y+x or""))))end;d=d.."\n"end;print(d)end

例で説明されているように、モードに1,2,3,4を使用してパラメーター[w] idthおよび[m] odeを取ります。


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