Rango, reversa, suma!

21

Dado un entero positivo n como entrada, genera la suma del rango inverso de n.

Una suma de rango invertida se crea haciendo un rango inclusivo hasta n, comenzando con 1 e incluyendo n, invirtiendo cada uno de los números dentro y sumándolo.

Ejemplo:

Esto es lo que sucedería para una entrada de 10:

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

Reverso: [1,2,3,4,5,6,7,8,9,01](los números 1-char invertidos son ellos mismos, 10 invertidos es 01 o 1)

Suma: 46

Los números con más de 3 dígitos se invierten de la misma manera que los números con 2 dígitos. Por ejemplo, 1234 se convertiría en 4321.

Casos de prueba:

Input -> Output

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

Aquí se pueden encontrar casos de texto completos para la entrada de 999 , muchas gracias a @ fireflame241.

Camarada SparklePony
fuente
Más resultados de casos de prueba (no numerados, lo siento, pero puede analizarlos y obtener su número de línea si lo desea): ¡ Pruébelo en línea!
Stephen
@StepHen>: D Charcoal es más rápido
solo ASCII el
1
Relevante
Silvio Mayolo
1
OEIS A062918
Leaky Nun
44
-1 porque esto no es interesante. Parece que la mayoría, si no todas, las presentaciones están utilizando el mismo enfoque. Este desafío parece un montón de problemas que ya se han planteado, que se han conectado sin atajos obvios.
Esolanging Fruit

Respuestas:

16

05AB1E , 3 bytes

Código

LíO

Utiliza la codificación 05AB1E .Pruébalo en línea!

Explicación

L       # Range
 í      # Reverse
  O     # Sum
Adnan
fuente
20
dat explicación tho
ETHproductions 01 de
@ETHproductions bien Reversedebería ser Reverse eachrealmente ...
Erik the Outgolfer
@EriktheOutgolfer ¿No está vectorizado?
Solo ASCII el
@ La vectorización ASCII solo 05AB1E es realmente de 1 nivel de profundidad, no ∞. También "revertir" es R, mientras íque "revertir cada uno".
Erik the Outgolfer
12

Bash + GNU utils, 24

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

Pruébalo en línea .

Explicación

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

JavaScript (ES6), 42 bytes

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

Lamentablemente, mi solución doblemente recursiva favorita es 3 bytes más larga:

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

Perl 6 , 20 bytes

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

Pruébalo

Expandido:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}
Brad Gilbert b2gills
fuente
¿Se requiere 'posiblemente en paralelo'? Parece que podría deshacerse de un byte o dos omitiéndolo.
Financia la demanda de Mónica el
@QPaysTaxes No. El ».flipllama al .flipmétodo en cada uno de los valores en el Rango. La siguiente forma más corta de hacer esto .map(*.flip)es 5 bytes más.
Brad Gilbert b2gills
Ah, entonces la parte clave es "cada", no "(posiblemente en paralelo)". Podría valer la pena dividirlos, entonces.
Financia la demanda de Mónica el
@QPaysTaxes No estoy seguro de saber a qué te refieres con ».flipuna llamada de método hiper. Si bien puedo dividir el »y .flipmediante el uso de un unspace \ como lo hice antes; eso dificultaría su comprensión, ya que parecería el final de una qqww/ /construcción ( « a b "c d" »).
Brad Gilbert b2gills
7

Retina , 41 36 35 bytes

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

.+
$*
1

Pruébalo en línea! El enlace incluye casos de prueba. Editar: Guardado 5 bytes gracias a @FryAmTheEggman. Guardado 1 byte gracias a @ PunPun1000. Explicación:

.+
$*

Convierte a unario.

1
1$`¶

Crea un rango de 1a n.

1+
$.&

Convertir de nuevo a decimal.

%O^$`.

Invierte cada número.

.+
$*

Convertir de nuevo a unario.

1

Suma y convierte de nuevo a decimal.

