Лестничные лестницы

17

При заданных натуральных числах и h выведите w столбцов и h строк текста, как описано ниже.весчасвесчас

Первый ряд начинается с 11 0с, второй ряд - с 10 1с, третий - с 9 2с и т. Д. До десятого ряда с двумя 9с. В каждой из этих первых десяти строк после начального ряда последовательных цифр следующая младшая цифра появляется два раза, прежде чем вторая следующая младшая цифра появляется два раза, причем этот шаблон повторяется вечно. Если происходит 0s, цифры после него всегда 9s.

Ряды ниже десятого ряда такие же, как ряд непосредственно над ним, но смещены вправо на один. Новая появившаяся цифра совпадает с предыдущей самой левой цифрой, если она не была рядом с другим экземпляром самого себя. В противном случае это следующая наивысшая цифра (цикл от 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

Вот изображение этого текста с цветом:

расширенный текст

правила

  • Вывод можно дать любым удобным способом .
  • Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
  • Вы можете вернуть список строк, если хотите.
  • Вы можете вернуть двумерный массив цифр или список списков цифр, если хотите.
  • Стандартные лазейки запрещены.

Самый короткий код выигрывает.

Контрольные примеры

(вес,час)

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

dylnan
источник
8
Я не очень понимаю шаблон. Не могли бы вы объяснить модель более конкретно, а не ожидать ее экстраполяции из примеров. Некоторые люди находят примеры полезными, но я не совсем понимаю, как шаблон следует из примеров.
Пост Рок Гарф Хантер
@WW Спасибо, я добавил немного более подробного объяснения вверху
dylnan
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)]

-1 байт от Dylnan

-15 байт, возвращая список списков вместо печати из xnor

-1 байт, переключая порядок (j-i+10)//2%10и jчасти if-else

-3 байта от Джо Кинга путем изменения if- elseв список.

Попробуйте онлайн!

pizzapants184
источник
Использование функции лямбда экономит байт: TIO
dylnan
@dylnan Спасибо!
pizzapants184
1
Задача позволяет выводить списки списков цифр, поэтому вам не нужно печатать или соединять.
xnor
7

C (gcc) , 101 100 99 байтов

  • Сохраненный байт благодаря pizzapants184 .
  • Сохраненный байт.
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
dzaima
источник
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

Изменить: 3 байта сохранены путем переключения на алгоритм @ dzaima.

Нил
источник
2

Желе , 14 байт

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

весчас

Попробуйте онлайн!Или посмотрите (постформатированный) набор тестов .

Как?

_@þ: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 байт

Использует очень похожий подход к пицце и Нейлу . Сохранено 1 байт благодаря Джонатану Аллану .

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

Попробуйте онлайн!


Вспомогательная ссылка

_/HḞ+5

Это монадическая ссылка (эквивалент Jelly функции с одним аргументом), которая может быть вызвана из следующей ссылки с помощью быстрой Ç. Он принимает список из двух целых чисел и выполняет следующие действия:

_/

Уменьшить вычитанием.

HḞ+5%⁵

Положите половину целого числа и добавьте 5, затем возьмите по модулю 10.

Основная ссылка

p’ḢÇS<9Ɗ?€s

çИксY

p’

1([0,Икс)Z)×([0,Y)Z)

S<9Ɗ?€

А для каждой пары в декартовом произведении, если их сумма меньше 9, то:

Получить голову пары (первый элемент). В противном случае,

Ç

Назовите вспомогательную ссылку (объясненную выше) на паре.

s%⁵

Наконец, разделите полученный список на куски длины Y и возьми каждый мод 10.

Мистер Xcoder
источник
Вы можете переместить мод 10 в конец и затем включить помощника для сохранения байта - либо в виде диады с p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵или p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, либо в виде монады сp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Джонатаном Алланом