最小の非表示、ただし共有桁なし!


28

チャレンジ

ここPPCGでは、シーケンスが確実に好きなのでの楽しみがあります。

のは、定義しようa(n)ものとして最小非負整数X任意に等しくないa(k)0 < k < n)、及びa(n-1)及びX任意の10進数字を共有しません。a(0) = 0

入力が与えられるとn > 0、出力などa(n)

例えば、入力のためにn = 13、我々は持っているa(13) = 20ので、a(12) = 1120して任意の10進数字を共有しない、我々はまだ見ていない整数最小非負です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インデックス)
エリックアウトゴルファー

@EriktheOutgolfer確かに、それは結構です。それは私の挑戦の標準だからです。
AdmBorkBork

5
散布図を確認してくださいルックスの素敵な:)
flawr

回答:



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私はそれが良い判断の範囲内で許可されていると信じています。私が追加したビルトインは、この1つの答えだけでなく、はるかに汎用的です。誰か理論的には課題を完全に解決するビルトインを追加することができると思いますが、そのような答えは非常に不十分に受け取られるはずです。
-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は、2行の間に追加します(gTIOリンクに実装されます)。

オンラインでお試しください!


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の組み込み反復関数に¡は多くの意味があります。ここでは、「既存の要素から計算された新しい要素を繰り返し追加して無限リストを構築する」を使用しています。2行目は、新しい要素を計算するヘルパー関数です。

ḟȯ¬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.

Huskをゴルフ言語リストに追加しました。詳細が間違っている場合はお知らせください。
ETHproductions

1

Haskell、78バイト

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

の2番目の引数!が、表示されている数字のリストではなく、表示されていない数字のリストである場合、さらに効率的です。しかし、私はそれ以上のバイトを使用せずにそれを行うことはできません。

オンラインでお試しください!


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
]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.