将n与n +1串联


44

介绍

OEIS序列A127421是一个数字序列,其十进制扩展数是2个连续递增的非负数的串联。简单地说,该序列中的每个数字是由放在一起形成Ñn + 1个用于一些非负整数的值Ñ。前几个术语是:

1,12,23,34,45,56,67,78,89,910,1011,1112,1213,1314,1415,1516,1617,1718,1819,1920,2021,2122,2223,2324,2425, 2526、2627、2728、2829、2930、3031、3132、3233、3334、3435、3536、3637、3738、3839、3940、4041、4142、4243、4344、4445、4546,...

挑战

给定一个正整数n,按升序打印OEIS序列A127421 的前n个条目。

  • 输入和输出可以采用任何可接受的格式。字符串或数字适合输出。
  • 前导零不会允许的。
  • 允许使用完整的程序或功能。
  • 就此挑战而言,n将为正且小于100。
  • 默认情况下,不允许出现标准漏洞
  • 这个问题是代码高尔夫,因此最低字节数取胜。
  • 这是一些示例输入和输出:

    1 => 1
    2 => 1, 12
    3 => 1, 12, 23
    10 => 1, 12, 23, 34, 45, 56, 67, 78, 89, 910
    

如有任何疑问,请随时提出。祝好运。

PS,这是我的第一个挑战,因此希望这一切都是有意义的。

编辑:删除了输出限制,以允许数字或字符串。


1
可以将其索引为0吗?
Jo King

3
还没有人说过,但是欢迎来到PPCG!不错的第一个问题,不是太难,但也并非完全无关紧要,并且有许多不同的方法
Jo King

3
7天后,我将接受符合所有这些条件的最短答案。为什么需要结束挑战?
暴民埃里克(Erik the Outgolfer)'18年

2
如今,我们倾向于不接受答案,因为它不鼓励进一步发布答案。我想您将旧的挑战作为模型(也不鼓励),请参见在编写挑战时要避免的事情
user202729

2
@丹尼斯好吧,我将从挑战中删除日期;当不再有新答案时,我会接受。
血液学的

Answers:


13

果冻,3 个字节

ŻVƝ

一个接受整数的单子链接,该整数产生一个整数列表

在线尝试!

怎么样?

ŻVƝ - Link: integer       e.g. 59
Ż   - zero-range               [0,1,2,3,4,5,6, ... ,58,59]
  Ɲ - apply to each pair: i.e: [0,1] or [5,6]  or  [58,59]
 V  -   evaluate* jelly code   1     or 56     or  5859
    -                       -> [1,12,23,45,56, ... 5859]

* When given a list V actually joins the Python string values and evaluates that
  ...so e.g.: [58,59] -> ['58','59'] -> '5859' -> 5859

超越丹尼斯!
Okx

10

R,32字节

strtoi(paste0((x=1:scan())-1,x))

在线尝试!

MickyT超越,所以请投票赞成该答案!


进行了修改以允许使用字符串...不需要strtoi!
JayCe

2
@JayCe,有必要0从第一个输出中删除领先者。
朱塞佩

您不能以[-1]而不是使用结尾来删除前导零,strtoi还是在某些情况下失败?
JDL

@JDL strtoi被用于从转换为"01"1因为paste0它将返回c("01","12","23","34",...)并且我们不允许返回"01"
朱塞佩

1
@CriminallyVulgar不幸的是,如果输入1
Giuseppe,



7

库比克斯,19字节

I.1.W)>OSo;u.uO;@!-

在线尝试!

如下包装到多维数据集上

    I .
    1 .
W ) > O S o ; u
. u O ; @ ! - .
    . .
    . .

观看它运行

还有一点可玩的空间,但此刻

  • W 重定向到顶面朝下
  • I1> 用输入和1设置堆栈,然后重定向到主循环
  • OSo;u 输出堆栈的顶部,为堆栈添加空间,输出,移除并掉头
  • -!@;Ou)从输入中减去TOS,如果为0,则停止弹出结果,输出TOS,微调并递增TOS。回到主循环。

7

Perl 6的19 18个字节

{(^$_ Z~1..$_)X+0}

在线尝试!

匿名代码块,使用串联运算符将0到n-1的范围从1压缩为n,然后将0添加到每个元素以将其强制为数字并删除前导0。





4

Python 2中42 41个字节

f=lambda n:n-1and f(n-1)+[`n-1`+`n`]or[1]

在线尝试!

递归函数,返回字符串和整数的混合列表


您是否打算删除原始描述“返回列表的匿名函数”?
Esolanging Fruit

@EsolangingFruit糟糕,已修复!谢谢
Jo King

也许我遗漏了一些东西,但是第二个元素似乎没有包含“ 12”。
ElPedro '18年

2
@ElPedro可以通过保存一个字节来解决n and
Xcoder先生,18年

1
修复程序通常不保存字节:-)
ElPedro


