Складені розрядні сходи


17

Дано додатні цілі числа і виведення стовпців і рядків тексту, як описано нижче.шгодшгод

Перший рядок починається з 11 0с, у другому ряду з 10 1с, третіми з дев'ятьма 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


8
Я не дуже розумію цю закономірність. Чи можете ви пояснити шаблон конкретно, а не очікувати його екстраполяції із прикладів. Деякі люди вважають приклади корисними, але я не дуже точно бачу, як випливає з цих прикладів.
Опублікувати Rock Garf Hunter

@WW Спасибі, я додав трохи більш ретельне пояснення вгорі
dylnan

1
1234 рік

@qwr о добре, не знав, що ми можемо це зробити. З якою командою ти це зробив?
ділнан

\ color {red} {text} Я вважаю
qwr

Відповіді:


7

Пітон 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 байт від ділнан

-15 байт шляхом повернення списку списків замість друку з xnor

-1 байт шляхом перемикання порядку (j-i+10)//2%10і jчастин if-else

-3 байти від Jo King , змінивши if- elseу список.

Спробуйте в Інтернеті!


Використання функції лямбда зберігає байт: 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◂@]]

Спробуйте тут!

Роблячи це, я помітив, що в декількох місцях у мене були негативні модулі на полотні (тут це означало, що »- розділ 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

Редагувати: збережено 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

Це монадичне посилання (еквівалент желейної функції одного аргументу), яке можна викликати з наступного посилання за допомогою швидкого Ç. Він бере список з двох цілих чисел і робить наступне:

_/

Зменшити відніманням.

HḞ+5%⁵

Перекладіть половину на ціле число і додайте 5, а потім візьміть його за модулем 10.

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

p’ḢÇS<9Ɗ?€s

çху

p’

1([0,х)Z)×([0,у)Z)

S<9Ɗ?€

І для кожної пари декартового продукту, якщо їх сума менше 9, то:

Витягніть голову пари (перший елемент). Інакше

Ç

Зателефонуйте на посилання для помічників (пояснено вище) на парі.

s%⁵

у


Ви можете переміщати моди 10 до кінця , а потім в лінії помічник , щоб зберегти байти - або у вигляді діади з p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵або p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, або як монада зp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Джонатаном Allan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.