Диапазон, Реверс, Сумма!


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+ цифрами меняются местами так же, как числа с 2 цифрами. Например, 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
DAT

@ETHproductions хорошо Reverseдолжно быть на Reverse eachсамом деле ...
Эрик Outgolfer

@EriktheOutgolfer Это не векторизация?
Только для ASCII

@ ASCII-only 05AB1E векторизация действительно на 1 уровень глубиной, а не ∞. Также просто «обратный» есть R, а í«обратный каждый».
Эрик 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}

Попробуй это

Expanded:

{
   ( 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 стала немного ржавой :)
Kritixi Lithos

4

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

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

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

TIO link выводит все результаты с 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()хотя
Камиль Drakari

4

Рубин, 56, 52, 41, 39 байт

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

Ruby, 34 байта (если лямбда-параметр является строкой)

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

Спасибо @Unihedron за второе решение.


1
->n{работает так же.
Value Ink

1
Я создал более короткую программу в том же инструменте (Ruby), который достаточно отличается (он имеет дело с вводом и выводом), чтобы представлять его для собственного представления. Вы можете найти его здесь: codegolf.stackexchange.com/a/150636/21830
Unihedron

@Unihedron, ха-ха, я не знал, что Руби настолько безумна, чтобы разрешать диапазоны строк. Спасибо.
Акостадинов

Да, у ruby ​​также есть отличные функции, такие как ?a..?zи ?a1..?h8(хотя вам лучше быть осторожным со вторым форматом: 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)))

Вы можете сохранить байт, отбросив последний ». Кстати, где в вики Charcoal Reduceдокументирован оператор?
Чарли

Нигде это не перегрузка деления первого: | Я могу дать вам доступ для редактирования, если вы хотите (извините, я слишком ленив, чтобы сделать это сам)
только ASCII

Кроме того, да, я забыл, почему
ASCII-only

Мне бы очень хотелось, чтобы вики Charcoal была немного документирована, так как есть еще некоторые работающие, но скрытые функции. Если вы предоставите мне доступ к редактированию, я сделаю все возможное, чтобы документировать их. Пример: как можно использовать Moduloоператор для форматирования строк в Charcoal?
Чарли

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

3

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

Источник

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

Отображать только цели

Магнезон работает, анализируя изображение и оценивая команды по цветам пикселей, которые он читает. Таким образом, пройдя изображение для этого вызова, мы имеем:

  • R: 0, G: 1, B: 1целочисленная команда присваивания, которая принимает строку для имени переменной и значения для назначения. Мы будем использовать это для хранения итоговой суммы.
  • R: 0, G: 1, B: 0является предварительно созданной строкой со значением VAR_1(Примечание: это только когда мы запрашиваем строку; цветовой код имеет отдельную функцию при использовании в другом месте).
  • R: 3, G: 0, B: 0это необработанное число. Магнесон обрабатывает стандартные числа, требуя, чтобы компонент Red был точно равен 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ý готово ...
Эрик Outgolfer

Вам не нужно,
Business Cat

@BusinessCat Оооо слишком много использовал в GolfScript, по-видимому ...
Эрик 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 крякнул по поводу вопроса чата: Ну, я сделал часть по математике, в дополнение к этому, я был отстранен от чата, поэтому я там не отвечал.
Захари


@ Adám Спасибо за совет. Удаление ¨было умным :)
Kritixi Lithos

3

Java 8, 97 байт

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

РЕДАКТИРОВАТЬ

Согласно комментарию 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 байта - ваш текущий ответ с добавленным параметром import и лямбда будет 117 байтов .) +1, хороший ответ!
Кевин Круйссен

@KevinCruijssen Спасибо за ваш ценный вклад. Я обновлю свой ответ. Спасибо. :)
CoderCroc

3

Джапт , 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, верно ... хм ... извините мою неадекватность в Джапте ...
ETHproductions

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

Отличная работа! Вы можете сэкономить несколько байтов, удалив заголовок и вставив «using namespace std» (проверьте здесь tio.run/#cpp-gcc ). Я также думаю, что вы могли бы заменить «auto t» просто «t» (?)
koita_pisw_sou

Да, koita_pisw_sou прав насчет первой части. Но вам нужно auto.
Zacharý

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

Да, проверьте ссылку, которую я отправил
koita_pisw_sou

(Ой, я не уверен насчет удаления заголовка!) Но я имел в виду using namespace std;сохранение байтов.
Захари



2

RProgN 2 , 8 байтов

{Ø.in}S+

Разъяснения

{Ø.in}S+
{    }S # Create a stack in range 0 through the implicit input, using the function defined
 Ø.     # Append nothing, stringifying the number
   i    # Reverse the string
    n   # Convert back to a number
       +# Get the sum of the stack, and output implicitly.

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




2

Нейм , 4 байта

Δ𝐫)𝐬

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

объяснение

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

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

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