4

开花,88字节

rule e<int x>[1(x)]=>[1(x-1),2(str(x)+str(x+1))|1->2];rule c[1(0),2|1->2]=>[2("12")];e!c

Blossom是我正在使用的一种图形编程语言。它只能将图作为输入,因此该程序期望一个图包含一个标记为整数的单个节点。它返回连接的边的图,以形成最接近我可以得到的数组的图形,然后将所得的图打印输出。

该代码的未压缩版本是这样的:

rule expand <int x>
    [ 1 (x) ]
 => [ 1 (x-1), 2(str(x)+str(x+1)) | 1->2 ]
where x > 0;

rule clean
    [ 1 (0), 2 ("12") | 1->2 ]
 => [ 2 ("12") ];

expand! clean

它定义了两个规则:一个称为 expand,它(当当前图中有一个带有整数值标签的节点时)创建另一个节点,该节点的增量串联在一起,并降低其值。它还在这两个节点之间创建了一条边。此规则还具有x大于0的条件。

!执行该规则,只要它可以在图形上被施加,所以在这种情况下,将执行,直到x是0。然后该clean规则移除此0节点和它的边缘。

Blossom并不是为打高尔夫球而制造的,但我认为它的表现并不差。对于人们来说,测试开花代码目前还不是一种简单的方法(而且我目前正在使用的解释器还没有完全完成,并且有一些小问题),但这并不是一个完全竞争的产品!



3

莎士比亚,703字节

Q.Ajax,.Ford,.Act I:.Scene I:.[enter Ajax and Ford]Ford:Open mind!Scene V:.Ajax:You is the sum of thyself the sum of myself the sum of a big bad fat old red pig a big bad fat old lie!Ford:Open mind!Is you nicer zero?Ajax:If so, you is twice the sum of the sum of twice thyself twice thyself thyself!If so,Let us Scene V!Ford:You a cat!Open heart!Scene X:.Ajax:You is the sum of thyself a pig!Is you worse than a cat?If so,let us Scene C.Remember thyself.You is the sum of the sum of a big old red cute rich cat a big old red cute joy a big old pig!Speak mind!You is a big old red cute rich cat!Speak mind!Recall!Ford:Open heart!You is the sum of thyself a joy!Open heart!Let us Scene X.Scene C:.[exeunt]

在这里尝试

非高尔夫版本

127421th Night.
Ajax, likes to read the stars.
Ford, someone Ajax can always count on.
Act I:.
Scene I: Ajax reads a star.
[enter Ajax and Ford]
Ford: Open your mind! 
Scene V: Ford counts what ajax has learned.
Ajax: you are the sum of thyself and the sum of myself and the sum of a big bad fat old red pig and a big bad fat old lie!
Ford: Open Your mind! Are you nicer than zero?
Ajax: If so, you are twice the sum of the sum of twice thyself and twice thyself and thyself! 
If so, Let us Scene V!
Ford: You are a cat! Open your heart!

Scene X: Ajax and Ford recall the nights.
Ajax: You are the sum of thyself and a pig! Are you worse than a cat? If so, Let us Scene C.
Remember thyself. 
You are the sum of the sum of a big old red cute rich cat and a big old red cute joy and a big old pig! 
Speak you mind!
You are a big old red cute rich cat! Speak your mind! Recall your finest hour!
Ford: Open your heart! You are the sum of thyself and a joy! Open your heart! Let us Scene X.
Scene C: Fin.
[exeunt]

3

Groovy,35个字节

{(0..<it)*.with{""+it+++it as int}}

在线尝试!

我在最后一分钟想到了使用* .with而不是.collect的想法。我不知道该怎么it+++it解析到,但它是否it++ + it还是it + ++it他们都做同样的事情。我试图想出一种方法,通过将它变成1..it并递减来消除<.. <中的<,但我认为它不会变得更短。


欢迎来到PPCG;不错的第一篇文章!关于的解析a+++b该测试表明它是从左到右解析的,意思是(a++)+b
乔纳森·弗雷希

3

C(gcc)44 43字节

f(i){i--&&printf(" %2$d%d"+5*!f(i),i+1,i);}

在线尝试!


@DLosc %m$格式说明符“表示所需参数在参数列表中的位置,从1开始索引” printf(3)手册页)。只要您的C库支持它,它就非常方便!
ErikF '18

谢谢...但是我仍然很困惑为什么%d%d(以及切换参数的顺序)不起作用。(我尝试过,但不知道为什么它不产生输出。)
DLosc

@DLosc如果您更改格式字符串,请确保更改其后的偏移量(例如" %d%d"应具有+3*!f(i);否则,+ 5偏移量将指向字符串末尾的NUL。)
ErikF

哦,好吧-我终于明白了:“#2,然后是#1”是必要的,因为在基本情况下,缩短的格式字符串变为“#1”,因此您需要将第一个printf参数设置为 i+1,而不是i。很有意思。
DLosc

