Faixa, reversa, soma!

21

Dado um número inteiro positivo n como entrada, produza a soma da faixa reversa de n.

Uma soma de intervalo invertida é criada criando um intervalo inclusivo de até n, começando com 1 e incluindo n, revertendo cada um dos números internos e somando-o.

Exemplo:

Aqui está o que aconteceria com uma entrada de 10:

Alcance: [1,2,3,4,5,6,7,8,9,10]

Inverter: [1,2,3,4,5,6,7,8,9,01](os números de 1 caractere invertidos são eles mesmos, 10 invertidos são 01 ou 1)

Soma: 46

Os números com mais de 3 dígitos são revertidos da mesma forma que os números com 2 dígitos. Por exemplo, 1234 se tornaria 4321.

Casos de teste:

Input -> Output

10 -> 46
5 -> 15
21 -> 519
58 -> 2350
75 -> 3147
999 -> 454545

Casos completos de texto para a entrada de 999 podem ser encontrados aqui , muito obrigado a @ fireflame241.

Camarada SparklePony
fonte
Mais resultados de casos de teste (sem numeração, desculpe, mas você pode analisar e obter o número da linha, se desejar): Experimente online!
Stephen
@StepHen>: D carvão é mais rápido
ASCII-only
1
Relevante
Silvio Mayolo
1
OEIS A062918
Freira
4
-1 porque isso é desinteressante. Parece que a maioria, se não todos, dos envios estão usando a mesma abordagem. Esse desafio parece um monte de problemas que já foram perguntados, apenas reunidos sem atalhos óbvios.
Esolanging Fruit

Respostas:

16

05AB1E , 3 bytes

Código

LíO

Usa a codificação 05AB1E . Experimente online!

Explicação

L       # Range
 í      # Reverse
  O     # Sum
Adnan
fonte
20
dat explanação tho
ETHproductions
@ETHproductions bem Reversedeve ser Reverse eachverdade ...
Erik o Outgolfer
@EriktheOutgolfer Não é vetorizado?
somente ASCII
A vetorização 05AB1E somente ASCII é realmente de 1 nível de profundidade, não ∞. Também apenas "inverter" é R, enquanto íé "inverter cada".
Erik the Outgolfer
12

Utilitários Bash + GNU, 24

seq $1|rev|paste -sd+|bc

Experimente online .

Explicação

seq $1                    # range
      |rev                # reverse (each line)
          |paste -sd+|bc  # sum
Trauma Digital
fonte
8

JavaScript (ES6), 42 bytes

f=n=>n&&+[...n+""].reverse().join``+f(n-1)

Minha solução duplamente recursiva favorita é, infelizmente, três bytes a mais:

f=n=>n&&+(g=x=>x?x%10+g(x/10|0):"")(n)+f(n-1)
ETHproductions
fonte
8

Perl 6 , 20 bytes

{(1..$_)».flip.sum}

Teste-o

Expandido:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}
Brad Gilbert b2gills
fonte
O 'possivelmente em paralelo' é necessário? Parece que você pode se livrar de um byte ou dois, omitindo-o.
Fund Monica's Lawsuit
@QPaysTaxes Não. ».flipChama o .flipmétodo em cada um dos valores no intervalo. A próxima maneira mais curta de fazer isso .map(*.flip)é 5 bytes a mais.
precisa saber é o seguinte
Ah, então a parte principal é "cada", não "(possivelmente em paralelo)". Talvez valha a pena separá-los, então.
Fund Monica's Lawsuit
@QPaysTaxes Não sei se o que você quer dizer ».flipé uma chamada de método hiper. Enquanto eu posso dividir o »e .flipusando um espaço não \ como eu fiz antes; isso dificultaria a compreensão, pois pareceria o fim de uma qqww/ /construção ( « a b "c d" »).
precisa saber é o seguinte
7

Retina , 41 36 35 bytes

.+
$*
1
1$`¶
1+
$.&
%O^$`.

.+
$*
1

Experimente online! O link inclui casos de teste. Editar: salvou 5 bytes graças a @FryAmTheEggman. Guardou 1 byte graças a @ PunPun1000. Explicação:

.+
$*

Converta para unário.

1
1$`¶

Crie um intervalo de 1até n.

1+
$.&

Converta de volta para decimal.

%O^$`.

Inverta cada número.

.+
$*

Converta de volta para unário.

1

Soma e converta de volta para decimal.

