Сложение цифр и цифр в обратном порядке

26

Если задано число> 0, выведите сумму со всеми цифрами (1 .. n), соединенными и перевернутыми, и сложите их. Например, при n = 6:

Числа от 1 до 6 объединены:

123456

Перевернутый:

654321

Их сложение приведет к: 777777. Другой пример - 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

Добавление их вместе приведет к 2345555545332. Это также известно как A078262 .

Самый короткий код выигрывает!

Lamaro
источник
Есть ли ограничение nили мы должны поддерживать сколь угодно большие целые числа?
LegionMammal978
Я думаю, что по умолчанию "ограничен max(256,yourlanguagesdefaultintegertypelimit)". Но это должно быть указано.
CalculatorFeline
@ LegionMammal978 Столько, сколько поддерживает ваш язык.
Ламаро
Важный контрольный пример:, 10который должен дать 23333333231.
Аднан

Ответы:

9

05AB1E, 7 байтов

LDRJsJ+

Попробуйте онлайн.

объяснение

LDRJsJ+

L        range from 1 .. input
 D       duplicate
  R      reverse
   JsJ   convert both arrays to strings
      +  add (coerces both strings to ints)
спагетто
источник
Меня очень смущает выбор дизайна, который приводит к тому, что в +списках выполняется вложенное сложение, а для строк оно преобразуется в целые, а затем добавляется. Но я думаю, это сработало здесь! : P
FryAmTheEggman
@FryAmTheEggman Я собираюсь удалить вложенное дополнение, хотя. Это никогда не было полезным с того момента, как я реализовал это ...
Аднан
3
Боже, я оставляю PPCG на два часа, а ты переименовываешь себя в Aqua Tart, пока меня нет ... О, жизнь пользователя PPCG.
ETHproductions
6

Желе, 9 байт

R,U$DF€ḌS

livecoding 

Линн
источник
2
Это я или я вижу этот код, тайно крадущий U $ D?
Gcampbell
5

CJam, 15 14 байтов

Спасибо Мартину за бритье!

ri,:)_W%si\si+

Попробуйте онлайн!

GamrCorps
источник
На 1 байт меньше, если вы переворачиваете строку вместо числового массива:ri,:)s_W%i\i+
Луис Мендо
Извините, я думаю, что моя версия не работает10
Луис Мендо
1
Этот код тайно счастлив. :)
Cyoce
4

Pyth, 12 10 байт

ssMjLk_BSQ

Спасибо @FryAmTheEggman за 2 байта!

Qявляется входом, Sпревращает его в [1, 2, ..., input()], _Bраздваивается его на _(обратное) для создания [rng, rev(rng)], jLkотображает его над joinпутем k(что переменная «пустая строка»), sMотображает intнад этой результирующий массив, и , sнаконец , вычисляет сумму.

Дверная ручка
источник
4

JavaScript (ES6), 70 67 64 байта

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

Исправлено в соответствии с требованием, так как старый код был сделан из-за неправильного понимания ввода.

Mwr247
источник
@TimmyD Добавил объяснение.
Mwr247 22.02.16
@TimmyD О! > _ <Мое недопонимание проблемы заключается в том, как ... Да, мне придется это исправить.
Mwr247 22.02.16
@TimmyD Мне потребовалось достаточно много времени, чтобы вернуться в онлайн. Это сейчас исправлено, и спасибо, что поймали это.
Mwr247
Как отмечено для другого ответа, это работает, только если параметр a находится между 1 и 12, это действительно слишком мало
edc65
@ edc65 Согласно комментарию ОП , этого достаточно.
Mwr247
3

Python 3, 74

Сохранено 6 байт благодаря DSM.

Ничего особенного, присоединяйтесь к диапазонам, а затем конвертируйте в целые и добавляйте их.

lambda x:sum(int(''.join(list(map(str,range(1,x+1)))[::i]))for i in(1,-1))
Морган Трепп
источник
3

Сетчатка , 71

  • 7 байтов сохранено благодаря @daavko.
  • 3 байта сохранены благодаря возможностям версии 0.7.3

Потому что это явно не тот инструмент для работы.

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

Попробуйте онлайн.

Работает на входах до 6, но онлайн переводчик истекает после этого.

Цифровая травма
источник
1
Вы можете сократить его до 74, удалив последнюю строку и изменив (c)+на c.
Даавко
@daavko да, конечно, спасибо!
Цифровая травма
Кроме того, $&$*c-> $*cи \d+:?-> \d+и это 70. И по какой-то причине он продолжает работать ...
daavko
3

Джольф, 9 байт

Попробуй это здесь! Заменить на \x10.

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

Я могу играть в гольф, передвигаясь по типу кастинга.

Конор О'Брайен
источник
Вы победили пита и дверную ручку!
Cyoce
@Cyoce, так что я сделал O_O
Конор О'Брайен
3

JavaScript (ES6), 67 66 байт

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

Да, это место. Тьфу. По крайней мере, @Downgoat помог мне сохранить байт.

Нил
источник
1
Вы можете удалить первый +и сделать + +->, - -чтобы сохранить байт
Downgoat
n => (a = [... Array (n)]. map (_ => n -)). join- -a.reverse().join
edc65
Примечание: используя простую арифметику js, это ограничивается значениями 1 .. 12
edc65
2

Серьезно, 12 байт

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

Попробуйте онлайн!

Объяснение:

,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
источник
2

PowerShell, 35 байт

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

Преобразует входные данные в диапазоны .., затем -joinобъединяет их и добавляет их.

