Дальність, Реверс, Сума!


21

Подавши ціле додатне ціле число n, виведіть зворотну суму діапазону n.

Зворотна сума діапазону створюється шляхом створення включного діапазону до n, починаючи з 1 і включаючи n, перевертаючи кожне з чисел всередині і підсумовуючи його.

Приклад:

Ось, що трапиться для введення 10:

Діапазон: [1,2,3,4,5,6,7,8,9,10]

Зворотний: [1,2,3,4,5,6,7,8,9,01](1-знакові числа перевернуті самі, 10 обернених - це 01 або 1)

Сума: 46

Числа, що мають 3+ цифр, змінюються так само, як і цифри з двома цифрами. Наприклад, 1234 рік стане 4321.

Тестові приклади:

Input -> Output

10 -> 46
5 -> 15
21 -> 519
58 -> 2350
75 -> 3147
999 -> 454545

Повні текстові регістри до вводу 999 можна знайти тут , дуже дякую @ fireflame241.


Більше результатів тестів (не пронумеровано, вибачте, але ви можете проаналізувати і отримати їх номер рядка, якщо хочете): Спробуйте в Інтернеті!
Стівен




4
-1 бо це нецікаво. Здається, що більшість, якщо не всі, подані матеріали використовують один і той же підхід. Цей виклик здається купою проблем, які вже були задані, просто з'єднані без явних ярликів.
Esolanging Fruit

Відповіді:


16

05AB1E , 3 байти

Код

LíO

Використовує кодування 05AB1E . Спробуйте в Інтернеті!

Пояснення

L       # Range
 í      # Reverse
  O     # Sum

20
дати пояснення Тхо
ETHproductions

@ETHproductions добре Reverseповинні бути Reverse eachнасправді ...
Ерік Outgolfer

@EriktheOutgolfer Це не векторно?
лише ASCII

@ ASCII-тільки 05AB1E векторизація дійсно на 1 рівень глибока, а не ∞. Також просто "зворотний" є R, а í"зворотний кожен".
Erik the Outgolfer


8

JavaScript (ES6), 42 байти

f=n=>n&&+[...n+""].reverse().join``+f(n-1)

Моє улюблене подвійно-рекурсивне рішення, на жаль, на 3 байти довше:

f=n=>n&&+(g=x=>x?x%10+g(x/10|0):"")(n)+f(n-1)

8

Perl 6 , 20 байт

{(1..$_)».flip.sum}

Перевірте це

Розширено:

{
   ( 1 .. $_ )\  # Range
   ».flip        # flip each value in the Range (possibly in parallel)
   .sum          # sum up the list
}

Чи потрібно "можливо паралельно"? Здається, ви могли позбутися байти або двох, опустивши його.
Позов по

@QPaysTaxes порядку № ».flipвикликає .flipметод для кожного значення в діапазоні. Наступний найкоротший спосіб зробити це .map(*.flip)- на 5 байт більше.
Бред Гілберт b2gills

О, значить, ключова частина - "кожен", а не "(можливо, паралельно)". То, можливо, варто їх розділити.
Фонд позову Моніки

@QPaysTaxes Я не впевнений, що я знаю, що ти маєш на увазі ».flip, що це гіпертопічний метод. Хоча я можу розділити »та .flipвикористовувати простір, \ як я раніше; це ускладнить розуміння, як це виглядатиме як кінець qqww/ /конструкції ( « a b "c d" »).
Бред Гілберт b2gills

7

Сітківка , 41 36 35 байт

.+
$*
1
1$`¶
1+
$.&
%O^$`.

.+
$*
1

Спробуйте в Інтернеті! Посилання включає тестові випадки. Редагувати: Збережено 5 байт завдяки @FryAmTheEggman. Збережено 1 байт завдяки @ PunPun1000. Пояснення:

.+
$*

Перетворити в одинарне.

1
1$`¶

Створіть діапазон від 1до n.

1+
$.&

Перетворити назад у десятковий.

%O^$`.

Переверніть кожне число.

.+
$*

Перетворити назад в одинарний.

1

Підсумовуйте та конвертуйте назад у десяткові.


@FryAmTheEggman Ба, я про це забуваю.
Ніл

Вам не потрібно в .+¶ матчі буде відповідати по лінії
PunPun1000

@ PunPun1000 Мені це потрібно було до виправлення FryAmTheEggman!
Ніл