Neil
fonte
@FryAmTheEggman Bah, continuo esquecendo disso.
Neil
Você não precisa o no .+¶ O jogo irá corresponder em todas as linhas
PunPun1000
@ PunPun1000 Eu precisava disso antes da correção do FryAmTheEggman!
Neil
Percebo que O^$s`.reverter toda a string também funciona.
30517 Neil
6

Gelatina , 4 bytes

Ṛ€ḌS

Experimente online!

Quão?

Ṛ€ḌS - Link: n
Ṛ€   - reverse for €ach (in implicit range)
  Ḍ  - convert from decimal list (vectorises)
   S - sum
Jonathan Allan
fonte
Eu sabia que tinha que haver uma maneira de usar Faixa implicitamente, +1
nmjcman101
6

Haskell, 34 bytes

\n->sum$read.reverse.show<$>[1..n]

Simples e direto.

Silvio Mayolo
fonte
6

C (gcc) , 63 bytes

f(n){int t=0,c=n;for(;c;c/=10)t=t*10+c%10;return n?t+f(n-1):0;}

Experimente online!

Freira Furada
fonte
5

cQuents , 4 bytes

;\r$

Experimente online!

Explicação

       Implicit input n.
;      Series mode. Outputs the sum of the sequence from 1 to n.
 \r$   Each item in the sequence equals:
 \r    String reverse of
   $                     current index (1-based)
Stephen
fonte
5

Python 2 , 38 bytes

Não é possível calcular termos mais altos que o limite de recursão:

f=lambda x:x and int(`x`[::-1])+f(x-1)

Experimente online!

Adnan
fonte
Você pode usar import syse, sys.setrecursionlimit()se quiser lidar com números maiores, no cabeçalho do tio.
Mr. Xcoder
5

Röda , 56 41 36 bytes

15 bytes salvos graças a @fergusq

{seq 1,_|parseInteger`$_`[::-1]|sum}

Experimente online!

Essa é uma função anônima que pega um número inteiro do fluxo de entrada e gera um número inteiro para o fluxo de saída.

Explicação

{seq 1,_|parseInteger`$_`[::-1]|sum} Anonymous function
 seq 1,_                             Create a sequence 1 2 3 .. input and push each value to the stream
        |                            For each value in the stream:
                     `$_`             Cast it into a string
                         [::-1]       And reverse it
         parseInteger                 And parse the resulting string as an integer, while pushing the value to the stream
                               |sum  Sum all the values in the stream
Kritixi Lithos
fonte
Você pode salvar muitos bytes usando em [::-1]vez de inverter. Também ` $_` é mais curto que _..""e parênteses após parseInteger não são necessários.
Fergusq
@fergusq Obrigado pelas dicas, meu Röda ficou um pouco enferrujado :)
Kritixi Lithos
4

C # (.NET Core) , 103 97 bytes

using System.Linq;r=>new int[r+1].Select((_,n)=>int.Parse(string.Concat((n+"").Reverse()))).Sum()

Experimente online!

O link TIO gera todos os resultados de 1 a 999, portanto, fique à vontade para conferir meu trabalho.

Eu esperava que isso fosse um pouco mais curto, mas acontece que Reverse()retorna uma IEnumerable<char>string em vez de outra, então eu tive que adicionar alguns extras para transformá-la novamente em uma string para que eu pudesse analisá-la em um int. Talvez haja uma maneira mais curta de passar IEnumerable<char>para int corretamente.

Nota importante, isso também usa as funções Range() Reverse() e Sum()tudo em ordem.

-6 bytes graças a TheLethalCoder

Kamil Drakari
fonte
Você não precisa do ponto e vírgula à direita. Eu acho que usando new int[r]e .Select((_,n)=>...)você vai economizar bytes.
TheLethalCoder
@TheLethalCoder É preciso new int[r+1]obter a saída correta, pois o índice inicia em 0, mas ainda salva alguns bytes. RIP Range()embora
Kamil Drakari
4

Rubi, 56, 52, 41, 39 bytes

->n{(1..n).sum{|i|i.to_s.reverse.to_i}}

Ruby, 34 bytes (se lambda param for uma string)

->n{(1..n).sum{|i|i.reverse.to_i}}

Obrigado a @Unihedron pela segunda solução.

akostadinov
fonte
1
->n{funciona também.
Value Ink
1
Eu criei um programa mais curto na mesma ferramenta (Ruby) que é diferente o suficiente (lida com entrada e saída) para ser sua própria submissão, você pode encontrá-lo aqui: codegolf.stackexchange.com/a/150636/21830
Unihedron
@Unihedron, haha, eu não sabia que Ruby é tão louco por permitir intervalos de cordas. Obrigado.
Akostadinov
Sim, rubi também tem características interessantes como ?a..?ze ?a1..?h8(embora é melhor ter cuidado com o 2º formato: D)
Unihedron
As faixas devem ser 1. (para o valor inicial) implementadas succe 2. (se o valor inicial ou final não for implementado succ) devem ser numéricas, portanto int..stringserão rejeitadas como "Valor inválido para o intervalo". O inverso é verdadeiro (mas infelizmente não há é downto gama), ou (?1..n)pode ser usado em vez
Unihedron
3

Mathematica, 47 bytes

Tr[FromDigits@*Reverse/@IntegerDigits@Range@#]&

Experimente online! (para trabalhar em matemática, precisamos substituir "Tr" por "Total")

J42161217
fonte
Tr@*IntegerReverse@*Range
Ngenisis
3

Carvão , 14 13 bytes

-1 byte graças a Carlos Alejo

I∕…·⁰N«⁺ιI⮌Iκ

Experimente online! Link é a versão detalhada.

Explicação

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))
Somente ASCII
fonte
Você pode salvar um byte, soltando o último ». A propósito, onde no wiki Charcoal o Reduceoperador está documentado?
Charlie
Em nenhum lugar, é uma sobrecarga da divisão um: | Posso dar-lhe acesso de edição se você quiser (desculpe, eu sou muito preguiçoso para fazer isso sozinho)
ASCII-only
Também sim, eu esqueci por que deixar de fora o aparelho funciona lol
ASCII-only
Eu realmente gostaria que o wiki do Charcoal fosse um pouco mais documentado, pois ainda existem alguns recursos funcionais, mas ocultos. Se você me conceder acesso de edição, farei o possível para documentá-los. Exemplo: como o Modulooperador pode ser usado para formatar seqüências de caracteres em carvão vegetal?
Charlie
1
@CarlosAlejo Eu tive um pouco de tempo livre, então comecei a documentar coisas, espero que gostem!
Neil
3

Magneson , 102 bytes

Fonte

Isso não é muito visível, então aqui está uma versão ampliada (Observação: na verdade, não será executado e ainda não é muito bonito)

Apenas para fins de exibição

Magneson opera analisando uma imagem e avaliando comandos a partir das cores dos pixels que lê. Então, percorrendo a imagem para esse desafio, temos:

  • R: 0, G: 1, B: 1é um comando de atribuição de número inteiro, que usa uma sequência para o nome da variável e o valor a ser atribuído. Usaremos isso para armazenar a soma total.
  • R: 0, G: 1, B: 0é uma string pré-construída com o valor VAR_1(Observação: isso é apenas enquanto solicitamos uma string; o código de cores tem uma função separada quando usado em outro lugar).
  • R: 3, G: 0, B: 0é um número bruto. Magneson lida com números padrão exigindo que o componente Vermelho seja exatamente 3 e, em seguida, forma um número usando o valor azul diretamente mais o valor verde multiplicado por 256. Nesse caso, estamos apenas obtendo o número 0.
  • R: 0, G: 1, B: 1é outro comando de atribuição de número inteiro. Desta vez, estamos armazenando uma variável de iteração, para acompanhar o número em que estamos
  • R: 0, G: 1, B: 1é uma string pré-construída com o valor VAR_2(Mais uma vez, somente quando precisamos de uma string)
  • R: 3, G: 0, B: 0é o número 0, mais uma vez. Para os bits interessantes agora.
  • R: 1, G: 0, B: 0indica o início de um loop. Isso pega um número e faz um loop do seguinte trecho de código várias vezes.
  • R: 2, G: 0, B: 0é a função STDIN, ou pelo menos é quando precisamos de um número. Isso lê uma linha de entrada do console e a transforma em um número, pois solicitamos um número.
  • R: 0, G: 8, B: 0inicia nosso código de loop e é um comando aditivo. Isso adiciona um número a uma variável inteira e, portanto, leva uma sequência para o nome da variável e o número a ser adicionado.
  • R: 0, G: 1, B: 1 é a string pré-construída para VAR_2 , que é a nossa variável de iteração.
  • R: 3, G: 0, B: 1 é um número bruto, mas desta vez é o número 1.
  • R: 0, G: 8, B: 0 é outro comando de adição.
  • R: 0, G: 1, B: 0 é a string para VAR_1 , que é a nossa soma total.
  • R: 0, G: 3, B: 0é uma função que reverte uma string. No contexto de solicitar um número, ele converte a sequência invertida em um número.
  • R: 0, G: 2, B: 1é um comando de recuperação de número inteiro e recuperará o número armazenado em uma variável fornecida. No contexto de solicitar uma string (como no comando reverso), ele converte o número em uma string.
  • R: 0, G: 1, B: 1 É o nome VAR_2 ; nossa variável de iteração.
  • R: 1, G: 0, B: 1é o marcador para finalizar o loop e voltar ao início do loop se os critérios não forem atendidos (por isso, se precisarmos continuar fazendo loop). Caso contrário, prossiga.
  • R: 0, G: 0, B: 1 é um comando println muito simples e usa uma string.
  • R: 0, G: 2, B: 1 recupera um número inteiro de uma variável
  • R: 0, G: 1, B: 0 é o nome da nossa variável total de soma, VAR_1

    Em suma, o programa:

  • Atribui o valor 0 a VAR_1eVAR_2
  • Loops de 0 a um número fornecido no STDIN
    • Adiciona um a VAR_2
    • Adiciona o valor inteiro da reversão VAR_2paraVAR_1
  • Imprime o conteúdo de VAR_1
Isaac
fonte
3

Python 2 , 50 47 bytes

-3 bytes graças a officialaimm!

lambda n:sum(int(`i+1`[::-1])for i in range(n))

Experimente online!

notjagan
fonte
como é python 2, `` em vez de strsalvar 3 bytes.
officialaimm
3

CJam , 12 bytes

ri){sW%i}%:+

Experimente online!

-1 graças a Business Cat .

Explicação:

ri){sW%i}%:+
r            Get token
 i           To integer
  )          Increment
   {sW%i}    Push {sW%i}
    s         To string
     W        Push -1
      %       Step
       i      To integer
         %   Map
          :+ Map/reduce by Add
Erik, o Outgolfer
fonte
Você poderia adicionar uma explicação? Eu não entendo CJam (nem GolfScript). Mas o MEU venceu duas línguas (embora antigas em termos de idiomas de golfe)!
Zacharý 1/08/19
@ Zacharý done ...
Erik the Outgolfer
Você não precisa do,
Business Cat
@BusinessCat Ohhh usado demais para GolfScript aparentemente ...
Erik o Outgolfer
3

APL (Dyalog) , 10 7 bytes

3 bytes de golfe graças a @ Adám convertendo para um tradfn de um trem

+/⍎⌽⍕⍳⎕

Experimente online!

          Input (example input: 10)
          Range; 1 2 3 4 5 6 7 8 9 10
          Stringify; '1 2 3 4 5 6 7 8 9 10'
          Reverse; '01 9 8 7 6 5 4 3 2 1'
          Evaluate; 1 9 8 7 6 5 4 3 2 1
+/         Sum; 46
Kritixi Lithos
fonte
Para Uriel & Cows, grasnaram sobre a questão do bate-papo: Bem, eu fiz a parte de Matemática, além disso, fui suspensa do bate-papo, por isso não estou respondendo lá.
Zachary
7 bytes:+/⍎⌽⍕⍳⎕
Adám 02/08/17
@ Adám Obrigado pela dica. Removendo o ¨era :) inteligente
Kritixi Lithos
3

Java 8, 97 bytes

IntStream.range(1,n+1).map(i->Integer.valueOf(new StringBuffer(""+i).reverse().toString())).sum()

EDITAR

De acordo com o comentário de Kevin Cruijssen , eu gostaria de melhorar minha resposta.

Java 8, 103 bytes

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()
CoderCroc
fonte
1
Integer.valueOfpode ser jogado para new Integer, e .reverse().toString()pode ser jogado para .reverse()+"". Além disso, você deve incluir os parâmetros de importação e lambda necessários, como java.util.stream.IntStreame n->antes dele. E você também pode jogar golfe IntStreame Integerpara LongStreame Long. A resposta final será n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()( 103 bytes - Sua resposta atual com o parâmetro import e lambda adicionado seria 117 bytes .) Ainda +1, resposta legal!
Kevin Cruijssen 3/08
@KevinCruijssen Obrigado por suas valiosas contribuições. Vou atualizar minha resposta. Obrigado. :)
CoderCroc
3

Japonês , 7 5 bytes

-2 bytes graças a @Shaggy.

õs xw

Experimente online!

Explicação

õs xw  Implicit input of integer U
õs     Create range [1,U] and map to strings
    w  Reverse each string
   x   Sum the array, implicitly converting to numbers.

Solução antiga, 7 bytes

Mantendo isso, pois é um uso muito legal de z2.

õs z2 x

Experimente online!

Explicação

õs z2 x  Implicit input of integer U
õs       Create range [1,U] and map to strings
   z2    Rotate the array 180°, reversing strings
      x  Sum the array, implicitly converting back to integers
Justin Mariner
fonte
1
Você sabe que z2em uma matriz simples é o mesmo que w, righ ... uhm ... desculpe a minha inadequação na Japt ...
ETHproductions
6 bytes: õ_swÃxgraças à nova adição de N.s(f).
Shaggy
Ou mesmo apenas õs xwpor 5 bytes.
Shaggy
@ Shaggy Eu não posso acreditar que ninguém mencionou essa solução de 5 bytes até agora ... irá editar daqui a pouco. Quanto ao de 6 bytes, se isso foi adicionado depois que este desafio foi lançado, acho que não seria competitivo.
23617 Justin Mariner
@JustinMariner, nem eu! : D Embora, parece uma pena abandonar esse z2truque; isso foi um gênio maldito. Observe que não competir não é mais algo .
Shaggy
3

C ++, 146 bytes

#include<string>
using namespace std;int r(int i){int v=0,j=0;for(;j<=i;++j){auto t=to_string(j);reverse(t.begin(),t.end());v+=stoi(t);}return v;}
HatsuPointerKun
fonte
Bom trabalho! Você pode poupar alguns bytes removendo o cabeçalho e colocando "using namespace std" (verifique aqui tio.run/#cpp-gcc ). Eu também acho que você poderia substituir "auto t" com apenas "t" (?)
koita_pisw_sou
Sim, koita_pisw_sou está certo sobre a primeira parte. Mas você precisa do auto.
Zachary
@koita_pisw_sou Quer dizer que posso excluir a diretiva de cabeçalho da contagem de bytes? Mesmo para o espaço para nome? autopalavra-chave é necessária
HatsuPointerKun
Sim, confira o link Enviei
koita_pisw_sou
(Ops, não tenho certeza sobre a remoção do cabeçalho!) Mas eu estava me referindo a using namespace std;salvar bytes.
Zacharý
3

Casca , 7 6 3 bytes

ṁ↔ḣ

Experimente online!

Ungolfed / Explicação

  ḣ  -- With the list [1..N] ..
ṁ    -- .. do the following with each element and sum the values:
 ↔   --    reverse it
ბიმო
fonte
3

Perl 5 , 29 27 22 + 1 ( -p) = 23 bytes

map$\+=reverse,1..$_}{

Experimente online!

Xcali
fonte
26 bytes: map$r+=reverse,1..<>;say$r.
Denis Ibaev
Entendi ainda mais para baixo usando-p
Xcali
2

RProgN 2 , 8 bytes

{Ø.in}S+

Explicado

{Ø.in}S+
{    }S # Create a stack in range 0 through the implicit input, using the function defined
 Ø.     # Append nothing, stringifying the number
   i    # Reverse the string
    n   # Convert back to a number
       +# Get the sum of the stack, and output implicitly.

Experimente online!

ATaco
fonte
2

Neim , 4 bytes

Δ𝐫)𝐬

Experimente online!

Explicação

Δ )              for each element 1 to n (outputs list)
 𝐫               reverse 
   𝐬             sum 
lixo espacial
fonte
2
Solução alternativa: 𝐈Ψ𝐫𝐬(criar gama inclusiva, inverter cada elemento, soma)
Okx
@Okx não sabia que o Ψtoken existia! definitivamente teria usado isso em retrospectiva. real nice
space junk
2

C (gcc) , 71 bytes

q(n,x,p){p=n?q(n/10,x*10+n%10):x;}f(w,a,e){for(a=0;w;)a+=q(w--,0);e=a;}

Experimente online!

Giacomo Garabello
fonte
Espere o que? Como f()retorna seu resultado sem nenhuma returndeclaração? A e=ainstrução manipula os registros de maneira que o resultado seja armazenado no mesmo registro que o usado pelos valores retornados?
Scottinet