Scale a cifre impilate


17

Dati interi positivi e h output w colonne e h righe di testo come descritto di seguito.whwh

La prima fila inizia con 11 0secondi, la seconda fila con 10 1secondi, la terza con nove 2secondi e così via con la seconda fila con due 9secondi. Su ognuna di queste prime dieci righe, seguendo la sequenza iniziale di cifre consecutive, la cifra più bassa successiva appare due volte prima che la seconda cifra più bassa successiva appaia due volte, con questo motivo che si ripete per sempre. Se si verifica una sequenza di 0s, le cifre che seguono sono sempre 9s.

Le righe sotto la decima fila sono le stesse della riga immediatamente sopra di essa ma spostate a destra di una. La nuova cifra che appare è uguale alla precedente cifra più a sinistra se non si trovava accanto a un'altra istanza di se stessa. In caso contrario, è la cifra più alta successiva (passando da 9 indietro a 0).

I primi elementi sono i seguenti:11×10

00000000000
11111111110
22222222211
33333333221
44444443322
55555544332
66666554433
77776655443
88877665544
99887766554

Ecco un'immagine con testo colorato per rendere più chiaro il motivo.

testo fisso

Se devi produrre meno colonne / righe, devi semplicemente ritagliare il testo sopra.

Se è necessario produrre più colonne / file di questa, le scale esistenti dovrebbero essere estese. Se più colonne / righe aggiungono nuove scale di cifre consecutive, le cifre devono essere scelte ciclicamente dagli interi. Pertanto, per l'input l'output dovrebbe essere(15,13)

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

Ecco un'immagine di questo testo con il colore:

testo esteso

Regole

  • L'output può essere fornito con qualsiasi metodo conveniente .
  • È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
  • Puoi restituire un elenco di righe se preferisci.
  • Se lo si desidera, è possibile restituire una matrice 2D di cifre o un elenco di elenchi di cifre.
  • Scappatoie standard non consentite.

Il codice più corto vince.

Casi test

(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
Non capisco davvero il modello. Potresti spiegare concretamente il modello piuttosto che aspettarti che venga estrapolato dagli esempi. Alcune persone trovano utili gli esempi ma in realtà non vedo esattamente come il modello segua dagli esempi.
Post Rock Garf Hunter,

@WW Grazie, ho aggiunto una spiegazione più approfondita in alto
dylnan il

1
1234

@qwr oh bello, non sapevo che potevamo farlo. Con quale comando l'hai fatto?
dylnan,

\ color {rosso} {testo} Credo
qwr

Risposte:


7

Python 3, 94 93 78 77 74 byte

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

-1 byte da dylnan

-15 byte restituendo un elenco di elenchi invece di stampare da xnor

-1 byte commutando l'ordine delle parti (j-i+10)//2%10e jdel if-else

-3 byte da Jo King modificando if- elsein un elenco.

Provalo online!


L'uso di una funzione lambda consente di salvare un byte: TIO
dylnan,

@dylnan Grazie!
pizzapants184

1
La sfida consente di produrre elenchi di elenchi di cifre, quindi sembra che non sia necessario eseguire alcuna stampa o unione.
xnor


2

Tela, 14 byte

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

Provalo qui!

Mentre facevo questo, ho notato in diversi punti che avevo dei moduli negativi in ​​Canvas (qui, significava che »- floor div 2 - arrotondato allo 0). La precedente risposta a 18 byte che funzionava senza correzioni non funziona più (perché salvo solo main.jstra le versioni) ma TIO ha ancora la vecchia versione

Spiegazione:

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

Carbone di legna , 20 17 byte

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

Provalo online!Il collegamento è alla versione dettagliata del codice. Spiegazione:

 η                  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

Modifica: salvato 3 byte passando all'algoritmo di @ dzaima.


2

Gelatina , 14 byte

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

wh a destra che produce un elenco di elenchi di cifre.

Provalo online! Oppure vedi una suite di test (post-formattata) .

Come?

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

Gelatina , 19 byte

Utilizza un approccio molto simile a Pizzapants e Neil's . Salvato 1 byte grazie a Jonathan Allan .

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

Provalo online!


Il collegamento di aiuto

_/HḞ+5

Questo è un collegamento monadico (l'equivalente Jelly di una singola funzione argomento), che può essere invocato dal collegamento successivo usando il rapido Ç. Prende un elenco di due numeri interi e fa quanto segue:

_/

Ridurre per sottrazione.

HḞ+5%⁵

Metti la metà a un numero intero e aggiungi 5, quindi prendilo modulo 10.

Il collegamento principale

p’ḢÇS<9Ɗ?€s

çXy

p’

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

S<9Ɗ?€

E per ciascuna coppia nel prodotto cartesiano, se la loro somma è inferiore a 9, allora:

Recupera la testa della coppia (primo elemento). Altrimenti,

Ç

Chiama il collegamento helper (spiegato sopra) sulla coppia.

s%⁵

y


Puoi spostare il mod 10 fino alla fine e quindi in linea l'helper per salvare un byte - o come diade con p’Ḣ_/HḞ+ʋS<9Ɗ?€5s%⁵o p’Ḣ_/:2+ʋS<9Ɗ?€5s%⁵, o come monade conp’Ḣ_/:2+5ƲS<9Ɗ?€s%⁵
Jonathan Allan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.