Я зауважую, що O^$s`.перевернути весь рядок також працює.
Ніл







5

Röda , 56 41 36 байт

15 байт збережено завдяки @fergusq

{seq 1,_|parseInteger`$_`[::-1]|sum}

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

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

Пояснення

{seq 1,_|parseInteger`$_`[::-1]|sum} Anonymous function
 seq 1,_                             Create a sequence 1 2 3 .. input and push each value to the stream
        |                            For each value in the stream:
                     `$_`             Cast it into a string
                         [::-1]       And reverse it
         parseInteger                 And parse the resulting string as an integer, while pushing the value to the stream
                               |sum  Sum all the values in the stream

Ви можете зберегти багато байтів, використовуючи [::-1]замість зворотного. Також ` $_` коротше, _..""а дужки після parseInteger не потрібні.
fergusq

@fergusq Дякую за поради, мій Röda трохи
заржавів

4

C # (.NET Core) , 103 97 байт

using System.Linq;r=>new int[r+1].Select((_,n)=>int.Parse(string.Concat((n+"").Reverse()))).Sum()

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

Посилання TIO видає всі результати від 1 до 999, тому сміливо перевіряйте мою роботу.

Я очікував, що це трохи коротше, але, виявляється, Reverse()повертається IEnumerable<char>замість іншої рядки, тому мені довелося додати трохи зайвих, щоб перетворити його на рядок, щоб я міг її розібрати до int. Можливо, є коротший шлях, як правильно перейти від IEnumerable<char>до int.

З незначної уваги, це також використовує функції Range() Reverse()і Sum()все в порядку.

-6 байт завдяки TheLethalCoder


Тобі не потрібна напівкрапка. Думаю, використання new int[r]та .Select((_,n)=>...)заощадить ваші байти.
TheLethalCoder

@TheLethalCoder Потрібно new int[r+1]отримати правильний вихід, оскільки індекс починається з 0, але він все одно зберігає кілька байтів. RIP Range()хоч
Каміль Дракарі

4

Рубі, 56, 52, 41, 39 байт

->n{(1..n).sum{|i|i.to_s.reverse.to_i}}

Рубін, 34 байти (якщо параметр лямбда - рядок)

->n{(1..n).sum{|i|i.reverse.to_i}}

Завдяки @Unihedron за друге рішення.


1
->n{ працює також.
Значення чорнила

1
Я створив більш коротку програму в тому ж інструменті (Ruby), який досить відрізняється (він стосується введення та виводу), щоб бути його власним поданням, ви можете знайти їх тут: codegolf.stackexchange.com/a/150636/21830
Unihedron

@Unihedron, ха-ха, я не знав, що Рубі настільки божевільний, що дозволяє діапазони рядків. Спасибі.
акостадінов

Так, у ruby ​​також є чудові функції, такі як ?a..?zі ?a1..?h8(хоча вам краще бути обережним з 2-м форматом: D)
Unihedron

Діапазони повинні або 1. (для початкового значення) реалізувати, succі 2. (якщо стартове або кінцеве значення не реалізує succ) бути числовими, тому int..stringбуде відхилено як "Неправильне значення для діапазону". Зворотна правда (але, на жаль, немає діапазону в центрі), або (?1..n)може бути використана натомість
Unihedron


3

Вугілля деревне , 14 13 байт

-1 байт завдяки Карлосу Алехо

I∕…·⁰N«⁺ιI⮌Iκ

Спробуйте в Інтернеті! Посилання на багатослівну версію.

Пояснення

I                  Cast
  ∕     «           Reduce
   …·⁰N            Inclusive range from 0 to input as number
         ⁺          Plus
          ι         i
           I⮌Iκ   Cast(Reverse(Cast(k)))

Можна зберегти байт, скинувши останній ». До речі, де у wiki wiki є Reduceдокументально оформлений оператор?
Чарлі

Ніде, це перевантаження підрозділу один: | Я можу надати вам доступ до редагування, якщо хочете (вибачте, я занадто лінивий, щоб зробити це сам)
лише ASCII

Крім того, так, я забув, чому відмова від закінчення брекетів працює lol
тільки ASCII

Мені б дуже хотілося, щоб вікі «Вугілля» були трохи більш задокументованими, оскільки є ще деякі робочі, але приховані функції. Якщо ви надасте мені доступ до редагування, я зроблю все можливе, щоб їх документувати. Приклад: як можна використовувати Moduloоператор для форматування рядків у вугільному вугіллі?
Чарлі

1
@CarlosAlejo У мене було трохи вільного часу, тому я почав документувати речі, сподіваюся, вам сподобається!
Ніл

3

Магнесон , 102 байти

Джерело

Це не дуже видно, тому ось розширена версія (Примітка: насправді не запуститься, і все ще не дуже симпатично)

Тільки мети відображення

Магнесон діє, аналізуючи зображення та оцінюючи команди за кольорами пікселів, які він читає. Отже, переглядаючи зображення для цього завдання, ми маємо:

  • R: 0, G: 1, B: 1це ціла команда призначення, яка бере рядок для імені змінної та значення для присвоєння. Ми будемо використовувати це для зберігання загальної суми.
  • R: 0, G: 1, B: 0 - це попередньо вбудований рядок зі значенням VAR_1 (Примітка. Це лише тоді, коли ми запитуємо рядок; колірний код має окрему функцію при використанні в іншому місці).
  • R: 3, G: 0, B: 0- це необроблене число. Магнесон обробляє стандартні числа, вимагаючи, щоб червоний компонент був рівним 3, а потім формує число, використовуючи безпосередньо синє значення плюс зелене значення, помножене на 256. У цьому випадку ми просто отримуємо число 0.
  • R: 0, G: 1, B: 1- ще одна команда призначення цілого числа. Цього разу ми зберігаємо змінну ітерації, щоб відстежувати, яке число ми знаходимо
  • R: 0, G: 1, B: 1 - це попередньо вбудований рядок зі значенням VAR_2 (Ще раз, лише тоді, коли нам потрібна рядок)
  • R: 3, G: 0, B: 0- це число 0, ще раз. На цікаві біти зараз.
  • R: 1, G: 0, B: 0вказує на початок циклу. Це займає число і циклічно виконує наступний фрагмент коду, який багато разів.
  • R: 2, G: 0, B: 0є функцією STDIN або, принаймні, це коли нам потрібне число. Це зчитує рядок введення з консолі і перетворює її в число, оскільки ми попросили номер.
  • R: 0, G: 8, B: 0починає наш цикл, і це команда добавки. Це додає число до цілочисленної змінної, а значить, береться рядок для імені змінної та число, яке потрібно додати.
  • R: 0, G: 1, B: 1- це попередньо вбудований рядок для VAR_2, який є нашою змінною ітерації.
  • R: 3, G: 0, B: 1 це необроблене число, але цього разу це число 1.
  • R: 0, G: 8, B: 0 - ще одна команда додавання.
  • R: 0, G: 1, B: 0це рядок для VAR_1, який є нашою загальною сумою.
  • R: 0, G: 3, B: 0- це функція, яка обертає рядок. У контексті запиту на номер він перетворює перевернутий рядок у число.
  • R: 0, G: 2, B: 1це ціла команда пошуку та отримає число, збережене у наданій змінній. У контексті запиту рядка (наприклад, з команди зворотного зв'язку) він перетворює число в рядок.
  • R: 0, G: 1, B: 1- назва VAR_2; наша ітераційна змінна.
  • R: 1, G: 0, B: 1- це маркер для закінчення циклу та повернення до початку циклу, якщо критерії не виконані (тому, якщо нам потрібно продовжувати циклічно). В іншому випадку продовжуйте роботу вперед.
  • R: 0, G: 0, B: 1 це дуже проста команда println і займає рядок.
  • R: 0, G: 2, B: 1 отримує ціле число зі змінної
  • R: 0, G: 1, B: 0 - назва нашої загальної змінної суми, VAR_1

    Загалом, програма:

  • Призначає значення 0 до VAR_1 таVAR_2
  • Цикли від 0 до числа, передбаченого STDIN
    • Додає до VAR_2
    • Додає ціле значення реверсування VAR_2доVAR_1
  • Друкує вміст VAR_1


3

CJam , 12 байт

ri){sW%i}%:+

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

-1 завдяки Business Cat .

Пояснення:

ri){sW%i}%:+
r            Get token
 i           To integer
  )          Increment
   {sW%i}    Push {sW%i}
    s         To string
     W        Push -1
      %       Step
       i      To integer
         %   Map
          :+ Map/reduce by Add

Чи можете ви додати пояснення? Я не розумію CJam (ні GolfScript). Але МОЙ обіграв дві (хоч і давні з точки зору гольф-язика) мови гольфу!
Zacharý

@ Zacharý зроблено ...
Ерік Вихідник

Вам не потрібен,
Business Cat

@BusinessCat Ohhh занадто багато використав для GolfScript, мабуть, ...
Ерік the Outgolfer

3

APL (Dyalog) , 10 7 байт

3 байти в гольф завдяки @ Adám, переходячи на tradfn з поїзда

+/⍎⌽⍕⍳⎕

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

          Input (example input: 10)
          Range; 1 2 3 4 5 6 7 8 9 10
          Stringify; '1 2 3 4 5 6 7 8 9 10'
          Reverse; '01 9 8 7 6 5 4 3 2 1'
          Evaluate; 1 9 8 7 6 5 4 3 2 1
+/         Sum; 46

До @Uriel & Cows лунає питання про чат: Ну, я зробив розділ "Математика", на додачу до цього мене відсторонили від чату, отже, я не відповів туди.
Zacharý


@ Adám Дякую за пораду. Видалення ¨було розумним :)
Kritixi Lithos

3

Java 8, 97 байт

IntStream.range(1,n+1).map(i->Integer.valueOf(new StringBuffer(""+i).reverse().toString())).sum()

EDIT

Відповідно до коментаря Kevin Cruijssen, я хотів би покращити свою відповідь.

Java 8, 103 байти

n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()

1
Integer.valueOfможна займатися в гольф new Integer, а .reverse().toString()можна і в гольф .reverse()+"". Також потрібно включити необхідні параметри імпорту та лямбда, як java.util.stream.IntStreamі n->раніше. І ви можете також гольф IntStreamі Integerдо LongStreamі Long. Остаточна відповідь буде n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()( 103 байти - Ваша поточна відповідь із доданим параметром імпорту та лямбда буде 117 байт .) Ще +1, приємна відповідь!
Kevin Cruijssen

@KevinCruijssen Дякую за ваші цінні матеріали. Я оновлю свою відповідь. Спасибі. :)
CoderCroc

3

Japt , 7 5 байт

-2 байти завдяки @Shaggy.

õs xw

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

Пояснення

õs xw  Implicit input of integer U
õs     Create range [1,U] and map to strings
    w  Reverse each string
   x   Sum the array, implicitly converting to numbers.

Старий розчин, 7 байт

Зберігаючи це, оскільки це дійсно круте використання z2.

õs z2 x

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

Пояснення

õs z2 x  Implicit input of integer U
õs       Create range [1,U] and map to strings
   z2    Rotate the array 180°, reversing strings
      x  Sum the array, implicitly converting back to integers

1
Ви знаєте, z2що плоский масив - це те саме, що w, правда ...
ум

6 байт: õ_swÃxзавдяки новому доповненню N.s(f).
Кудлатий

Або навіть просто õs xwна 5 байт.
Кудлатий

@Shaggy Я не можу повірити, що ніхто досі не згадував, що 5-байтне рішення ... зміниться трохи. Що стосується 6-байтового, якщо б це було додано після публікації цього виклику, я думаю, це було б неконкурентом.
Джастін Марінер

@JustinMariner, я також не можу! : D Хоча, мабуть, соромно кинути цей z2трюк; це був досить проклятий геній. Зауважте, що неконкурентос - це вже не річ .
Кудлатий

3

C ++, 146 байт

#include<string>
using namespace std;int r(int i){int v=0,j=0;for(;j<=i;++j){auto t=to_string(j);reverse(t.begin(),t.end());v+=stoi(t);}return v;}

Хороша робота! Ви можете зберегти кілька байтів, видаливши заголовок і поставивши "використовуючи простір імен std" (перевірте тут tio.run/#cpp-gcc ). Я також думаю, що ви можете замінити "auto t" на просто "t" (?)
koita_pisw_sou

Так, koita_pisw_sou має рацію щодо першої частини. Але вам потрібно auto.
Zacharý

@koita_pisw_sou Ви маєте на увазі, що я можу виключити директиву заголовка із кількості байтів? Те саме для простору імен? autoпотрібне ключове слово
HatsuPointerKun

Так, перевірте посилання, яке я надіслав
koita_pisw_sou

(Ну, я не впевнений у видаленні заголовка!) Але я мав на увазі using namespace std;збереження байтів.
Zacharý






2

Нейм , 4 байти

Δ𝐫)𝐬

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

Пояснення

Δ )              for each element 1 to n (outputs list)
 𝐫               reverse 
   𝐬             sum 

2
Альтернативне рішення: 𝐈Ψ𝐫𝐬(створити інклюзивний діапазон, перевернути кожен елемент, суму)
Okx

@Okx не знав, що Ψмаркер існує! Однозначно використав би це заднім числом. реально приємно
космічний мотлох

2

C (gcc) , 71 байт

q(n,x,p){p=n?q(n/10,x*10+n%10):x;}f(w,a,e){for(a=0;w;)a+=q(w--,0);e=a;}

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


Чекати, що? Як f()повертає результат без жодного returnтвердження? Чи має e=aінструкція маніпулює регістрів таким чином , що результат зберігається в одному регістрі , ніж тій , яка використовується значень, що повертаються?
scottinet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.