積み上げ桁階段


17

以下に説明するように、正の整数およびhを指定すると、テキストのw列およびh行が出力されます。whwh

最初の行は11 0秒で始まり、2行目は10 1秒で始まり、3 行目は9 2秒で始まり、10行目は2秒で続き9ます。これらの最初の10行のそれぞれで、連続する数字の最初の実行に続いて、次に低い数字が2回現れ、次に2番目に小さい数字が2回現れ、このパターンが永久に繰り返されます。0sの実行が発生した場合、その後の数字は常に9sです。

10番目の行の下の行は、そのすぐ上の行と同じですが、1つ右にシフトします。表示される新しい数字は、それ自体の別のインスタンスの隣にない場合、前の左端の数字と同じです。それ以外の場合は、次に高い桁(9から0に戻る循環)です。

最初の要素は次のとおりです。11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

パターンをより明確にするために、色付きのテキストを使用した画像を次に示します。

固定テキスト

より少ない列/行を作成する必要がある場合は、上記のテキストを切り抜く必要があります。

これより多くの列/行を作成する必要がある場合は、既存の階段を延長する必要があります。さらに列/行が連続する数字の新しい階段を追加する場合、数字は整数から周期的に選択される必要があります。したがって、入力のために出力がなければなりません(15,13)

000000000009988
111111111100998
222222222110099
333333332211009
444444433221100
555555443322110
666665544332211
777766554433221
888776655443322
998877665544332
099887766554433
009988776655443
100998877665544

このテキストの色付きの画像を次に示します。

拡張テキスト

ルール

  • 便利な方法で出力できます。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 必要に応じて、行のリストを返すことができます。
  • 必要に応じて、数字の2D配列または数字のリストのリストを返すことができます。
  • 標準の抜け穴は許可されていません。

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

テストケース

(w,h)

1,1
0

3,2 000 111

20,1 00000000000998877665

11,10 00000000000 11111111110 22222222211 33333333221 44444443322 55555544332 66666554433 77776655443 88877665544 99887766554

15,13 000000000009988 111111111100998 222222222110099 333333332211009 444444433221100 555555443322110 666665544332211 777766554433221 888776655443322 998877665544332 099887766554433 009988776655443 100998877665544


8
私はそのパターンを本当に理解していません。パターンを例から外挿することを期待するのではなく、具体的に説明してください。一部の人々は例を参考にしていますが、実際にパターンが例からどのように続くのか私は本当に見ていません。
小麦ウィザード

@WWありがとう、上部にもう少し詳細な説明を追加しました
ディルナン

1
1234

@qwrいいね、それができるとは知らなかった。どのコマンドを使用しましたか?
ディルナン

\ color {red} {text}信じている
qwr

回答:


7

Python 3、94 93 78 77 74バイト

lambda x,y:[[[(j-i+10)//2%10,j][j+i<9]for i in range(x)]for j in range(y)]

Dylnanから-1バイト

xnorから印刷する代わりにリストのリストを返すことにより、-15バイト

の順序(j-i+10)//2%10j部分を切り替えることで-1バイトif-else

- をリストに変更して、Jo Kingから-3バイト。ifelse

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


ラムダ関数を使用すると、バイトが節約されます:TIO
dylnan

@dylnanありがとう!
pizzapants184

1
このチャレンジでは、数字のリストのリストを出力できるため、印刷や結合を行う必要がないように見えます。
xnor

7

C(GCC) 101の 100 99バイト

s,t;a(i,r){for(t=~0;++t<r;puts(""))for(s=0;s<i;putchar(48+(t+(s>10-t)*(10*s+9-(s+++t-11)/2))%10));}

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


-1バイトオンラインでお試しください! printf("%d",->putchar(48+
pizzapants184

@ pizzapants184どうもありがとう。
ジョナサン

@ceilingcat残念ながらいいえ
ジョナサンフレッチ

2

キャンバス、14バイト

[⁷{¹∔⁶+»¹m◂@]]

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

これを行っている間、私はいくつかの場所でCanvasに負の係数を持っていることに気付きました(ここでは、»floor div 2-0の方向に丸められていることを意味します)。修正なしで機能した以前の18バイトの回答は機能しなくなりました(main.jsバージョン間でのみ保存するため)が、TIOにはまだ古いバージョンがあります

説明:

[            ]  for 1..input
 ⁷{         ]     for 1..2nd input
   ¹∔               subtract from this loop counter the outer loops one
     ⁶+             add 12
       »            divide by 2, rounded to -∞
        ¹m          minimum of that & the outer loops counter
          ◂@        in the string "0123456789", get the xth char, 1-indexed

2

20 17バイト

Eη⭆θ﹪⌊⟦ι÷⁺⁻ιλχ²⟧χ

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

 η                  Height
E                   Map over implicit range
   θ                Width
  ⭆                 Map over implicit range and join
          ⁻ιλ       Subtract column from row
         ⁺   χ      Add 10
        ÷     ²     Integer divide by 2
       ι            Current row
     ⌊⟦        ⟧    Take the minimum
    ﹪           χ   Modulo by 10
                    Implicitly print each row on its own line

編集:@dzaimaのアルゴリズムに切り替えて3バイトを保存しました。


2

ゼリー、14 バイト

_@þ:2+6«"J$’%⁵

wh

オンラインでお試しください!または、(フォーマット後の)テストスイートを参照してください。

どうやって?

_@þ:2+6«"J$’%⁵ - Link: integer w, integer h
  þ            - outer product using (i.e. [[f(i,j) for i in 1..w] for j in 1..h]):
_@             -   subtraction with swapped arguments (i.e. f(i,j): j-i)
               -   e.g. the 4th row is [3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,...]
   :2          - integer divide by two (vectorises)
               -                       [1, 1, 0, 0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,-6,...]
     +6        - add six (vectorises)
               -                       [7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0,...]
          $    - last two links as a monad:
         J     -   range of length -> [1,2,3,...,h]
        "      -   zip with:
       «       -     minimum (vectorises)
               -                       [4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 2, 1, 1, 0,...]
           ’   - decrement (vectorises)
               -                       [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0,-1,...]
             ⁵ - literal ten
            %  - modulo (vectorises)
               -                       [3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0, 9,...]


2

ゼリー、19バイト

ピザパンツニールに非常に似たアプローチを使用します。Jonathan Allanのおかげで1バイト節約されました。

p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵

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


ヘルパーリンク

_/HḞ+5

これはモナドリンク(単一の引数関数に相当するJelly)であり、quickを使用して次のリンクから呼び出すことができますÇ。2つの整数のリストを受け取り、それに対して次の処理を行います。

_/

減算で削減します。

HḞ+5%⁵

半分に整数をフロアし、5を追加し、10を法とします。

メインリンク

p’ḢÇS<9Ɗ?€s

çxy

p’

1([0,x)Z)×([0,y)Z)

S<9Ɗ?€

デカルト積の各ペアについて、合計が9未満の場合:

ペアの先頭(最初の要素)を取得します。さもないと、

Ç

ペアのヘルパーリンク(上記で説明)を呼び出します。

s%⁵

y


あなたは最後までMOD 10を移動させることができ、その後にラインヘルパーはバイトを保存する-のいずれかダイアドように p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵、またはモナドなどとp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
ジョナサン・アラン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.