昇順の整数ピラミッド


18

以下のテキスト、または整数のリストのリストを出力します(詳細は以下)。

 0
10  1
20 11  2
30 21 12  3
40 31 22 13  4
50 41 32 23 14  5
60 51 42 33 24 15  6
70 61 52 43 34 25 16  7
80 71 62 53 44 35 26 17  8
90 81 72 63 54 45 36 27 18  9
91 82 73 64 55 46 37 28 19
92 83 74 65 56 47 38 29
93 84 75 66 57 48 39
94 85 76 67 58 49
95 86 77 68 59
96 87 78 69
97 88 79
98 89
99

ルール

  • 必要に応じて、「1つのインデックス」を作成し、それぞれnをに置き換えることができますn+1。この場合、出力には1から100までの数字が含まれます。

出力がテキストの場合

  • 提供されたテキストの各列で1桁が右揃えになりますが、左揃えにしたい場合は問題ありません。さらに、列間で整合性を保つ必要はありません。
  • 先頭または末尾の空白は許可されます。各行の末尾のスペースも許可されます。
  • 行のリストを返すことは許容されます。

出力が数値の場合

  • 出力は、整数のリスト(または2D配列)にすることができます。 [[1], [11, 2], [21...
  • フロートは大丈夫です。
  • 使用する言語で長方形でない配列を使用できない場合、三角形内にない配列の要素は任意の値を取ることができ、無視されます。

別の形式が必要な場合は、お気軽にお問い合わせください。

最短のコードが優先されます。



テキスト出力では先頭/末尾の空白が許可されているため、リスト出力では先頭/末尾の空のリストは許可されていますか?
ジョナサンアラン

@ジョナサンアランシュア
ディルナン

私はそれを編集することはできませんが、これにはkolmogorov複雑度タグが含まれている必要があります(その綴りが正しいかどうかわかりません...)
ブライアンH.

@BrianH。他の人によると、実際に生成されることを意図した単一の定数はないため、KCタグはここでは適用されません
-dylnan

回答:


10

ゼリー 13 12 10  6 バイト

-4デニスのおかげで、はい4!(グループインデックスとデカルト積の使用)

⁵pḅ1ĠU

出力に1インデックスとリストオプションを使用します。

オンラインでお試しください!(フッターは出力をPython表現でフォーマットします)
...または 0インデックス付きのフォーマットされたバージョンを参照してください。

どうやって?

⁵pḅ1ĠU - Main link: no arguments
⁵      - literal 10
 p     - Cartesian product (with the leading constant of 10 and implicit ranges)
       -       = [[1,1],[1,2],[1,3],...,[10,8],[10,9],[10,10]]
  ḅ1   - to base one (proxy for sum each without the monad)
       -       = [2,3,4,5,6,7,8,9,10,11,3,4,5,6,7,8,9,10,11,12,4,...,18,19,20]
    Ġ  - group indices by value
       -       = [[1],[2,11],[3,12,21],...,[90,99],[100]]
     U - upend = [[1],[11,2],[21,12,3],...,[99,90],[100]] 

1
いいね 私が持っていた7バイト
dylnan

世界では何をしĠているのでしょうか?!
魔法のタコ

1
@MagicOctopusUrnは、対応する値で配列のインデックスをグループ化します。だから[5,7,5,9]Ġ戻り[[1,3],[2],[4]]ます。これは、インデックスが元の配列の[1,3]値to およびtoに対応するためです。5[2]7[4]9
ディルナン


4

29 20バイト

E¹⁹⪫I⮌Φ¹⁰⁰⁼ι⁺÷λχ﹪λχ 

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

 ¹⁹                     Literal 19
E                       Map over implicit range
       ¹⁰⁰              Literal 100
      Φ                 Filter over implicit range
              λ  λ      Inner index
               χ  χ     Predefined variable 10
                ﹪       Modulo
             ÷          Integer divide
            ⁺           Sum
           ι            Outer index
          ⁼             Equals
     ⮌                  Reverse
    I                   Cast to string
   ⪫                    Join with spaces
                        Implicitly print each string on its own line

4

JavaScript(ES6)、61バイト

0ベース。文字列を返します。

f=(k=n=0)=>k>98?k:k+((k-=9)%10>0?' '+f(k):`
`+f(n+=n>89||10))

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

どうやって?

k = n = 0で開始し、k = 99で停止します。各反復でkから9を引きます。

行の終わりはで検出されk % 10 <= 0ます。この条件は、次の場合に満たされます。

  • JSのモジュロの符号は被除数の符号であるため、kは負(ピラミッドの上部)です。

     0 (-9)
    10  1 (-8)
    20 11  2 (-7)
    
  • または k%10 == 0(ピラミッドの下部)

    90 81 72 63 54 45 36 27 18  9 (0)
    91 82 73 64 55 46 37 28 19 (10)
    92 83 74 65 56 47 38 29 (20)
    

次の行の初めに、我々は、いずれかの追加1または10N、そこから再起動してください。



3

J、14バイト

,.<@|./.i.,~10

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

注意:

このソリューションはボックス化された出力を使用します-許可されているかどうかはわかりません(整数のリストも許可されているため、そうなることを望みます)

代替案:

J、10バイト

|./.i.,~10

このソリューションでは、三角形の領域の外側の数字は次のように表示されます 0

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

説明:

i.,~10数字0..99の行列、10×10が作成する,~10ために短いです10 10

   i.,~10
 0  1  2  3  4  5  6  7  8  9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

/. 行列の斜めの対角線(反対角線)を見つける

   ]/.i.,~10
 0  0  0  0  0  0  0  0  0  0
 1 10  0  0  0  0  0  0  0  0
 2 11 20  0  0  0  0  0  0  0
 3 12 21 30  0  0  0  0  0  0
 4 13 22 31 40  0  0  0  0  0
 5 14 23 32 41 50  0  0  0  0
 6 15 24 33 42 51 60  0  0  0
 7 16 25 34 43 52 61 70  0  0
 8 17 26 35 44 53 62 71 80  0
 9 18 27 36 45 54 63 72 81 90
19 28 37 46 55 64 73 82 91  0
29 38 47 56 65 74 83 92  0  0
39 48 57 66 75 84 93  0  0  0
49 58 67 76 85 94  0  0  0  0
59 68 77 86 95  0  0  0  0  0
69 78 87 96  0  0  0  0  0  0
79 88 97  0  0  0  0  0  0  0
89 98  0  0  0  0  0  0  0  0
99  0  0  0  0  0  0  0  0  0

](同じ)を使用すると、すべての行に0sが埋め込まれます。各行が反転します。ゼロを取り除くために、ライン<を反転した後にボックスを囲みます|.

   <@|./.i.,~10
