Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Given a number > 0, output the sum with all digits (1 .. n) concatenated and reversed and add them up. For example, with n = 6:

The numbers 1 to 6 concatenated:




Adding them up together will result in: 777777. Another example is n = 11:

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


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

Adding them up together will result in 2345555545332. This is also known as A078262.

Shortest code wins!

share|improve this question
Related. – Zgarb Feb 22 at 21:21
Is there a bound to n, or do we have to support arbitrarily large integers? – LegionMammal978 Feb 22 at 22:16
I think the default is "bounded by max(256,yourlanguagesdefaultintegertypelimit)". But it should be specified. – CalculatorFeline Feb 22 at 22:20
@LegionMammal978 As high as your language supports. – Lamaro Feb 22 at 22:43
Important test case: 10, which should give 23333333231. – Adnan Feb 22 at 23:04

32 Answers 32

up vote 9 down vote accepted

05AB1E, 7 bytes


Try it online.



L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)
share|improve this answer
I feel very confused by the design choice that lead to + on lists doing a nested addition, while for strings it converts to ints and then adds. But I guess it worked out here! :P – FryAmTheEggman Feb 22 at 21:35
@FryAmTheEggman I'm going to remove nested addition though. It has never been useful since the moment I've implemented it... – Adnan Feb 22 at 21:41
Sheesh, I leave PPCG for two hours and you rename yourself Aqua Tart while I'm gone... Oh, the life of a PPCG user. – ETHproductions Feb 22 at 23:55

CJam, 15 14 bytes

Thanks to Martin for shaving a byte!


Try it online!

share|improve this answer
1 byte less if you flip the string instead of the numeric array: ri,:)s_W%i\i+ – Luis Mendo Feb 23 at 1:23
@LuisMendo thanks! – GamrCorps Feb 23 at 3:28
Sorry, I think my version doesn't work for 10 – Luis Mendo Feb 23 at 10:55
This code is secretly happy. :) – Cyoce Feb 24 at 0:08

Jelly, 9 bytes



share|improve this answer
Is it me or do I see that code secretly stealing some U$D? – gcampbell May 21 at 8:20
@gcampbell just u – Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ May 21 at 12:20

Pyth, 12 10 bytes


Thanks to @FryAmTheEggman for 2 bytes!

Q is the input, S turns it into [1, 2, ..., input()], _B bifurcates it over _ (reverse) to create [rng, rev(rng)], jLk maps it over join by k (which is the "empty string" variable), sM maps int over this resulting array, and s finally calculates the sum.

share|improve this answer

JavaScript (ES6), 70 67 64 bytes

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

Fixed to meet requirement, as old code was made under misunderstanding of the input.

share|improve this answer
@TimmyD Added an explanation. – Mwr247 Feb 22 at 21:52
@TimmyD OH! >_< My misunderstanding of the challenge is how... Yeah, I'll have to fix this. – Mwr247 Feb 22 at 21:55
@TimmyD Took me long enough to get back online. It's fixed now, and thanks for catching that. – Mwr247 Feb 23 at 16:53
As noted for another answer, this only works if the parameter a is between 1 and 12, that's really too little – edc65 Feb 23 at 20:26
@edc65 Per OP's comment, that's big enough. – Mwr247 Feb 23 at 20:29

Python 3, 74

Saved 6 bytes thanks to DSM.

Nothing too exciting, join the ranges and then convert to ints and add them.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))
share|improve this answer

Retina, 71

Because its blatantly the wrong tool for the job.

$1 $& $3
 ?(\w)+ ?

Try it online.

Works for inputs up to 6, but the online interpreter times out after that.

share|improve this answer
You can shorten it to 74 by removing the last line and changing (c)+ to c. – daavko Feb 22 at 22:52
@daavko yes, of course, thanks! – Digital Trauma Feb 22 at 22:59
Also, $&$*c -> $*c and \d+:? -> \d+ and it's 70. And for some reason it keeps working... – daavko Feb 22 at 23:03

Jolf, 9 bytes

Try it here! Replace with \x10.

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

I may be able to golf it by moving around the type casting.

share|improve this answer
You beat pyth and doorknob! – Cyoce Feb 26 at 0:05
@Cyoce so I did O_O – Cᴏɴᴏʀ O'Bʀɪᴇɴ Feb 26 at 0:05

JavaScript (ES6), 67 66 bytes

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

Yes, that's a space. Ugh. At least @Downgoat helped me save a byte.

share|improve this answer
You can remove the first + and make the + + -> - - to save a byte – Downgoat Feb 23 at 1:07
n=>(a=[...Array(n)].map(_=>n--)).join- -a.reverse().join – edc65 Feb 23 at 9:07
Note: using simple js arithmetic this is limited to values 1 .. 12 – edc65 Feb 23 at 9:08

Seriously, 12 bytes


Try it online!


,R;           push two copies of range(1, input()+1)
   R          reverse one copy
    εj≈@εj≈   concatenate both and cast both to ints
           +  add
share|improve this answer

