Soma as linhas do triângulo concatenado
Considere o seguinte triângulo.
Como você provavelmente notou, a primeira linha tem o comprimento 1, e cada linha a seguir é 1 dígito a mais que a anterior e contém os dígitos dos números inteiros positivos concatenados.
Vai ser dado um número inteiro N . Sua tarefa é encontrar a soma dos dígitos que se encontram em N ª linha do triângulo acima.
Você pode escolher 0 ou 1 indexação. Especifique isso na sua resposta.
Aplicam-se lacunas padrão .
Você pode receber e fornecer saída por qualquer média padrão e em qualquer formato razoável.
Este é o OEIS A066548 e essa sequência é o próprio triângulo (exceto que não removemos zeros à esquerda).
Isso é código-golfe , então o código mais curto em bytes (em todos os idiomas) vence. Divirta-se jogando golfe!
Observe que os itens acima são indexados em 0. Se você estiver procurando por casos de teste indexados em 1, aumente a entrada em 1.
Em uma nota não relacionada, mudei recentemente minha foto de perfil e isso me inspirou a escrever esse desafio.
Provavelmente isso poderia ser um pouco mais curto.
Edit: -7 bytes graças a @ Mr.Xcoder
n**2é n*n.
69 bytes . Usando a fórmula de Gauss,sum(range(n)) = ~-n*n/2 = (n - 1) * n / 2
@ Mr.Xcoder Eu acho que ele faz ...
@EriktheOutgolfer Você está certo, meu mau
-1 graças a Emigna .
Indexação 1.
Você pode remover o seu Sse substituir Jpor S.
@Emigna duh ....
Perl 6 , 47 45 42 bytes
Experimente online! (para trabalhar em matemática, "Tr" deve ser substituído por "Total")
Guardado 5 bytes graças a Laikoni !
Aqui está a versão menos golfe:
n%x=sum[read[d]|d<-take n x]:(n+1)%drop n xé alguns bytes mais curto.
@Laikoni Thanks! Editado. Não sei por que pensei que splitOnisso salvaria bytes.
começando a jogar golfe .... 1-indexado
obrigado @Zachary. sua presunção está correta :) raspou 1 byte tnx para @Andrius e 15 mais tnx para @ user2390246
@Giuseppe - tnx para o strtoi. novo para mim. 5 bytes abaixo :)
Não acho que você precise y=nem parens n*(n-1)/2+1, e o nome da língua provavelmente não é [R].
você pode economizar 1 byte alterando as.integercomas.double
— AndriusZ 4/17
Em vez de x, uso F, pois isso já é inicializado para 0.
Além disso, 1:n+a-1dá o mesmo que a:(a+n-1). Nesse caso, você não precisa definir acom antecedência, basta colocá-lo diretamente na forexpressão. Isso também permitirá que você cancele um + 1 / -1.
79 bytes . Utilizado em substringvez de, substrna verdade, isso é apenas uma soma sobre os índices da substring. Além disso, é sempre bom incluir um link TIO para suas soluções :) +1, ótimo trabalho.
Emojicode , 182 bytes
Define um método chamado © que leva a returns e retorna a 🚂. 1 indexado.
Nota: muitas opções de emoji não fazem muito sentido no Emojicode 0.5. É 0.x, afinal. O 0.6 corrigirá isso. Portanto, se você quiser aprender isso (porque quem não gostaria), recomendo aguardar um momento.
O Emojicode é uma linguagem de programação orientada a objetos com genéricos, protocolos, opcionais e fechamentos, mas este programa não usa fechamentos, e todos os genéricos e protocolos podem ser considerados implícitos.
O programa opera em apenas alguns tipos: 🚂 é o tipo inteiro e 🔡 é o tipo de sequência. Além disso, appears aparecem em condições, que podem assumir um valor de 👍 (verdadeiro) ou 👎 (falso).
Atualmente, não há operadores no Emojicode, portanto, adição, comparsões e outras operações que normalmente são operadores são implementadas como funções, fazendo com que as expressões usem a notação de prefixo . Os operadores também estão planejados em 0,6.
© pega um 🚂 chamado ae retorna um 🚂.
Declare um congelado ("constante") ligual ao a-ésimo número triangular (fórmula na notação de prefixo). Isso representa o comprimento da sequência de números que precisamos gerar.
Atribua uma sequência vazia à variável t .
Atribuir i = 0 .
Enquanto o lfor maior que o comprimento det
Anexar a representação textual de i base 10 em t.
Laço final
Atribuir s = 0
Pegue uma substring tcomeçando em l - a(a - 1 th número triangular) de comprimento a, itere sobre todos os caracteres
Converta o caractere em sequência, analise o número inteiro na base 10, desembrulhe o opcional (nada será retornado se a sequência não for um número) e adicione à svariável.
Método final.
PHP, 66 + 1 bytes
Execute como pipe -nRou experimente on-line .
requer PHP 5.4 ou posterior para indexar a expressão.
Experimente aqui: http://pyth.herokuapp.com/
Usa indexação baseada em 1
⍳⍵×⍵, 1 através da entrada ao quadrado
⍕¨, transforme cada elemento em uma sequência
∊,/, concatená-los juntos
(+/⍳⍵)↑, pegue as linhas até a entrada
⍵↑⌽, pegue a linha desejada
⍎¨, transforme cada elemento em um número
+/soma
-18 bytes graças a @Nevay
98 bytes: n->{String r="";int i=0,x=0;for(;x++<n*n;r+=x);for(x=0;x<n;)i+=r.charAt(x+++~-n*n/2)-48;return i;}.
R, 99 , 105 , 97 bytes
graças a @ Giuseppe por salvar 8 bytes
@Giuseppe na descrição é mencionado: "Você receberá um número inteiro N." e esse N é usado na minha solução. Ou talvez eu tenha entendido algo errado.
Veja o ligado "qualquer meio padrão" na descrição :)
Mudança @Giuseppe e usou a sua sugestão sobrestrtoi
97 bytes , com uma mensagem de aviso. É sempre bom incluir um link para o TIO em sua descrição para que outros possam testá-lo!
@ Giuseppe Eu não conheço nenhum R, mas talvez uma função usaria menos bytes?
— NieDzejkob 04/09
SOGL V0.12 , 15 13 bytes
Enquanto trabalhava nisso, corrigi um bug que ∑não funcionava em matrizes numéricas e que mincorretamente recebia entradas implícitas.
-17 bytes graças a Zacharý
Índice começa em 1
Alterar a última linha para isso deve salvar dois bytes:int s(int n){++n;std::string t;int i=0,p=0;for(;i<=n;)p+=i++;for(i=0;t.size()<p;t+=std::to_string(++i));t=t.substr(0,p);t=t.substr(t.size()-n);i=0;for(auto&a:t)i+=a-48;return i;}
Além disso, se você está tomando atualmente entrada como 0-indexada, você pode convertê-lo em um índice e soltar o++n;
@ Zacharý Obrigado. Btw, o código contém caracteres Unicode invisíveis por algumas razões
Qual deles, minha sugestão de C ++ ou meu APL? O APL usa sua própria página de códigos e provavelmente não aparecerá corretamente se você não tiver a fonte correta.
@ Zacharý A sugestão de C ++ que você escreveu no comentário. Existem dois caracteres unicode antes de zero, cometendo erros como "0" identifier is unknownno visual studio. A mesma coisa para to_stringe size. Você pode vê-lo se você copiar e colar o código no bloco de notas ++, e codificação convertido para ANSI, você vai ver alguns ??no editor
Pitão , 15 14 13 bytes
Experimente aqui! ou Confira a suíte de testes.
Alternativas de 13 bytes :
> <>, 141 + 2 bytes
1-Indexado
+ 2b para sinalizador -v
O Tio.run realmente não parece gostar dos meus programas <> recentemente ... Ainda pode ser verificado em https://fishlanguage.com . A entrada entra na 'pilha inicial'.
Edit: Acontece que tio.run não gosta, porque lida com '[' e ']' de maneira diferente para fishlanguage.com. O fishlanguage.com inverte a pilha ao criar ou remover uma nova pilha, mas o tio.run não.
Perl 5 , 62 + 1 (-p) = 63 bytes
O resultado é 1 indexado.
Concatene mais que o suficiente dígitos juntos e pule os irrelevantes no início (a duração do salto é a soma dos números inteiros de 1 a n-1). Pegue os próximos ndígitos, coloque um +na frente de cada um e avalie essa equação.