┌─┬────┬───────┬──────────┬─────────────┬────────────────┬
│0│10 1│20 11 2│30 21 12 3│40 31 22 13 4│50 41 32 23 14 5│. . .
└─┴────┴───────┴──────────┴─────────────┴────────────────┴

ボクシングは、リストのリストをフラットにします。最終的,.にリストを解き、列が列に並ぶようにします。

  ,.<@|./.i.,~10
┌────────────────────────────┐
│0                           │
├────────────────────────────┤
│10 1                        │
├────────────────────────────┤
│20 11 2                     │
├────────────────────────────┤
│30 21 12 3                  │
├────────────────────────────┤
│40 31 22 13 4               │
├────────────────────────────┤
│50 41 32 23 14 5            │
├────────────────────────────┤
│60 51 42 33 24 15 6         │
├────────────────────────────┤
│70 61 52 43 34 25 16 7      │
├────────────────────────────┤
│80 71 62 53 44 35 26 17 8   │
├────────────────────────────┤
│90 81 72 63 54 45 36 27 18 9│
├────────────────────────────┤
│91 82 73 64 55 46 37 28 19  │
├────────────────────────────┤
│92 83 74 65 56 47 38 29     │
├────────────────────────────┤
│93 84 75 66 57 48 39        │
├────────────────────────────┤
│94 85 76 67 58 49           │
├────────────────────────────┤
│95 86 77 68 59              │
├────────────────────────────┤
│96 87 78 69                 │
├────────────────────────────┤
│97 88 79                    │
├────────────────────────────┤
│98 89                       │
├────────────────────────────┤
│99                          │
└────────────────────────────┘



2

Gol> <>、24バイト

