Escreva uma função f (n, k) que exibe a contagem regressiva dimensional k de n.
Uma contagem regressiva unidimensional de 5 parece
54321
Uma contagem regressiva bidimensional de 5 parece
54321
4321
321
21
1
Finalmente, uma contagem regressiva tridimensional de 5 parece
54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1
Definição formal
A contagem regressiva unidimensional de qualquer n é uma única linha com os dígitos n, n-1, ..., 1 concatenados (seguidos por uma nova linha).
Para qualquer k, a contagem regressiva da dimensão k de 1 é a única linha
1
Para n> 1 e k> 1, uma contagem regressiva dimensional k de n é uma contagem regressiva dimensional (k-1) de n seguida por uma contagem regressiva dimensional k de n-1.
Entrada
Dois números inteiros positivos k e n <= 9, em qualquer formato que você escolher.
Resultado
A contagem regressiva k-dimensional de n, com uma nova linha após cada contagem regressiva unidimensional. Novas linhas extras são permitidas na saída.
Pontuação
Pontuação de golfe padrão.
Exemplo de bônus
Aqui está um exemplo com k> n, uma contagem regressiva 4-dimensional de 3 (com comentários extras que não devem ser incluídos nas soluções reais):
-- 3-dimensional countdown from 3
321
21
1
21
1
1
-- 4-dimensional countdown from 2:
---- 3-dimensional countdown from 2:
21
1
1
---- 4-dimensional countdown from 1:
1
Esclarecimentos:
Os dígitos em uma linha não precisam ser adjacentes, mas devem ser espaçados igualmente.
Você pode escrever um programa completo em vez de apenas uma função, se preferir.
Respostas:
Python, 60 bytes
Teste em Ideone .
Como funciona
A contagem regressiva k- dimensional de n pode ser definida com um único caso base:
Utilizando a definição recursiva a partir da pergunta,
f(n,k)
retornosf(n,k-1)+f(n-1,k)
, se n> 1 e k> 1 ; caso contrário, ele retornará os últimos n + 1 caracteres de'987654321\n'
.fonte
Gelatina , 8 bytes
Este é um programa completo que espera n e k como argumentos da linha de comando.
Experimente online!
Como funciona
fonte
Y
funciona no lugar dep⁷
?5, 1
, ele exibe[54321]
.Javascript,
403837 bytesEconomizou 1 bytes graças a @ edc65:
Respostas anteriores
38 bytes graças a @Neil:
40 bytes:
fonte
||
vez de?n:
. Salve outro byte usando uma nova linha literal dentro de`
s em vez de'\n'
.f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
*
vez disso&&
.Python,
7675 bytes-1 byte graças a @ Sp3000
Executa o procedimento conforme descrito no OP: une os
n
resultados decrescentesk-1
em novas linhas com uma base da recursão da'n...1'
string quandok
é1
(k
não maior do que1
desde que recebemosk
entrada positiva garantida ).Casos de teste em ideone
fonte
Python,
868180 bytesd
é o número de dimensões,n
é o número da contagem regressiva.Postará uma explicação em breve.
EDIT # 1: Alterado para lambda.
EDIT # 2: salvou 1 byte graças a @DestructibleWatermelon.
fonte
Haskell, 57 bytes
Exemplo de uso:
5 # 3
->"\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1"
.Uma implementação direta da definição.
fonte
Raquete 215 bytes
Teste:
fonte
54321
aparece duas vezes?λ
) é sempre menos bytes do que o usodefine
. Além disso, a entrada paran
foi especificada como um número para o qual você constrói(range 1 n)
. Veja também sobre como substituir o seucond
por umif
, já que você salva bytes no arquivoelse
.J,
383732 bytesEsta é uma função que leva k no LHS e n no RHS.
Guardou 5 bytes com ideias de @ Adám.
Uso
Explicação
fonte
Dyalog APL , 18 bytes
Solicita n e depois k .
~∘'0'⍤1
remova (~
) os (∘
) zeros ('0'
) das linhas (⍤1
) (preenchimento com espaços conforme necessário) de⍕
a representação de caracteres de(⌽⍳)⍤0⍣⎕
a⌽
contagem reversa ( ) até (⍳
) cada escalar (⍤0
), repetida (⍣
) entrada (⎕
) vezes⊢
em⎕
entrada numéricaTryAPL online!
fonte
C 93 bytes
Implementação iterativa.
C
6765615652 bytesImplementação recursiva
fonte
m
dentro daputs()
chamada por"987654321"
.Lote, 117 bytes
Resposta em Python do Porto de Dennis ♦.
fonte
Ruby, 56 bytes
Uso
Ao exibir qualquer solução, você deve usar "Kernel # puts".
Exemplo:
fonte