Yığılmış basamaklı merdivenler


17

Pozitif tamsayılar verilen ve h çıkış ağırlık sütun ve h aşağıda tarif edildiği gibi metin satırları.whwh

İlk satır 11 ile başlar 0 s , ikinci sıra 10 1s ile, üçüncü sıra dokuz 2s ile başlar ve onuncu sıradan iki 9s ile aşağı doğru devam eder . Bu ilk on satırın her birinde, ardışık basamakların ilk çalışmasını takiben, bir sonraki en düşük basamak ikinci bir sonraki en düşük basamak iki kez görünmeden iki kez görünür ve bu desen sonsuza kadar tekrarlanır. Bir çalışma varsa 0s oluşur ondan sonra basamak her zaman 9bu.

Onuncu sıranın altındaki satırlar, hemen üstündeki satırla aynıdır, ancak sağa birer birer kaydırılır. Görünen yeni basamak, kendisinin başka bir örneğinin yanında değilse, en soldaki önceki basamakla aynıdır. Aksi takdirde, bir sonraki en yüksek basamaktır (9'dan 0'a geçiş).

İlk 11x10 elemanlar aşağıdaki gibidir:

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Deseni daha net hale getirmek için renkli metin içeren bir görüntü.

sabit metin

Daha az sütun / satır üretmeniz gerekiyorsa, yukarıdaki metni kırpmanız yeterlidir.

Bundan daha fazla sütun / satır üretmeniz gerekiyorsa, mevcut merdivenler genişletilmelidir. Daha fazla sütun / satır ardışık basamaklardan oluşan yeni merdivenler eklerse, basamaklar tamsayılardan döngüsel olarak seçilmelidir. Dolayısıyla giriş için çıkış(15,13)

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

İşte bu metnin renkli bir görüntüsü:

genişletilmiş metin

kurallar

  • Çıktı herhangi bir uygun yöntemle verilebilir .
  • Tam bir program veya bir işlev kabul edilebilir. Bir işlev varsa, çıktıyı yazdırmak yerine döndürebilirsiniz.
  • İsterseniz bir satır listesi döndürebilirsiniz.
  • İsterseniz 2D bir dizi rakam veya rakam listesi döndürebilirsiniz.
  • Standart boşluklara izin verilmedi.

En kısa kod kazanır.

Test senaryoları

Giriş, test senaryoları için olarak alınır .(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
Deseni gerçekten anlamıyorum. Deseni örneklerden tahmin edilmesini beklemek yerine somut olarak açıklayabilir misiniz? Bazı insanlar örnekleri faydalı buluyor, ancak modelin örneklerden nasıl geldiğini tam olarak göremiyorum.
Rock Garf Hunter Post

@WW Teşekkürler, en üste biraz daha ayrıntılı bir açıklama
ekledim

1
1234

@ qwr oh güzel, bunu yapabileceğimizi bilmiyordum. Hangi komutla yaptın?
dylnan

\ color {red} {text} İnanıyorum
qwr

Yanıtlar:


7

Python 3, 94 93 78 77 74 bayt

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

-1 bayt Dylnan'dan

-15 bayt yazdırmak yerine bir liste listesi döndürerek Xnor'dan

-1 bayt - (j-i+10)//2%10ve jparçalarının sırasını değiştirerekifelse

Jo King'den -3 bayt değiştirerek if-else bir listeye.

Çevrimiçi deneyin!


Bir lambda işlevi kullanmak bir bayt tasarrufu sağlar: TIO
dylnan

@dylnan Teşekkürler!
pizzapants184

1
Zorluk, sayı listelerinin çıktılarının alınmasına izin verir, bu nedenle herhangi bir yazdırma veya birleştirme yapmanız gerekmez gibi görünür.
xnor


2

Tuval, 14 bayt

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

Burada deneyin!

Bunu yaparken Tuval'de negatif modüllerim olduğunu fark ettim (burada, bu »- kat div 2 - 0'a yuvarlandı). Düzeltmeler olmadan çalışan önceki 18 bayt yanıtı artık çalışmıyor (çünkü yalnızca main.jssürümler arasında kaydediyorum ), ancak TIO hala eski sürüme sahip

Açıklama:

[            ]  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

Kömür , 20 17 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

 η                  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

Düzenleme: @ dzaima'nın algoritmasına geçerek 3 bayt kaydetti.


2

Jöle , 14 bayt

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

İkili bir bağlantı w solda ve h sağdaki rakam listesinin bir listesini verir.

Çevrimiçi deneyin! Veya (sonradan biçimlendirilmiş) bir test paketine bakın .

Nasıl?

_@þ: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

Jöle , 19 bayt

Kullanımları çok benzer bir yaklaşım pizzapants' ve Neil . Jonathan Allan sayesinde 1 bayt kurtardı .

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

Çevrimiçi deneyin!


Yardımcı bağlantı

_/HḞ+5

Bu, monadic bir bağlantıdır (tek bir bağımsız değişken işlevinin Jelly eşdeğeri), bir sonraki bağlantıdan quick kullanılarak çağrılabilir Ç. İki tamsayının bir listesini alır ve üzerinde aşağıdakileri yapar:

_/

Çıkarma ile azaltın.

HḞ+5%⁵

Bir tamsayı yarısını katlayın ve 5 ekleyin, sonra modulo 10 alın.

Ana bağlantı

p’ḢÇS<9Ɗ?€s

Bu, bir ikili bağlantıdır (iki bağımsız değişken işlevinin Jelly eşdeğeri), bir sonraki bağlantıdan çquick kullanılarak çağrılabilir . İki tamsayı alırx ve y ve aşağıdakileri gerçekleştirir:

p’

Aralıklarının kartezyen ürünü ve daha sonra çıkarılması 1bu listedeki her tamsayıdan. Eşdeğerdir([0,x)Z)x([0,y)Z).

S<9Ɗ?€

Ve Kartezyen üründeki çiftlerin her biri için, toplamları 9'dan azsa:

Çiftin başını alın (ilk eleman). Aksi takdirde,

Ç

Çift üzerindeki yardımcı bağlantıyı (yukarıda açıklanmıştır) arayın.

s%⁵

Son olarak, ortaya çıkan listeyi uzunluk parçalarına ayırın y ve her mod 10 al.


Mod 10'u sonuna kadar taşıyabilir ve daha sonra bir baytı kaydetmek için yardımcıyı sıraya yerleştirebilirsiniz - ya bir ile ikili olarak p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵ya p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵da ile bir monad olarakp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.