Escadas com dígitos empilhados


17

Dados inteiros positivos e h produzem w colunas e h linhas de texto, conforme descrito abaixo.whwh

A primeira linha começa com 11 0s, a segunda linha com 10 1s, a terceira com nove se 2assim por diante na décima linha com dois 9s. Em cada uma dessas dez primeiras linhas, após a execução inicial de dígitos consecutivos, o próximo dígito mais baixo aparece duas vezes antes do segundo dígito mais baixo aparecer duas vezes, com esse padrão repetindo para sempre. Se ocorrer uma sequência de 0s, os dígitos depois serão sempre 9s.

As linhas abaixo da décima linha são iguais às linhas imediatamente acima, mas deslocadas para a direita em um. O novo dígito que aparece é o mesmo que o dígito anterior mais à esquerda, se não estiver próximo a outra instância. Caso contrário, é o próximo dígito mais alto (alternando de 9 para 0).

Os primeiros elementos são os seguintes:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Aqui está uma imagem com texto colorido para tornar o padrão mais claro.

texto fixo

Se você precisar produzir menos colunas / linhas, basta cortar o texto acima.

Se você precisar produzir mais colunas / linhas do que isso, as escadas existentes deverão ser estendidas. Se mais colunas / linhas adicionar novas escadas de dígitos consecutivos, os dígitos deverão ser escolhidos ciclicamente dos números inteiros. Assim, para a entrada a saída deve ser(15,13)

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

Aqui está uma imagem deste texto com cores:

texto estendido

Regras

  • A saída pode ser fornecida por qualquer método conveniente .
  • Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
  • Você pode retornar uma lista de linhas, se preferir.
  • Você pode retornar uma matriz de dígitos 2D ou uma lista de listas de dígitos, se preferir.
  • Falhas padrão não permitidas.

O menor código vence.

Casos de teste

(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
Eu realmente não entendo o padrão. Você poderia explicar o padrão concretamente, em vez de esperar que ele seja extrapolado a partir de exemplos. Algumas pessoas acham exemplos úteis, mas realmente não vejo exatamente como o padrão segue os exemplos.
Assistente de trigo

Graças @WW, acrescentei explicação um pouco mais detalhada no topo
dylnan

1
1234

@qwr oh legal, não sabia que poderíamos fazer isso. Com que comando você fez isso?
dylnan

\ color {red} {text} eu acredito
qwr 15/07/18

Respostas:


7

Python 3, 94 93 78 77 74 bytes

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

-1 byte de dylnan

-15 bytes retornando uma lista de listas em vez de imprimir a partir do xnor

-1 byte, alternando a ordem das partes (j-i+10)//2%10e jde if-else

-3 bytes de Jo King , alterando o if- elsepara uma lista.

Experimente online!


O uso de uma função lambda salva um byte: TIO
dylnan

@dylnan Thanks!
pizzapants184

1
O desafio permite a saída de listas de dígitos, assim parece que você não precisa imprimir nem juntar.
Xnor


2

Tela, 14 bytes

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

Experimente aqui!

Ao fazer isso, notei em vários lugares que tive módulos negativos no Canvas (aqui, isso significava que »- floor div 2 - arredondado para 0). A resposta anterior de 18 bytes que funcionou sem correções não funciona mais (porque eu salvo apenas main.jsentre versões), mas o TIO ainda tem a versão antiga

Explicação:

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

Carvão , 20 17 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

 η                  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

Editar: salvou 3 bytes mudando para o algoritmo de @ dzaima.


2

Gelatina , 14 bytes

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

wh

Experimente online! Ou consulte um conjunto de testes (pós-formatado).

Quão?

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

Geléia , 19 bytes

Usa uma abordagem muito semelhante à de pizzapants e Neil . Guardou 1 byte graças a Jonathan Allan .

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

Experimente online!


O link auxiliar

_/HḞ+5

Este é um link monádico (o equivalente do Jelly de uma única função de argumento), que pode ser invocado no próximo link usando o quick Ç. Ele pega uma lista de dois números inteiros e faz o seguinte:

_/

Reduza por subtração.

HḞ+5%⁵

Aplique a metade de um inteiro e adicione 5 e, em seguida, use o módulo 10.

O link principal

p’ḢÇS<9Ɗ?€s

çxy

p’

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

S<9Ɗ?€

E para cada par do produto cartesiano, se a soma for menor que 9, então:

Recupere a cabeça do par (primeiro elemento). De outra forma,

Ç

Ligue para o link auxiliar (explicado acima) no par.

s%⁵

y


Você pode mover o mod 10 até o fim e, em seguida, in-line do ajudante para salvar um byte - quer como uma díade com p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵ou p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, ou como uma mônada comp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.