范围,反向,求和!


21

给定一个正整数n作为输入,输出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。


更多测试用例结果(未编号,对不起,但是您可以解析并获取他们的行号):在线尝试!
斯蒂芬,

@StepHen>:D 木炭速度更快



4
-1,因为这没意思。似乎大多数(如果不是全部)提交文件都使用相同的方法。这个挑战似乎是一堆已经提出的问题,只是没有明显的捷径而已。
硕果累累

Answers:



12

Bash + GNU utils,24

seq $1|rev|paste -sd+|bc

在线尝试

说明

seq $1                    # range
      |rev                # reverse (each line)
          |paste -sd+|bc  # sum

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编号。对Range中的每个值».flip调用该.flip方法。接下来的最短方法.map(*.flip)是增加5个字节。
布拉德·吉尔伯特b2gills '17

哦,所以关键部分是“每个”,而不是“(可能并行)”。然后,可能值得将它们分开。
基金莫妮卡的诉讼

@QPaysTaxes我不确定我知道你的意思».flip是一个超级方法调用。尽管可以像以前一样使用unspace 拆分».flip\ 这将使它变得更难以理解,因为它看起来像是qqww/ /构造(« a b "c d" »)的结尾。
布拉德·吉尔伯特b2gills '17

7

视网膜41 36 35字节

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

.+
$*
1

在线尝试!链接包括测试用例。编辑:由于@FryAmTheEggman,节省了5个字节。感谢@ PunPun1000,节省了1个字节。说明:

.+
$*

转换为一元。

1
1$`¶

创建从1到的范围n

1+
$.&

转换回十进制。

%O^$`.

反转每个数字。

.+
$*

转换回一元。

1

求和并转换回十进制。


@FryAmTheEggman Bah,我一直忘了那个。
尼尔

你并不需要.+¶ 本场比赛将跨行匹配
PunPun1000

@ PunPun1000在FryAmTheEggman修复之前,我确实需要它!
尼尔

我注意到O^$s`.反转整个字符串也可以。
尼尔




5

cQuents,4个字节

;\r$

在线尝试!

说明

       Implicit input n.
;      Series mode. Outputs the sum of the sequence from 1 to n.
 \r$   Each item in the sequence equals:
 \r    String reverse of
   $                     current index (1-based)



5

Röda56 41 36字节

@fergusq节省了15个字节

{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转换为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个字节(如果lambda参数是一个字符串)

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

感谢@Unihedron提供第二种解决方案。


1
->n{也可以。
价值墨水

1
我在同一工具(Ruby)中编写
Unihedron

@Unihedron,哈哈,我不知道Ruby允许字符串范围如此疯狂。谢谢。
akostadinov

是的,ruby还具有类似?a..?z和的漂亮功能?a1..?h8(尽管您最好注意
第二种

范围必须为1.(对于起始值)实现,succ而2.(如果起始值或结束值均未实现succ)必须是数字,因此int..string将被拒绝为“范围的差值”。倒数是正确的(但可惜没有下降的范围),或者(?1..n)可以代替使用
Unihedron

3

Mathematica,47个字节

Tr[FromDigits@*Reverse/@IntegerDigits@Range@#]&

在线尝试! (为了进行数学研究,我们需要将“ Tr”替换为“ Total”)


Tr@*IntegerReverse@*Range
ngenisis '17

3

木炭14 13字节

-1字节感谢Carlos Alejo

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

在线尝试!链接是详细版本。

说明

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

您可以通过删除last来保存一个字节»。顺便说一下,Reduce操作员在木炭维基中的哪个地方有文档记录?
查理

无处,这是除法一的重载:| 如果您愿意,我可以给您提供编辑权限(对不起,我太懒了,自己不能做)
仅ASCII码

另外,是的,我忘记了为什么省去了大括号的原因大声笑
纯ASCII码,

我真的希望炭笔Wiki有更多记录,因为仍然有一些有效但隐藏的功能。如果您授予我编辑权限,我会尽力记录下来。示例:如何使用Modulo运算符格式化木炭中的字符串?
查理

1
@CarlosAlejo我有一些空闲时间,所以我开始记录内容,希望您喜欢!
尼尔

3

Magneson,102字节

资源

这不是很明显,所以这是一个放大的版本(注意:实际上不会运行,但仍然不是很漂亮)

仅显示目的

Magneson通过解析图像并根据其读取的像素的颜色评估命令来进行操作。因此,逐步了解此挑战的图像,我们有:

  • R: 0, G: 1, B: 1是一个整数分配命令,该命令使用一个字符串作为变量名和要分配的值。我们将用它来存储总数。
  • R: 0, G: 1, B: 0是带有值的预构建字符串VAR_1(注意:仅在我们要求字符串时;颜色代码在其他地方使用时具有单独的功能)。
  • R: 3, G: 0, B: 0是原始数字。Magneson通过要求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_1VAR_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)。但是我打败了两种(尽管是古老的高尔夫语言)高尔夫语言!
扎卡里


您不需要,
Business Cat

@BusinessCat Ohhh显然对GolfScript花费了太多……
Outgolfer的Erik

3

APL(Dyalog)10 7字节

通过@Adám将3个字节打高尔夫球,将其从火车转换为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听到有关聊天问题的消息:嗯,我做了数学部分,此外,我被暂停了聊天,因此我没有在那里回答。
扎卡里

7个字节:+/⍎⌽⍕⍳⎕
ADAM

@Adám感谢您的提示。删除是¨很聪明的:)
Kritixi Lithos'8

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可以golfed来new Integer,和.reverse().toString()也可以打高尔夫球.reverse()+""。此外,还必须包括所需的进口和lambda参数,如java.util.stream.IntStreamn->之前。而且你还可以打高尔夫球IntStreamIntegerLongStreamLong。最终答案将是n->java.util.stream.LongStream.range(1,n+1).map(i->new Long(new StringBuffer(""+i).reverse()+"")).sum()103字节 -您当前添加了import和lambda参数的答案将是117字节。)还是+1,不错的答案!
凯文·克鲁伊森

@KevinCruijssen感谢您的宝贵意见。我将更新我的答案。谢谢。:)
CoderCroc

3

Japt7 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… 是一样的...嗯...请原谅我在Japt的不足...
ETHproductions

6个字节:õ_swÃx感谢的新增加N.s(f)
长毛

甚至只是õs xw5个字节。
长毛

@Shaggy我不敢相信到目前为止没有人提到5字节的解决方案...会稍作修改。至于6字节的文件,如果在发布此挑战后添加了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)。我也认为您可以仅用“ t”(?)代替“ auto t”
koita_pisw_sou

是的,koita_pisw_sou在第一部分中是正确的。但是你需要auto
扎卡里

@koita_pisw_sou您的意思是我可以从字节数中排除头指令吗?命名空间是否相同?auto关键字是必需的
HatsuPointerKun

是的,检查我发送的链接
koita_pisw_sou

(糟糕,我不确定要删除标题!)但是我指的是using namespace std;保存字节。
扎卡里

3

稻壳 7 6 3字节

ṁ↔ḣ

在线尝试!

取消高尔夫/解释

  ḣ  -- With the list [1..N] ..
ṁ    -- .. do the following with each element and sum the values:
 ↔   --    reverse it


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

Neim,4个字节

Δ𝐫)𝐬

在线尝试!

说明

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

2
替代解决方案:(𝐈Ψ𝐫𝐬创建包含范围,反转每个元素的总和)
Okx

@Okx不知道Ψ令牌存在!肯定会事后使用。真正的好
太空垃圾

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.