PowerShell, 35 bytes


Converts the input to ranges with .., then -joins them together, and adds 'em up.

Will work for input numbers up to 138, while 139 will give Infinity, and 140 and above will barf out an awesomely verbose casting error:

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
share|improve this answer

Pyth - 8 bytes


Try it online here.

share|improve this answer
I think this doesn't work for 10 or 11 – Luis Mendo Feb 23 at 9:59

JavaScript (ES6), 99

This adds digit by digit, so it can handle numbers well above the 53 bits of precision of javascript




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

function test() {
  var n=+I.value

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

share|improve this answer
Doesn't seem to work for 9. Also, why not initialise c with the other variables? – Neil Feb 22 at 22:54
You have my upvote. – Neil Feb 23 at 9:24

Brachylog, 24 bytes

share|improve this answer

MATL, 13 bytes


EDIT (May 20, 2016) The code in the link uses Xz instead of Xv, owing to recent changes in the language.

Try it online!

:                % 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
share|improve this answer
Doesn't work for 11 or 10. (Hint: reverse range before converting to string.) – Mama Fun Roll Feb 23 at 3:32
@ӍѲꝆΛҐӍΛПҒЦꝆ Thanks! Corrected – Luis Mendo Feb 23 at 9:57
Great! Have an upvote. – Mama Fun Roll Feb 24 at 2:00

Bash + coreutils, 39

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


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


share|improve this answer

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


for 6, 11, 12 -> $n {
  say {([~] @_=1..$^n)+[R~] @_}( $n )
share|improve this answer
I think you can do with $n instead of $^n – andlrc Feb 22 at 22:56
@dev-null Not if I want it to be an input to the block. the -> $n { is a different one to $^n. – Brad Gilbert b2gills Feb 22 at 22:58

R, 34 60 64 bytes


Assumes pryr package is installed. this gives f as a shorthand for creating functions.

Edit added 26 bytes but returns a function that works, not something entirely wrong.

Edit added another 4 bytes to handle cases above n=10 where strtoi (previously used) was returning NA

share|improve this answer

Lua, 57

a=''b=''for i=1, a=a..i b=b.. ...-i+1 end return a+b
share|improve this answer

Lua, 53 Bytes

This program takes n as a command-line argument.

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

I assumed that outputing a number with a decimal part of 0 was okay (in the form 777777.0 because this is the default way to output a number in lua (there's no distinction between integer and float)

share|improve this answer
Its not the string itself that is reversed, but the digits. Your code fails on n >= 10. – Moop Feb 23 at 7:47
@Moop Corrected at the price of 1 byte ^^'. Thanks for the comment ^^' – Katenkyo Feb 23 at 8:00
You can save 3 more using ... instead of arg[1] nice work on the reverse concat for r, didn't think of that in my answer. +1 – Moop Feb 23 at 8:03
@Moop I saw your post, nice use of it, I didn't even know you could use ... like that! I'll keep it this way for the moment, because I can't use anything else than the online compiler and it can't handle that(I'd like to test it and play with it a little bit before putting it in a answer :)) – Katenkyo Feb 23 at 8:07

Perl 5, 37 bytes

25 bytes, plus 1 for -p and 11 for -MList::Gen


Previous solution, 40 bytes: 39, plus one for -p

share|improve this answer

Perl, 36 bytes

Includes +1 for -p

Run with on STDIN

perl -p <<< 6

$_=eval join"",map{abs||"+"}-$_..$_
share|improve this answer

Dyalog APL, 17 bytes


prompt for input
' enumerate until input
x← store list in x
reverse x
x() prepend reversed list with original list
⍕¨¨ convert each number of each list into character string
∊¨ make each list of character strings into single character strings
⍎¨ convert each character string into a number
+/ sum the two numbers.

share|improve this answer

Mathematica, 64 bytes

share|improve this answer

Retina, 80 bytes (ISO 8859-1 encoding)

$2 $1
$1 $2
(')+( |$)?

IO is in unary with ' as the counting character. In theory supports any integer you throw at it, in interpreter refuses to process anything larger than 6 (unary '''''').

Try it online!
Try it online! (decimal IO - 91 bytes)

share|improve this answer

𝔼𝕊𝕄𝕚𝕟, 12 chars / 15 bytes


Try it here (Firefox only).



Takes a range [1,input], joins it; takes that same range, reverses it, then joins it; the sum of both ranges is the result.

share|improve this answer

Ruby, 40 characters

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

Sample run:

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
share|improve this answer

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()));}

Could possibly be golfed further. Not really sure.

share|improve this answer

Groovy, 42 39 characters


Sample run:

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

groovy:000> ({[,it..1]*.join()*.toLong().sum()})(6)
===> 777777
share|improve this answer

Groovy, 112 characters

def r(n){if(n==1){return n;};return n+''+r(n-1)};n=6;s=r(args[0].toLong());print s.toLong()+s.reverse().toLong()

run with:

groovy filename.groovy *input*
share|improve this answer

protected by Community Mar 16 at 20:27

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.