Sumando los dígitos y los dígitos invertidos

26

Dado un número> 0, genera la suma con todos los dígitos (1 .. n) concatenados e invertidos y súmalos. Por ejemplo, con n = 6:

Los números del 1 al 6 concatenados:

123456

Invertido:

654321

Sumarlos juntos dará como resultado: 777777. Otro ejemplo es n = 11:

1 2 3 4 5 6 7 8 9 10 11 > 1234567891011

y

11 10 9 8 7 6 5 4 3 2 1 > 1110987654321

Sumarlos juntos dará como resultado 2345555545332. Esto también se conoce como A078262 .

¡El código más corto gana!

Lamaro
fuente
¿Existe un límite no tenemos que admitir enteros arbitrariamente grandes?
LegionMammal978
Creo que el valor predeterminado es "delimitado por max(256,yourlanguagesdefaultintegertypelimit)". Pero debe especificarse.
CalculatorFeline
@ LegionMammal978 Tan alto como sea compatible con tu idioma.
Lamaro
Caso de prueba importante: 10que debería dar 23333333231.
Adnan

Respuestas:

9

05AB1E, 7 bytes

LDRJsJ+

Pruébalo en línea.

Explicación

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)
un espagueti
fuente
Me siento muy confundido por la elección de diseño que conduce a las +listas que hacen una adición anidada, mientras que para las cadenas se convierte en ints y luego agrega. ¡Pero supongo que funcionó aquí! : P
FryAmTheEggman
@FryAmTheEggman Sin embargo, voy a eliminar la adición anidada. Nunca ha sido útil desde el momento en que lo implementé ...
Adnan
3
Sheesh, dejo PPCG por dos horas y cambias tu nombre Aqua Tart mientras estoy fuera ... Oh, la vida de un usuario de PPCG.
ETHproductions
6

Jalea, 9 bytes

R,U$DF€ḌS

codificación en vivo 

Lynn
fuente
2
¿Soy yo o veo ese código secretamente robando U $ D?
gcampbell
5

CJam, 15 14 bytes

¡Gracias a Martin por afeitarse un byte!

ri,:)_W%si\si+

Pruébalo en línea!

GamrCorps
fuente
1 byte menos si voltea la cadena en lugar de la matriz numérica:ri,:)s_W%i\i+
Luis Mendo
Lo siento, creo que mi versión no funciona10
Luis Mendo
1
Este código es secretamente feliz. :)
Cyoce
4

Pyth, 12 10 bytes

ssMjLk_BSQ

¡Gracias a @FryAmTheEggman por 2 bytes!

Qes la entrada, Slo convierte en [1, 2, ..., input()], _Bse bifurca de TI más de _(inverso) para crear [rng, rev(rng)], jLkmapas por encima joinpor k(que es la variable "cadena vacía"), sMmapas intsobre esta matriz resultante, y sfinalmente se calcula la suma.

Pomo de la puerta
fuente
4

JavaScript (ES6), 70 67 64 bytes

a=>(z=[...Array(a)].map((b,c)=>c+1)).join``- -z.reverse().join``

Se corrigió para cumplir con el requisito, ya que el código antiguo se realizó bajo una mala comprensión de la entrada.

Mwr247
fuente
@TimmyD Agregó una explicación.
Mwr247
@TimmyD OH! > _ <Mi malentendido del desafío es cómo ... Sí, tendré que arreglar esto.
Mwr247
@TimmyD Me tomó el tiempo suficiente para volver a estar en línea. Ahora está arreglado, y gracias por atrapar eso.
Mwr247
Como se señaló para otra respuesta, esto solo funciona si el parámetro a está entre 1 y 12, eso es realmente muy poco
edc65
@ edc65 Según el comentario de OP , eso es lo suficientemente grande.
Mwr247
3

Pitón 3, 74

Guardado 6 bytes gracias a DSM.

Nada demasiado emocionante, únase a los rangos y luego conviértalos en ints y agréguelos.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))
Morgan Thrapp
fuente
3

Retina , 71

Porque es descaradamente la herramienta incorrecta para el trabajo.

