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


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 .

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



Есть ли ограничение 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



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``

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


@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

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

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


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>


Кажется, не работает для 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



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

Я думаю , что вы можете сделать с $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



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)


Это не сама строка, которая перевернута, а цифры. Ваш код терпит неудачу при 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"+"@_"

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

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

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

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

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


0

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

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

Try it here (Firefox only).

Мех.

объяснение

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


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

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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.