Будет работать для входных чисел вплоть до 138, пока 139выдаст Infinity, а 140и выше сработает удивительная многословная ошибка приведения:

Cannot convert value "12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413
5136137138139140" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
AdmBorkBork
источник
2

JavaScript (ES6), 99

Это добавляет цифру за цифрой, так что он может обрабатывать числа значительно выше 53 бит точности 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")

Тест

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
источник
Кажется, не работает для 9. Кроме того, почему бы не инициализировать cс другими переменными?
Нил
У тебя есть мой голос.
Нил
2

MATL , 13 байт

:tP2:"wVXvU]+

РЕДАКТИРОВАТЬ (20 мая 2016 г.) Код в ссылке используется Xzвместо Xv, в связи с недавними изменениями в языке.

Попробуйте онлайн!

:                % 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
Луис Мендо
источник
Не работает в течение 11 или 10. (Подсказка: обратный диапазон перед преобразованием в строку.)
Mama Fun Roll
@ ӍѲꝆΛҐӍΛПҒЦꝆ Спасибо! Исправлено
Луис Мендо
Большой! Имейте upvote.
Mama Fun Roll
2

05AB1E , 5 байтов

LJDR+

Объяснение:

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

Попробуйте онлайн!

Okx
источник
1

Bash + coreutils, 39

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

Или:

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

Ideone.

Цифровая травма
источник
1

Perl 6 , 25 байт

{([~] @_=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 )
}
777777
2345555545332
244567776755433
Брэд Гилберт b2gills
источник
Я думаю , что вы можете сделать с $nвместо$^n
andlrc
@ dev-null Нет, если я хочу, чтобы он был входом в блок. -> $n {является другой один , чтобы $^n.
Брэд Гилберт b2gills
1

R, 34 60 64 байта

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

Предполагается, что pryrпакет установлен. это дает fкак сокращение для создания функций.

Edit добавил 26 байтов, но возвращает функцию, которая работает, а не что-то совершенно не так.

Edit добавил еще 4 байта для обработки случаев выше n = 10, когда strtoi (ранее использовавшийся) возвращался NA

mnel
источник
1

Луа, 57

a=''b=''for i=1,...do a=a..i b=b.. ...-i+1 end return a+b
Moop
источник
1

Луа, 53 байта

Эта программа принимает nв качестве аргумента командной строки.

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

Я предположил, что вывод числа с десятичной частью 0 был в порядке (в форме, 777777.0потому что это способ по умолчанию для вывода числа в lua (нет разницы между целым и float)

Katenkyo
источник
Это не сама строка, которая перевернута, а цифры. Ваш код терпит неудачу при n> = 10.
Moop
@Moop Исправлено по цене 1 байта ^^ '. Спасибо за комментарий ^^ '
Katenkyo
Вы можете сохранить еще 3, используя ... вместо arg [1] хорошую работу по обратному конкатату для r, об этом я не подумал в моем ответе. +1
Moop
@ Моп, я видел твой пост, хорошо использовал его, я даже не знал, что ты мог бы так использовать ...! Сейчас я буду держать это так, потому что я не могу использовать ничего, кроме онлайн-компилятора, и он не может с этим справиться (я хотел бы проверить это и поиграть с ним немного, прежде чем поместить его в ответ :))
Катенкё
1

Perl 5, 37 байт

25 байтов, плюс 1 для -pи 11 для-MList::Gen

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

Предыдущее решение, 40 байт: 39, плюс один для -p

@a=reverse@_=1..$_;$"=$\;$_="@a"+"@_"
msh210
источник
1

Perl, 36 байт

Включает +1 для -p

Запустить с на STDIN

perl -p reverse.pl <<< 6

reverse.pl

$_=eval join"",map{abs||"+"}-$_..$_
Тон Хоспел
источник
1

Дьялог АПЛ , 17 байт

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

запрос на ввод
'перечисление до ввода
x←списка хранения в x
обратный x
x()добавление обратного списка к исходному списку;
⍕¨¨преобразование каждого номера каждого списка в символьную строку; преобразование
∊¨каждого списка символьных строк в одиночные символьные строки;
⍎¨преобразование каждой символьной строки в число,
+/состоящее из двух чисел. ,

Адам
источник
0

Mathematica, 64 байта

Plus@@FromDigits/@#&[""<>ToString/@#&/@{#,Reverse@#}&[Range@#]]&
CalculatorFeline
источник
0

Retina, 80 байт (кодировка ISO 8859-1)

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

IO находится в одинарном порядке со 'счетным символом. Теоретически поддерживает любое целое число, которое вы кидаете, на практике ... онлайн-переводчик отказывается обрабатывать что-либо больше 6 (унарный '''''').

Попробуйте онлайн!
Попробуйте онлайн! (десятичное число IO - 91 байт)

daavko
источник
0

𝔼𝕊𝕄𝕚𝕟, 12 символов / 15 байтов

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

Try it here (Firefox only).

Мех.

объяснение

Берет диапазон [1,input], присоединяется к нему; берет тот же диапазон, переворачивает его, затем присоединяется к нему; сумма обоих диапазонов является результатом.

Mama Fun Roll
источник
0

Рубин, 40 знаков

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

Образец прогона:

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
manatwork
источник
0

C #, 126 байт

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

Может быть, дальше в гольф. Не совсем уверен.

LegionMammal978
источник
0

Groovy, 42 39 символов

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

Образец прогона:

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

groovy:000> ({[1..it,it..1]*.join()*.toLong().sum()})(6)
===> 777777
manatwork
источник