.+
$*a:$&$*
+`^(a+)a\b(.*)\b1(1+)$
$1 $& $3
 ?(\w)+ ?
$#1
\d+:?
$&$*c
c

Pruébalo en línea.

Funciona para entradas de hasta 6, pero el intérprete en línea agota el tiempo de espera después de eso.

Trauma digital
fuente
1
Puede acortarlo a 74 eliminando la última línea y cambiando (c)+a c.
daavko
@daavko sí, por supuesto, ¡gracias!
Trauma digital
Además, $&$*c-> $*cy \d+:?-> \d+y es 70. Y por alguna razón sigue funcionando ...
daavko
3

Jolf, 9 bytes

Pruébalo aquí! Reemplazar con \x10.

+P►γzjP_γ
    zj    range 1...j
   γ      γ = ^
  ►        ^ .join("")
 P         as a number
+     P_γ  and γ reversed

Es posible que pueda jugar golf moviéndome alrededor del tipo de fundición.

Conor O'Brien
fuente
¡Golpeaste a Pyth y al picaporte!
Cyoce
@Cyoce, así que hice O_O
Conor O'Brien
3

JavaScript (ES6), 67 66 bytes

n=>(a=[...Array(n+1).keys()].slice(1)).join``- -a.reverse().join``

Sí, eso es un espacio. Ugh Al menos @Downgoat me ayudó a guardar un byte.

Neil
fuente
1
Puede eliminar el primero +y hacer el + +-> - -para guardar un byte
Downgoat
n => (a = [... Array (n)]. map (_ => n -)). join- -a.reverse().join
edc65
Nota: el uso de aritmética simple js se limita a los valores 1 .. 12
edc65
2

En serio, 12 bytes

,R;Rεj≈@εj≈+

Pruébalo en línea!

Explicación:

,R;Rεj≈@εj≈+
,R;           push two copies of range(1, input()+1)
   R          reverse one copy
    εj≈@εj≈   concatenate both and cast both to ints
           +  add
Mego
fuente
2

PowerShell, 35 bytes

param($a)+-join(1..$a)+-join($a..1)

Convierte la entrada en rangos con .., luego -joinlos junta y los suma.

Funcionará para los números de entrada hasta 138, mientras 139que dará Infinity, 140y por encima de eso, dará un error de lanzamiento asombrosamente detallado:

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
AdmBorkBork
fuente
2

JavaScript (ES6), 99

Esto agrega dígito por dígito, por lo que puede manejar números muy por encima de los 53 bits de precisión de JavaScript

n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

Prueba

f=n=>eval("for(a=b=c=r='';n;a+=n--)b=n+b;for(i=a.length;i--;r=c%10+r)c=(c>9)-(-a[i]-b[i]);c>9?1+r:r")

// Less golfed
U=n=>{
  for(a=b=c=r=''; n; --n)
      b=n+b, a+=n;
  for(i=a.length; i--; r = c%10+r) 
      c=(c>9)-(-a[i]-b[i]);
  return c>9? 1+r : r;
}

function test() {
  var n=+I.value
  R.textContent=f(n)
}  

test()
N: <input id=I value=11 oninput="test()"> -> <span id=R></span>

edc65
fuente
No parece funcionar para 9. Además, ¿por qué no inicializar ccon las otras variables?
Neil
Tienes mi voto a favor.
Neil
2

MATL , 13 bytes

:tP2:"wVXvU]+

EDITAR (20 de mayo de 2016) El código en el enlace se usa en Xzlugar de Xv, debido a cambios recientes en el idioma.

Pruébalo en línea!

:                % range [1,2,...,n], where n is input
 tP              % duplicate and flip
   2:"     ]     % do this twice
      w          % swap
       V         % convert array of numbers to string with numbers and spaces
        Xv       % remove spaces
          U      % convert to number
            +    % add the two numbers
Luis Mendo
fuente
No funciona durante 11 o 10. (Sugerencia: rango inverso antes de convertir a cadena.)
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ ¡Gracias! Corregido
Luis Mendo
¡Excelente! Tener un voto a favor.
Mama Fun Roll
2

05AB1E , 5 bytes

LJDR+

Explicación:

L     # Pushes an array containing 1 .. [implicit] input
 J    # Join the array to a string (eg. [1, 2, 3] -> 123)
  D   # Duplicate the array
   R  # Reverse the duplicate
    + # Add them together

Pruébalo en línea!

Okx
fuente
1

Bash + coreutils, 39

eval echo {1..$1} + {$1..1}|tr -d \ |bc

O:

bc<<<`eval printf %s {1..$1} + {$1..1}`

Ideona

Trauma digital
fuente
1

Perl 6 , 25 bytes

{([~] @_=1..$^n)+[R~] @_}
{
  (
    [~]           # reduce with the string concatenation infix op:
    @_ = 1 .. $^n # the range 1 to input ( also stored in @_ )
  )
  +               # add that to
  [R~] @_         # @_ reduced in reverse
}

Uso:

for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
}
777777
2345555545332
244567776755433
Brad Gilbert b2gills
fuente
Creo que puedes hacerlo en $nlugar de$^n
andlrc
@ dev-null No si quiero que sea una entrada al bloque. El -> $n {es diferente $^n.
Brad Gilbert b2gills
1

R, 34 60 64 bytes

f=pryr::f;g=f(as.numeric(paste(x,collapse='')));f(g(1:n)+g(n:1))

Asume que el pryrpaquete está instalado. esto da funa abreviatura para crear funciones.

Editar agregó 26 bytes pero devuelve una función que funciona, no algo completamente incorrecto.

Editar agregó otros 4 bytes para manejar casos por encima de n = 10 donde estaba regresando strtoi (usado anteriormente) NA

mnel
fuente
1

Lua, 57

a=''b=''for i=1,...do a=a..i b=b.. ...-i+1 end return a+b
Trapeador
fuente
1

Lua, 53 bytes

Este programa toma ncomo argumento de línea de comandos.

s=""r=s for i=1,arg[1]do r,s=i..r,s..i end print(s+r)

Supuse que generar un número con una parte decimal de 0 estaba bien (en el formulario 777777.0porque esta es la forma predeterminada de generar un número en lua (no hay distinción entre entero y flotante)

Katenkyo
fuente
No es la cadena en sí la que se invierte, sino los dígitos. Su código falla en n> = 10.
Moop
@Moop corregido al precio de 1 byte ^^ '. Gracias por el comentario ^^ '
Katenkyo
Puedes ahorrar 3 más usando ... en lugar de arg [1] buen trabajo en el concat inverso para r, no pensé en eso en mi respuesta. +1
Fregona
@Moop Vi tu publicación, buen uso de ella, ¡ni siquiera sabía que podías usar ...así! Lo mantendré así por el momento, porque no puedo usar nada más que el compilador en línea y no puede manejar eso (me gustaría probarlo y jugar un poco antes de ponerlo en un respuesta :))
Katenkyo
1

Perl 5, 37 bytes

25 bytes, más 1 para -py 11 para-MList::Gen

$_=<[.]1..$_>+<[R.]1..$_>

Solución anterior, 40 bytes: 39, más uno para -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"
msh210
fuente
1

Perl, 36 bytes

Incluye +1 para -p

Ejecutar con STDIN

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_
Ton Hospel
fuente
1

Dyalog APL , 17 bytes

+/⍎¨∊¨⍕¨¨x(⌽x←⍳⎕)

solicitar entrada
'enumerar hasta que la entrada
x←almacene la lista en x
inversa x
x(... )anteponer la lista inversa con la lista original
⍕¨¨convertir cada número de cada lista en una cadena de caracteres
∊¨hacer que cada lista de cadenas de caracteres en cadenas de caracteres individuales
⍎¨convierta cada cadena de caracteres en una
+/suma de los dos números .

Adán
fuente
0

Mathematica, 64 bytes

Plus@@FromDigits/@#&[""<>ToString/@#&/@{#,Reverse@#}&[Range@#]]&
CalculadoraFeline
fuente
0

Retina, 80 bytes (codificación ISO 8859-1)

'+
$0¶$0
+`^(('+)')
$2 $1
+`('('+))$
$1 $2
(')+( |$)?
$#1
(\d+)¶(\d+)
$1$*'$2$*'

IO está en unario con 'el personaje contable. En teoría admite cualquier número entero que le arrojes, en la práctica ... el intérprete en línea se niega a procesar cualquier cosa mayor que 6 (unario '''''').

Pruébalo en línea!
Pruébalo en línea! (IO decimal - 91 bytes)

daavko
fuente
0

𝔼𝕊𝕄𝕚𝕟, 12 caracteres / 15 bytes

⨭⟮⩤⁽1ï⟯⨝,Ⅰᴚ⨝

Try it here (Firefox only).

Meh

Explicación

Toma un rango [1,input], se une a él; toma ese mismo rango, lo invierte, luego se une a él; La suma de ambos rangos es el resultado.

Mama Fun Roll
fuente
0

Ruby, 40 caracteres.

->n{eval (l=[*1..n])*''+?++l.reverse*''}

Ejecución de muestra:

irb(main):001:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[11]
=> 2345555545332

irb(main):002:0> ->n{eval (l=[*1..n])*''+?++l.reverse*''}[6]
=> 777777
hombre trabajando
fuente
0

C #, 126 bytes

using System.Linq;a=>{var b=Enumerable.Range(1,a);return long.Parse(string.Concat(b))+long.Parse(string.Concat(b.Reverse()));}

Posiblemente podría jugar más golf. No muy seguro.

LegionMammal978
fuente
0

Groovy, 42 39 caracteres

{[1..it,it..1]*.join()*.toLong().sum()}

Ejecución de muestra:

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(11)
===> 2345555545332

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
hombre trabajando
fuente