3

Pyth9 8 6字节

ms+`dh

在线尝试!

说明:

       - implicit output
m      - map function with argument d:
  +    -  concatenate
    d  -  argument d
   `   -  to string
     h -  into implicit d + 1
       - into Q (implicit input)

1
欢迎使用PPCG!:)
Shaggy

@Shaggy谢谢,这是我第一次这样做。
u_ndefined

2

果冻,4字节

ḶżRV

在线尝试!

这个怎么运作

ḶżRV  Main link. Argument: n

Ḷ     Unlength; yield [0, ..., n-1].
  R   Range; yield [1, ... n].
 ż    Zipwith; yield [[0, 1], ..., [n-1, n]].
   V  Eval; cast each array to string and evaluate, yielding integers.


2

05AB1E,6个字节

>GNJ,N

在线尝试!

说明

>G       # for N in [1 ... input]
  N      # push N
   J     # join stack
    ,    # print
     N   # push N (for next iteration)

LεD<ìï 适用于相同的字节数,但具有列表输出




2

Japt -m6 5字节

ó2 ¬n

在线尝试!

和往常一样,知道标志

开箱及其工作方式

-m       Convert to range and map...

Uó2 q n
Uó2      Construct [U, U+1]
    q    Join
      n  Convert to number

         Implicit output (Array is printed as comma-delimited values)

5个字节。不知道为什么ó没有,这里就不起作用2
毛茸茸的

我还有其他2个5字节的解决方案(都使用相同的方法),如果其他人想对它们使用刺刀,则不使用标志。
毛茸茸的

我认为5 + 2 = 7个字节,因为标志?
u_ndefined


2

C#(Visual C#交互式编译器)103 71 64 56字节


高尔夫 在线尝试!

i=>{for(int x=0;x<i;)Write($"{(x>0?$",{x}":"")}{++x}");}

不打高尔夫球

i => {
    for( int x = 0; x < i; )
        Write( $"{( x > 0 ? $",{x}" : "")}{ ++x }" );
}

完整代码

Action<Int32> a = i => {
    for( int x = 0; x < i; )
        Write( $"{( x > 0 ? $",{x}" : "")}{ ++x }" );
    };

Int32[]
    testCases = new Int32[] {
        1,
        2,
        3,
        10,
    };

foreach( Int32[] testCase in testCases ) {
    WriteLine( $" Input: {testCase}\nOutput:" );
    a(testCase);
    WriteLine("\n");
}

旧版本:

  • v1.2,64个字节

    i=>{for(int x=0;x<i;)Write($"{(x>0?$",{x}":"")}{++x}");}
  • v1.1,71个字节

    i=>{for(int x=0;x<i;)System.Console.Write($"{(x>0?$",{x}":"")}{++x}");}
  • v1.0,103个字节

    i=>{for(int x=0;x<i;)System.Console.Write($"{(x>0?",":"")}{x++*System.Math.Pow(10,$"{x}".Length)+x}");}

发布

  • V1.3 - - 8 bytes-删除Console再次感谢raznagul
  • V1.2 - - 7 bytes-删除System感谢raznagul
  • 1.1版 --32 bytes
  • 1.0 - 103 bytes-初始溶液。

笔记

  • 没有

1
C#交互式编译器具有的静态导入System.Console。因此,通过删除它可以节省15个字节。
raznagul

对!必须使用它们的习惯
auhmaan '18

您也可以删除Console.TIO
raznagul


2

ABAP,101个字节

并不是真正的高尔夫语言,但是我很喜欢它

WHILE x<w.
CLEAR z.
IF x=1.
WRITE x.
ELSE.
CONCATENATE y x INTO z.
WRITE z.
ENDIF.
y=x.
x=x+1.
ENDDO.

W是输入项,X是从1开始的计数器,Y是从第二遍开始的X-1,Z是串联的字符串。


2

Powershell,27 26字节

1.."$args"|%{"$p$_";$p=$_}

-1个字节:谢谢 AdmBorkBork

测试脚本:

$f = {
1.."$args"|%{"$p$_";$p=$_}
}

&$f 1
""
&$f 2
""
&$f 3
""
&$f 10
""
&$f 46

1
您可以节省一个字节来1.."$args"代替。
AdmBorkBork



2

Javascript,43 44,46,49,53字节

n=>[...Array(n)].map((_,a)=>~~(a+(a+1+"")))

之前的版本 :

n=>[...Array(n)].map((_,a)=>~~(a+(""+ ++a)))
n=>[...Array(n)].map((_,a)=>0- -(a+(""+ ++a)))
n=>[...Array(n).keys()].map(a=>0- -(a+(""+ ++a)))
n=>[...Array(n).keys()].map(a=>parseInt(a+(""+ ++a)))

@Shaggy的解决方案(比我的要好)可以删除,节省了3个字节 .keys()


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.