Додавання цифр і зворотних цифр


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 Настільки високо, наскільки підтримує ваша мова.
Lamaro

Важливий тестовий випадок:, 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)

Я дуже розгублений вибором дизайну, який призводить до того, що +списки роблять вкладене доповнення, тоді як для рядків він перетворюється на 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

@TimmyD ОХ! > _ <Моє нерозуміння виклику полягає в тому, як ... Так, мені доведеться це виправити.
Mwr247

@TimmyD Взяв мене досить довго, щоб повернутися в Інтернет. Це зараз виправлено, і дякую, що це зробили.
Mwr247

Як зазначалося в іншій відповіді, це працює лише в тому випадку, якщо параметр a знаходиться між 1 і 12, це дійсно занадто мало
edc65

@ edc65 За коментарем ОП , це досить велике.
Mwr247

3

Пітон 3, 74

Збережено 6 байт завдяки DSM.

Нічого занадто захоплюючого, приєднайтесь до діапазонів, а потім перетворіть у ints та додайте їх.

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

3

Сітківка , 71

Тому що це очевидно неправильний інструмент для роботи.

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

Спробуйте в Інтернеті.

Працює для входів до 6, але в Інтернеті перекладач закінчується після цього.


1
Ви можете скоротити його до 74, видаливши останній рядок і змінивши (c)+на c.
daavko

@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, так що я зробив O_O
Conor O'Brien

3

JavaScript (ES6), 67 66 байт

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

Так, це простір. Тьфу. Принаймні @Downgoat допоміг мені зберегти байт.


1
Ви можете видалити перший +і зробити + +->, - -щоб зберегти байт
Пуховик

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]+

EDIT (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

@ ӍѲꝆΛҐӍΛПҒЦꝆ Дякую! Виправлено
Луїс Мендо

Чудово! Майте нагороду.
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скорочення для створення функцій.

Редагування додало 26 байт, але повертає функціонуючу функцію, а не щось зовсім не так.

Правка додала ще 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тому що це стандартний спосіб вивести число в луа (немає відмінності між цілим і плаваючим)


Це не сам рядок, який обернено, але цифри. Ваш код не працює на n> = 10.
Moop

@Moop Виправлено ціною 1 байт ^^ '. Дякую за коментар ^^ '
Katenkyo

Ви можете зберегти ще 3, використовуючи ... замість arg [1] приємну роботу над зворотним конкатом для r, не думав про це у своїй відповіді. +1
Moop

@Moop Я побачив ваш пост, приємно його використовував, я навіть не знав, що ти можеш так використовувати ...! Я буду тримати це таким чином на даний момент, тому що я не можу використовувати нічого іншого, крім онлайн-компілятора, і він не може впоратися з цим (я хотів би трохи перевірити його і пограти з ним, перш ніж помістити його в відповідь :))
Катенкьо

1

Perl 5, 37 байт

25 байт, плюс 1 за -pі 11 для-MList::Gen

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

Попереднє рішення, 40 байт: 39, плюс один за -p

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


1

Діалог APL , 17 байт

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

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



0

Сітківка, 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.