0D9FlF{a+|lD|9F~lF{P|D|;

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

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

[0]
[10 1]
[20 11 2]
[30 21 12 3]
[40 31 22 13 4]
[50 41 32 23 14 5]
[60 51 42 33 24 15 6]
[70 61 52 43 34 25 16 7]
[80 71 62 53 44 35 26 17 8]
[90 81 72 63 54 45 36 27 18 9]
[91 82 73 64 55 46 37 28 19]
[92 83 74 65 56 47 38 29]
[93 84 75 66 57 48 39]
[94 85 76 67 58 49]
[95 86 77 68 59]
[96 87 78 69]
[97 88 79]
[98 89]
[99]

使い方

0D9FlF{a+|lD|9F~lF{P|D|;

0D                       Push 0 and print stack
  9F        |            Repeat 9 times...
    lF{a+|                 Add 10 to all numbers on the stack
          l                Push stack length (the last one-digit number)
           D               Print stack
             9F       |  Repeat 9 times...
               ~           Discard the top
                lF{P|      Increment all numbers on the stack
                     D     Print stack
                       ; Halt

2

R50 48バイト

split(y<-rev(order(x<-outer(0:9,0:9,"+"))),x[y])

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

1インデックス付き。Jonathan AllanのJelly answerと同じ論理に従いますので、必ず彼に賛成してください。

おまけとして、標準ループアプローチ(0インデックス)の実装もあります。ここでは、少なくとも出力をきれいにしようとしました(したがって、コンソールで迷惑なs を取り除くprint代わりに、バイトを保存することさえしませんでした。cat(...,"\n")[1]

R66 59バイト

for(i in c(0:8*10,90:99))cat(seq(i,i/10+i%%10*10-1,-9),"
")

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

編集:ジュゼッペのおかげで-2と-7の両方。


1
私はゴルフを2回目は59バイトまで、1回目は48バイト
ジュゼッペ

ああ、はい、ありがとう。
キリルL.

@KirillL。アウターを使用するのはいつも本当にエレガントです。さらに、この場合は短くなります!
JayCe

2

R137 86 73 69バイト

for(u in 0:18)cat("if"(u>9,seq(81+u,10*u-81,-9),seq(10*u,u,-9)),"\n")

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

前のゴルフバージョン、ジュゼッペへの%100クレジット。

S=sapply
c(S(1:10,function(u)1:u-1+10*(u-1:u)),S(9:1,function(y)1:y+9-y+10*(y:1+9-y)))

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

Codegolfでの私の最初の試みを以下に記録のためだけに保存​​します。

x<-c(1:10)
z<- c(9:1)
c(sapply(x,function(u) seq_len(u)-1+10*(u-seq_len(u))),sapply(z,function(y) seq_len(y)+9-y+10*rev(seq_len(y)+9-y)))

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


1
いい答え!あなたが言うように、かなりの数のバイトを削除できます。不要な空白を削除し、ほとんどの場所で置き換えることで、86バイトのソリューションを見つけることができました。の代わりに使用しました。seq_len1:y:1rev
ジュゼッペ

@Giuseppeは、改善された回答に感謝します-私は何年もコーディングしていないことを示しています。
JayCe



0

PowerShell、77バイト

(0..90|?{!($_%10)})+91..99|%{"$(for($i=$_;$i-gt$_/10+$_%10*10-1;$i-=9){$i})"}

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

1桁が左揃えのASCIIアートとして出力されます。配列を文字列化すると、デフォルトで要素間にスペースが挿入されるという事実を利用します。

明らかにRodのPythonの答えに非常に似ていますが、独立して開発されました。





0

105、95 91バイト

v: make vector! 0
loop 10[alter v + 10 length? v print v]loop 9[alter v last v print 1 + v]

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

説明:

v: make vector!   0                           ; start with a vector with one element: -10
loop 10[alter v + 10 length? v print v]       ; Ten times print the vector after adding 10
                                              ; to its elements and appending the length   
loop 9[alter v last v print 1 + v]            ; Nine times print the vector after adding 1 
                                              ; to its elements and removing the last one
                                              ; `alter` appends the item if it's not
                                              ; in the list, otherwise removes it

0

JavaScript、112バイト

最適ではありませんが、別のアプローチを試してみたかったのです。

[...Array(19)].map((x,y)=>y>9?81+y:y?y+'0':y).map(x=>(f=(n,a=[n])=>!n|a[n+='']|n[1]>8?a:f(n-=9,a.concat(n)))(x))

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

古いソリューション:

[...Array(19)].map((x,y)=>y>9?y-9+'9':y).map((x,y)=>(f=(n,a=[n])=>a[n/10]|!n?a.reverse():a.push(n+=9)&&f(n,a))(x*1).slice(y-19))

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


0

05AB1E、16バイト

тL<ΣTLãOsè}TLû£í

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

説明

тL<Σ      }       # sort the values in [0 ... 99] by
        sè        # the value at that index in
       O          # the sum of
      ã           # the cartesian product of
    TL            # the range [1 ... 10]
              £   # split the result into pieces of sizes
           TLû    # [1,2,...,9,10,9,...2,1]
               í  # and reverse each

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