Tarefa principal
Sua tarefa é imprimir números inteiros em ordem decrescente, iniciando em 1 e aumentando à medida que você continua pressionando 1 novamente, até que a entrada fornecida seja alcançada; depois, imprima o restante até pressionar 1 novamente. Exemplo com entrada 6
:
1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
Nota lateral: este é A004736 no OEIS. Além disso, o primeiro exemplo (com novas linhas) é uma saída inválida, conforme especificado nas regras.
Entrada
Seu código pode receber qualquer tipo de entrada (gráfica, STDIN) na forma de um número inteiro ou número.
Resultado
Seu código deve gerar a sequência descrita acima, até o número de entrada ser atingido, e terminar a saída até atingir 1 novamente. A saída pode ser qualquer coisa, portanto, números, seqüências de caracteres, números inteiros ou saída gráfica. É necessário imprimir um único número (sem novas linhas, se for uma sequência). Sua saída pode ser ampliada e ampliada com quantos caracteres você precisar (por exemplo []
).
Como houve algum mal-entendido, aqui está um padrão de regex em que você pode testar suas saídas.
^(\D*(\d)+\D*)$
Regras
- A saída deve ser um número inteiro, não dividido por nada, nem mesmo novas linhas.
- O algoritmo não deve verificar para o primeiro exemplo de N aparecendo em qualquer forma (por exemplo, o
21
na121321
), mas sim para o primeiro exemplo de N como o número real. - Uma única nova linha à direita é permitida.
- O tratamento para entrada negativa é totalmente sua escolha; números negativos não são casos que você deve testar.
Casos de teste
Input: 6
Output: 121321432154321654321
Input: 1
Output: 1
Input: 26
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321
Input: 0
Output: 0, Empty, or Error
Input: 21
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321
Obrigado @Emigna, usei seu algoritmo para calcular esses casos de teste.
Vencedora
O vencedor foi escolhido! Foi a resposta de ErikGolfer com impressionantes 5 bytes! Parabéns!
The output must be a full number ...
Você quer dizer a sequência inteira ou apenas as diferentes substrings (1, 2-1, 3-1 ...)? Seu primeiro exemplo não parece corresponder a esta declaração.[1, 21, 321, 4321, 54321, 654321]
Que tal este?[1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1]
Ou você está falando apenas de matrizes com um único elemento, como[121321432154321654321]
?mickey321211mouse
. Realmente as\D
partes não têm razão para estar láRespostas:
Geléia , 5 bytes
Experimente online!
Fórmula não minha.
Eu suspeito que há muita coisa acontecendo aqui ...
[RESPOSTA ACEITADA] Eu daria cerca de 5 representantes a Dennis, mas isso não é Reputation Exchange. Dennis me mostrou o
VV
comportamento. Para minha surpresa, isso é menor que 05AB1E.fonte
05AB1E , 6 bytes
Experimente online!
Explicação
Exemplo de entrada 4
fonte
JavaScript (ES6), 37 bytes
Demo
Mostrar snippet de código
Método alternativo para n <10, 34 bytes (não concorrente)
No JavaScript, as strings são imutáveis. Portanto, é impossível alterar o conteúdo do enésimo caractere de uma string
s
atribuindo um novo valor as[N]
.No entanto, a expressão
++s[N]
é válida e é avaliada como seria de esperar, mesmo que a sequência permaneça inalterada. Por exemplo:E por extensão:
fonte
V,
29282723191716 bytes8 bytes salvos graças a @DJMcMayhem
3 bytes salvos graças a @ nmjcman101
Personagens ocultos:
C-x
é Ctrl + x.Experimente online! recebe entrada por meio de argumentos da linha de comando
Hexdump:
Explicação
Agora parece:
contínuo...
GIF (desatualizado)
(para arg
6
)fonte
òy$jpkgJ
À
, não terá o 0 na parte superior para remover o x. APARENTEMENTE aò
fechará umñ
para que você possa remover o segundoñ
(que é o byte que você salva). Link porque isso não fazia sentido #C #,
726965 bytesSe a saída puder ser retornada, em vez de ser gravada no console
C #,
716864 bytesAgradecemos a @VisualMelon por salvar muitos bytes
Teste aqui (com humor, o compilador on-line quebra em qualquer número acima de 420)
fonte
j=1
no loop for e salvar um ponto e vírgula. Você também pode declararj
junto comi
, para salvar oint
. Tambémi++
pode ser movido para aj=i
atribuição, salvando um byte. Você também deve poder substituir oi<=n
comi<n
se o fizerj=++i
e começari
em0
.for(int i=0,j;i<n;)
;) Também não há necessidade do{}
loop for interno.Pure bash, 34
Dois níveis de expansão de braçadeira. Com a entrada
6
, o primeiro nível se expande para{1..1} {2..1} {3..1} {4..1} {5..1} {6..1}
. Isso então se expande para1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1
, que é esmagado em uma string comprintf %s
.eval
são necessários nos dois níveis de expansão - para o primeiro nível, para que o$1
parâmetro seja expandido primeiro e para o segundo nível, para que se expanda após o primeiro nível.Experimente online
fonte
Perl, 21 bytes
Usa
-E
sem custo extra.Uso
fonte
Pitão, 7 bytes
Um programa que recebe a entrada de um número inteiro e imprime o resultado.
Experimente Online!
Como funciona
fonte
jk_hC.:S
tempo, mas é um bom trabalho!GeoGebra , 67 bytes
Cada linha é inserida separadamente na barra de entrada. A entrada é obtida de uma caixa de entrada.
Aqui está um gif da execução:
Como funciona
Entrando
1
implicitamente atribuia
a1
, eoInputBox
comando associa uma caixa de entrada coma
. Então, para cadai
no{1, 2, 3, ..., a}
, a lista{i, i-1, i-2, ..., 1}
é criado usando oSequence
comando, e cada umj
nessa lista é convertida para uma string usandoText
. Por fim,Join
mescla todas as listas eSum
concatena todos os elementos em um objeto de texto, que é exibido.fonte
Python 2, 51 bytes
fonte
Retina ,
2622 bytesA contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Explicação
Converter entrada para unário.
Em cada posição, insira o prefixo até esse ponto, bem como um avanço de linha. Isto cria um intervalo unária a partir
2
den+1
, um valor por linha.Substitua cada um
1
pelo número de caracteres depois na mesma linha. Isso transforma algo como11111
em43210
.Remova todos os feeds de linha e os zeros que os precedem.
fonte
Linguagem GameMaker, 65 bytes
fonte
APL, 10 bytes
Por exemplo:
Explicação:
⍳
: obtenha os números de 1 a N.⍳¨∘
: para cada um deles, obtenha os números de 1 a N.⌽∘
: reverter essa lista⍕¨∘
: obtém a representação de caractere de cada item (para que ele não produza os números com espaços entre eles)∊
: achatar a matriz resultantefonte
∘
é função composição, dei a explicação na ordem em que as funções são realmente avaliadasPython 2,
7168 bytesAposto que uma solução recursiva poderia ser mais curta, mas estou tendo dificuldade em formular isso em um.
Experimente online
fonte
Atualmente 8 bytes
Publicando pela primeira vez uma resposta em Na verdade, provavelmente ela poderá jogar golfe.
Como funciona
Experimente online!
fonte
R♂R♂RΣεj
tem o mesmo número de bytes, mas pode ser mais fácil escrever uma explicação para.Braquilog , 8 bytes
Experimente online!
Explicação
fonte
Perl 6 , 22 bytes
Um lambda que retorna uma string.
( Experimente online. )
Explicação:
1..$_
: Intervalo de números inteiros ...(1 2 3 4)
[,] 1..$_
: Reduza ("dobre") o operador de vírgula ...(1 2 3 4)
[\,] 1..$_
: Com resultados intermediários ( redução triangular ) ...((1) (1 2) (1 2 3) (1 2 3 4))
[\R,] 1..$_
: Aplique o meta-operador de reversão à vírgula ...((1) (2 1) (3 2 1) (4 3 2 1))
[~] flat ...
: Remova o aninhamento de lista e dobre o operador concat de cadeia ...1213214321
fonte
Haskell, 35 bytes
Exemplo de uso:
f 6
->"121321432154321654321"
.Para todos os números
x
em1 ... x
fazer uma listax,x-1, ... ,1
, transforme os números em uma sequência e concatená-los em uma única sequência. Mais uma vez, concatene essas cadeias em uma única cadeia.fonte
C89, 54 bytes
56 -2 = 54 graças a ErikGolfer!
fonte
(j=i++)
vez de(j=i)
remover o últimoi++
(não testado).i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}
(52 bytes)Python 3,
87928374 bytesResposta mais curta usando recursão:
Talvez não seja o mais curto, mas é feito apenas com a compreensão da lista do Python!
(Editado para adicionar a função de impressão e remover o \ n)
(Editado para remover a função de impressão e altere n + 1, k + 1 para n, k + 2)
fonte
`i`
vez destr(i)
. E você pode usar em"".join(...)
vez de"".join([...])
erange(1,k,-1)
remover o[...][::-1]
.n>0
pode sern
. E eu quis dizerrange(n,0,-1)
. E usen and f(n-1)+...)or""
.Pitão, 8 bytes
Explicação
fonte
05AB1E , 6 bytes
Experimente online!
fonte
Mathematica, 36 bytes
Lança um monte de avisos que podem ser ignorados com segurança.
Explicação
Usando a entrada
5
como um exemplo:Cria um intervalo
{1, 2, 3, 4, 5}
.Range
é listável, para que possamos fornecer uma lista para qualquer um de seus argumentos e ele automaticamente encadeará esse argumento. Portanto, isso nos fornece várias listas invertidas:Próximo:
Isso une a lista aninhada à sequência vazia. Como a lista aninhada não contém realmente nenhuma sequência, ela não pode realmente associar os valores (que é onde os avisos são gerados), mas
""<>
tem o efeito colateral de achatar a lista. Então isso nos dáAgora vem o belo recurso do Mathematica que
Map
não se importa com a estrutura que está mapeando. Você normalmente o aplica a uma lista, mas funciona com qualquer cabeçalho.f /@ h[a, b, c]
simplesmente te dáh[f[a], f[b], f[c]]
. No nosso caso, a cabeça éStringJoin
e os valores são os números inteiros.Então isso simplesmente transforma os números inteiros em strings. Nesse ponto,
StringJoin[...]
sabe o que fazer com eles e une todos eles em uma única sequência:fonte
GolfScript , 14 bytes
Experimente online!
Método usual, é claro, mas este é o GolfScript.
Explicação para este trecho de código VAST :
Observe que a saída é como um número único. À direita
\n
.fonte
R,
383344 bytesLeva entrada para STDIN e faz um loop de 1 a n, criando a sequência de 1 a 1 para cada etapa e imprimindo-a.
Editar: substituído
seq(i,1)
pori:1
salvar 5 bytes e mostrar por que não devo jogar golfe durante as reuniões.fonte
101
se a entrada é0
.if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")
faz o truque.if(n<-scan())
deve ser suficiente.MATL ,
1411 bytesExperimente online!
Explicação
fonte
not split up by anything
, não pense que o segundo é permitido.brainfuck, 17 bytes
Explicação
Experimente online!
fonte
Python ,
635759 bytesUma solução recursiva que funciona tanto em Python 2 quanto em 3. Isso provavelmente pode ser ainda mais complicado. Sugestões de golfe são bem-vindas! Experimente online!
Edit: -6 bytes graças a Jonathan Allan. +2 bytes com agradecimentos a mbomb007 por apontar um problema com minha resposta.
Ungolfing
fonte
map
para salvar 6 bytes:lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
PHP,
353433 bytesSalvei um byte porque eu desconectei, obrigado Titus! E outro!
Execute da linha de comando com
-r
.Resposta bastante simples, passa de 1 a nossa entrada
n
, alinhando o número no início da string e imprimindo-o.fonte
while($i++<$argv[1])echo$s=$i.$s;
CJam, 13 bytes
intérprete
fonte
ri{),:)W%}%