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!



¿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)

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 


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


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.


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.


@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))

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.


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.


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


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

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


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>


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

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!


1

Bash + coreutils, 39

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

O:

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

Ideona


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

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


1

Lua, 57

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

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)


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"+"@_"

1

Perl, 36 bytes

Incluye +1 para -p

Ejecutar con STDIN

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_

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 .



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)


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.


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

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.