最小的看不见的,但没有共享数字!


28

挑战

在PPCG,我们确实喜欢我们的序列,所以这里又很有趣

让我们定义a(n)最小的非负整数,X这不等于任何a(k)0 < k < n),并a(n-1)X不共享任何十进制数字。a(0) = 0

给定一个输入n > 0,输出这样a(n)

例如,对于input n = 13,我们有a(13) = 20,因为a(12) = 1120是最小的非负整数,但我们尚未看到它与不共享任何十进制数字11

序列

这是让您入门的前20个学期。这是OEIS上的序列A067581

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 11, 20, 13, 24, 15, 23, 14, 25

规则

  • 可以假定输入和输出适合您语言的本机整数类型。
  • 输入和输出可以任何方便的格式给出。
  • 您可以选择0索引(例如我在此处的示例),也可以选择1索引进行提交。请说明您在做什么。
  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 如果可能,请提供一个在线测试环境的链接,以便其他人可以尝试您的代码!
  • 禁止出现标准漏洞
  • 这是因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

我们可以获取n > 1(或n ≥ 2)作为输入吗?(1-indexing)
Erik the Outgolfer

@EriktheOutgolfer当然可以。我显然在粘贴粘贴时错过了要点,因为这是我面临的挑战的标准。
AdmBorkBork

5
散点图看起来很不错:)
flawr

Answers:



7

Japt,18个字节

@A{!ZøA «As oX}a}g

在线测试!我刚刚添加了g这里使用的功能,但这是我很长时间以来一直想要添加的功能(这使我无所适从,因为我的非g解决方案大约为35个字节)。

说明

@   A{!ZøA «  As oX}a}g
XYZ{A{!ZøA &&!As oX}a}gU
                           Implicit: U = input integer
   {                 }gU   Starting with [0, 1], return the U'th item generated by
XYZ{                 }     this function: (X = previous item, Y = index, Z = full array)
    A{             }a        Return the smallest non-negative integer A where
      !ZøA &&                  Z does not contain A (A is not yet in the sequence), and
             !As oX            A.toString() does not contain any of the same chars as X.
                           Implicit: output result of last expression

这使我的头受伤了!但是,我几乎没有看过Japt中的任何函数方法。
毛茸茸的

发出问题后,您不能向语言添加某些内容的默认规则不是吗?否则,总是创建一个新的内置组件来解决挑战是很琐碎的,使它们全都短了。
trlkly

@trlkly我认为,良好的判断是允许的。我添加的内建函数不仅仅是针对这个答案的通用目的。我认为从理论上讲,有人可以添加一个内置组件来完全解决挑战,但是这样的回答肯定会收到很差的效果。
ETHproductions


3

Haskell,79个字节

f 0=0
f x=[i|i<-[1..],all((/=i).f)[1..x-1],all(`notElem`show(f$x-1))$show i]!!0

该代码效率极低。要计算更大的值,即> 12,请f x|x<11=x在两行之间添加(g在TIO链接中实现a )。

在线尝试!


1

JavaScript(ES6),82个字节

0索引。

f=(n,x=[1,p=0])=>n--?f(x[(g=k=>x[k]||(k+'').match(`[${p}]`)?g(k+1):p=k)(0)]=n,x):p

演示版


1

外壳,18个字节

!¡₁;0
ḟȯ¬V€d→⁰d-⁰N

1索引解决方案。 在线尝试!

编辑:修复了+1字节的错误。

说明

Husk的内置迭代功能¡具有许多含义。在这里,我使用的是“通过重复添加从现有元素计算出的新元素来构造无限列表”。第二行是计算新元素的辅助函数:

ḟȯ¬V€d→⁰d-⁰N  Takes a list of existing elements, e.g. x = [0,1,...,10]
           N  The positive integers
         -⁰   with elements of x removed:        [11,12,13,...
ḟȯ            Find an element n of this list that satisfies:
        d     Digits of n.
   V          Is any of them
    €         an element of
     d        the digits of
      →⁰      the last element of x?
  ¬           Negate.
              Returns 22.

第一行是主要功能:

!¡₁;0  Takes an integer k.
 ¡     Iterate adding new elements to the list
   ;0  [0]
  ₁    using the helper function,
!      take k'th element of result.

我已经将赫斯克添加到了高尔夫语言列表中 ; 如果我有任何错误的细节,请告诉我。
ETHproductions

1

Haskell,78个字节

n!k|r:_<-[j|j<-[1..],all(/=j)k,all(`notElem`show n)$show j]=n:r!(r:k)
(0![]!!)

如果to的第二个参数!不是可见数字的列表,而是看不见数字的列表,那将更加有效。但是,如果不使用更多字节,我将无法做到这一点。

在线尝试!


0

Mathematica 115字节

仍然有足够的空间进行这种高尔夫球运动-并可能使用递归(从而加快速度)。

(For[z={0};i=1,Length@z<#,
For[i=1,!FreeQ[z,i]||!DisjointQ@@IntegerDigits/@{l,i},i++];
z~AppendTo~i;l=Last@z;
];l)&

原始详细代码,具有相同的基本概念:

MakeSequenceA067581[n_]:=Module[{list={0}, innerCounter=1},

While[Length@list<n,
innerCounter=1;
(* inner loop *)While[Or[MemberQ[list,innerCounter],Intersection[IntegerDigits[Last@list],IntegerDigits[innerCounter]]!={}],innerCounter++];
AppendTo[list,innerCounter];
];
list
]
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.