Neil
fuente
@FryAmTheEggman Bah, sigo olvidándome de eso.
Neil
No necesita el en el .+¶ partido coincidirá a través de las líneas
PunPun1000
@ PunPun1000 ¡Lo necesitaba antes de la solución de FryAmTheEggman!
Neil
Me doy cuenta de que O^$s`.invertir toda la cadena también funciona.
Neil
6

Jalea , 4 bytes

Ṛ€ḌS

Pruébalo en línea!

¿Cómo?

Ṛ€ḌS - Link: n
Ṛ€   - reverse for €ach (in implicit range)
  Ḍ  - convert from decimal list (vectorises)
   S - sum
Jonathan Allan
fuente
SABÍA que tenía que haber una manera de usar Range implícitamente, +1
nmjcman101
6

Haskell, 34 bytes

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

Simple y directo.

Silvio Mayolo
fuente
5

cQuents , 4 bytes

;\r$

Pruébalo en línea!

Explicación

       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
fuente
5

Python 2 , 38 bytes

No se pueden calcular términos más altos que el límite de recursividad:

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

Pruébalo en línea!

Adnan
fuente
Puede usar import sysy sys.setrecursionlimit()si desea manejar números más grandes, en el encabezado tio.
Sr. Xcoder
5

Röda , 56 41 36 bytes

15 bytes guardados gracias a @fergusq

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

Pruébalo en línea!

Esta es una función anónima que toma un número entero de la secuencia de entrada y genera un número entero en la secuencia de salida.

Explicación

{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
fuente
Puede guardar muchos bytes utilizando en [::-1]lugar de invertir. Además, ` $_` es más corto que _..""y no se necesitan paréntesis después de parseInteger.
fergusq
@fergusq Gracias por los consejos, mi Röda se ha vuelto un poco oxidada :)
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()

Pruébalo en línea!

El enlace TIO genera todos los resultados del 1 al 999, así que no dude en consultar mi trabajo.

Esperaba que esto fuera un poco más corto, pero resulta que Reverse()devuelve una IEnumerable<char>cadena en lugar de otra, por lo que tuve que agregar un poco más para convertirla nuevamente en una cadena para poder analizarla en un int. Tal vez hay una forma más corta de ir IEnumerable<char>a int correctamente.

De menor importancia, esto también utiliza las funciones Range() Reverse()y Sum()todo en orden.

-6 bytes gracias a TheLethalCoder

Kamil Drakari
fuente
No necesitas el punto y coma final. Creo que usar new int[r]y .Select((_,n)=>...)te ahorrará bytes.
TheLethalCoder
@TheLethalCoder Se necesita new int[r+1]obtener la salida correcta ya que el índice comienza en 0, pero aún guarda algunos bytes. RIP Range()aunque
Kamil Drakari 01 de
4

Rubí, 56, 52, 41, 39 bytes

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

Ruby, 34 bytes (si lambda param es una cadena)

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

Gracias a @Unihedron por la segunda solución.

akostadinov
fuente
1
->n{funciona igual de bien
Value Ink el
1
He creado un programa más corto en la misma herramienta (Ruby) que es lo suficientemente diferente (se trata de entrada y salida) para ser su propia presentación, puedes encontrarlo aquí: codegolf.stackexchange.com/a/150636/21830
Unihedron
@Unihedron, jaja, no sabía que Ruby estaba tan loco como para permitir rangos de cuerdas. Gracias.
akostadinov
Sí, Ruby también tiene características ingeniosas como ?a..?zy ?a1..?h8(aunque es mejor tener cuidado con el segundo formato: D)
Unihedron
Los rangos deben ser 1. (para el valor inicial) implementar succy 2. (si el valor inicial o final no se implementa succ) deben ser numéricos, por lo que int..stringserán rechazados como "Valor incorrecto para el rango". Lo inverso es cierto (pero, por desgracia, no hay rango descendente), o (?1..n)puede usarse en su lugar
Unihedron
3

Mathematica, 47 bytes

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

Pruébalo en línea! (para trabajar en matemáticas necesitamos reemplazar "Tr" con "Total")

J42161217
fuente
Tr@*IntegerReverse@*Range
ngenisis
3

Carbón , 14 13 bytes

-1 byte gracias a Carlos Alejo

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

Pruébalo en línea! El enlace es a la versión detallada.

Explicación

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))
Solo ASCII
fuente
Puede guardar un byte soltando el último ». Por cierto, ¿en Reducequé parte de la wiki de Carbón está documentado el operador?
Charlie
En ninguna parte, es una sobrecarga de la división uno: | Puedo darle acceso de edición si lo desea (lo siento, soy demasiado vago para hacerlo yo mismo)
ASCII solo el
También, sí, olvidé por qué dejar de lado los corchetes finales funciona jajaja
solo ASCII el
Realmente me gustaría que la wiki de Charcoal esté un poco más documentada, ya que todavía hay algunas funciones que funcionan pero están ocultas. Si me concedes acceso de edición, haré todo lo posible para documentarlos. Ejemplo: ¿cómo se Modulopuede usar el operador para formatear cadenas en carbón?
Charlie
1
@CarlosAlejo He tenido un poco de tiempo libre, así que comencé a documentar cosas, ¡espero que les guste!
Neil
3

Magneson , 102 bytes

Fuente

Eso no es muy visible, así que aquí hay una versión ampliada (Nota: en realidad no se ejecutará, y aún no es muy bonita)

Mostrar solo propósitos

Magneson opera analizando una imagen y evaluando comandos de los colores de los píxeles que lee. Entonces, al recorrer la imagen para este desafío, tenemos:

  • R: 0, G: 1, B: 1es un comando de asignación de enteros, que toma una cadena para el nombre de la variable y el valor a asignar. Usaremos esto para almacenar la suma total.
  • R: 0, G: 1, B: 0es una cadena preconstruida con el valor VAR_1(Nota: Esto es solo mientras pedimos una cadena; el código de color tiene una función separada cuando se usa en otro lugar).
  • R: 3, G: 0, B: 0Es un número sin procesar. Magneson maneja los números estándar al requerir que el componente Rojo sea exactamente 3, y luego forma un número usando el valor azul directamente más el valor verde multiplicado por 256. En este caso, solo estamos obteniendo el número 0.
  • R: 0, G: 1, B: 1es otro comando de asignación de enteros. Esta vez, estamos almacenando una variable de iteración, para realizar un seguimiento de en qué número estamos
  • R: 0, G: 1, B: 1 es una cadena preconstruida con el valor VAR_2 (Una vez más, solo cuando necesitamos una cadena)
  • R: 3, G: 0, B: 0es el número 0, una vez más. Sobre las partes interesantes ahora.
  • R: 1, G: 0, B: 0indica el inicio de un bucle. Esto toma un número y repite el siguiente fragmento de código que muchas veces.
  • R: 2, G: 0, B: 0es la función STDIN, o al menos es cuando necesitamos un número. Esto lee una línea de entrada de la consola y la convierte en un número, ya que pedimos un número.
  • R: 0, G: 8, B: 0comienza nuestro código de bucle y es un comando aditivo. Esto agrega un número a una variable entera y, por lo tanto, toma una cadena para el nombre de la variable y el número que se agrega.
  • R: 0, G: 1, B: 1es la cadena preconstruida para VAR_2, que es nuestra variable de iteración.
  • R: 3, G: 0, B: 1 es un número sin procesar, pero esta vez es el número 1.
  • R: 0, G: 8, B: 0 Es otro comando adicional.
  • R: 0, G: 1, B: 0es la cadena para VAR_1, que es nuestra suma total.
  • R: 0, G: 3, B: 0es una función que invierte una cadena. En el contexto de pedir un número, luego convierte la cadena invertida en un número.
  • R: 0, G: 2, B: 1es un comando de recuperación de enteros y recuperará el número almacenado en una variable proporcionada. En el contexto de pedir una cadena (como el comando inverso), convierte el número en una cadena.
  • R: 0, G: 1, B: 1 es el nombre VAR_2 ; Nuestra variable de iteración.
  • R: 1, G: 0, B: 1es el marcador para finalizar el bucle y volver al inicio del bucle si no se cumplen los criterios (por lo tanto, si necesitamos seguir en bucle). De lo contrario, continúe.
  • R: 0, G: 0, B: 1 es un comando println muy simple y toma una cadena.
  • R: 0, G: 2, B: 1 recupera un entero de una variable
  • R: 0, G: 1, B: 0 es el nombre de nuestra variable suma total, VAR_1

    En general, el programa:

  • Asigna el valor 0 a VAR_1yVAR_2
  • Bucles de 0 a un número proporcionado en STDIN
    • Agrega uno a VAR_2
    • Agrega el valor entero de invertir VAR_2aVAR_1
  • Imprime el contenido de VAR_1
Isaac
fuente
3

CJam , 12 bytes

ri){sW%i}%:+

Pruébalo en línea!

-1 gracias a Business Cat .

Explicación:

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 el Outgolfer
fuente
¿Podría agregar una explicación? No entiendo CJam (ni GolfScript). ¡Pero MI venció a dos (aunque antiguos en términos de golf-langs) idiomas de golf!
Zacharý
@ Zacharý hecho ...
Erik the Outgolfer
No necesita el,
Business Cat
@BusinessCat Ohhh usó demasiado para GolfScript aparentemente ...
Erik the Outgolfer
3

APL (Dyalog) , 10 7 bytes

3 bytes de golf gracias a @ Adám al convertir a un tren desde un tren

+/⍎⌽⍕⍳⎕

Pruébalo en línea!

          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
fuente
Para @Uriel & Cows graznan sobre la pregunta del chat: Bueno, hice la parte de Matemáticas, además de eso, me suspendieron del chat, por lo tanto, no respondí allí.
Zacharý
7 bytes:+/⍎⌽⍕⍳⎕
Adám
@ Adám Gracias por la sugerencia. La eliminación de la¨ 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

Según el comentario de Kevin Cruijssen, me gustaría mejorar mi respuesta.

Java 8, 103 bytes

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()
CoderCroc
fuente
1
Integer.valueOfse puede jugar al golf new Integery .reverse().toString()se puede jugar al golf .reverse()+"". Además, debe incluir las importaciones requeridas y los parámetros lambda, como java.util.stream.IntStreamy n->antes. Y también puedes jugar al golf IntStreamy Integera LongStreamy Long. La respuesta final será n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()( 103 bytes : su respuesta actual con importación adicional y parámetro lambda sería de 117 bytes ). ¡Aún así +1, buena respuesta!
Kevin Cruijssen
@KevinCruijssen Gracias por sus valiosos aportes. Actualizaré mi respuesta. Gracias. :)
CoderCroc
3

Japt , 7 5 bytes

-2 bytes gracias a @Shaggy.

õs xw

Pruébalo en línea!

Explicación

õ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.

Solución anterior, 7 bytes

Mantener esto ya que es un uso realmente genial z2.

õs z2 x

Pruébalo en línea!

Explicación

õ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
fuente
1
Sabes, z2en una matriz plana es lo mismo que w... uhm ... disculpa mi insuficiencia en Japt ...
ETHproductions
6 bytes: õ_swÃxgracias a la nueva incorporación de N.s(f).
Shaggy
O incluso solo õs xwpor 5 bytes.
Shaggy
@ Shaggy No puedo creer que nadie haya mencionado esa solución de 5 bytes hasta ahora ... se editará en un momento. En cuanto al de 6 bytes, si se agregó después de que se publicó este desafío, creo que no sería competitivo.
Justin Mariner
@JustinMariner, ¡yo tampoco! : D Aunque, parece una pena deshacerse de ese z2truco; eso fue bastante genio. Tenga en cuenta que no competir ya no es una cosa .
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
fuente
¡Buen trabajo! Puede ahorrar algunos bytes eliminando el encabezado y colocando "using namespace std" (marque aquí tio.run/#cpp-gcc ). También creo que podría reemplazar "auto t" con solo "t" (?)
koita_pisw_sou
Sí, koita_pisw_sou tiene razón sobre la primera parte. Pero necesitas el auto.
Zacharý
@koita_pisw_sou ¿Quiere decir que puedo excluir la directiva de encabezado del conteo de bytes? Lo mismo para el espacio de nombres? autose necesita una palabra clave
HatsuPointerKun
Sí, revise el enlace que envié
koita_pisw_sou
(¡Vaya, no estoy seguro de eliminar el encabezado!) Pero me refería a using namespace std;guardar bytes.
Zacharý
3

Casco , 7 6 3 bytes

ṁ↔ḣ

Pruébalo en línea!

Ungolfed / Explicación

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

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

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

Pruébalo en línea!

Xcali
fuente
26 Bytes: map$r+=reverse,1..<>;say$r.
Denis Ibaev
Lo tengo aún más abajo 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.

Pruébalo en línea!

ATaco
fuente
2

Neim , 4 bytes

Δ𝐫)𝐬

Pruébalo en línea!

Explicación

Δ )              for each element 1 to n (outputs list)
 𝐫               reverse 
   𝐬             sum 
basura espacial
fuente
2
Solución alternativa: 𝐈Ψ𝐫𝐬(cree un rango inclusivo, invierta cada elemento, suma)
Okx
¡@Okx no sabía que el Ψtoken existía! definitivamente lo habría usado en retrospectiva. realmente agradable
basura espacial
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;}

Pruébalo en línea!

Giacomo Garabello
fuente
¿Esperar lo? ¿Cómo f()devuelve su resultado sin ninguna returndeclaración? ¿La e=ainstrucción manipula los registros de tal manera que el resultado se almacena en el mismo registro que el utilizado por los valores devueltos?
scottinet