自己完結型の数字のシーケンス


22

自己完結型の数値を正の整数として定義してみましょう。その数字は、それ自体に等しい長さのランで表示されます。つまり、10進数字d0を除く)は、正確にdの長さの実行でのみ発生します。

仕事

次の3つの方法のいずれかを選択できます。

  • 整数nを指定すると、n番目(0または1のインデックス付き)の自己完結型の数値を出力します。
  • 整数nを指定すると、最初のn個の自己完結型の数値が出力されます。
  • シーケンスを無期限に印刷します。

  • 133322は、3つの3の実行で3が表示され、1が単一であり、2の2の実行で2が発生するため、自己完結型の数値です。

  • 一方、35553355はあるが、ので、ではありません53はそれぞれ5と3回発生し、彼らは隣接桁のランを形成しません。

  • 44422があるため、自己完結型ではありません4が 3回のみ発生します。

  • 12222333があるため、どちらかではありません2 4の実行に表示されて2の、そしてそれは、二つの2つの別々の実行として扱うことができない2さん。

当然のことながら、これはOEIS A140057であり、最初のいくつかの用語は次のとおりです。

1, 22, 122, 221, 333, 1221, 1333, 3331, 4444, 13331, 14444, 22122, 22333, 33322, 44441, 55555, 122122, 122333, 133322, 144441, 155555

これらの抜け穴はデフォルトでは禁止されていることに注意しながら、任意のプログラミング言語標準メソッドのいずれかを使用して入力を取得し、出力を提供できます。これはコードゴルフなので、バイト単位の最短コード(すべての言語)が勝ちます。

回答:


8

パイソン2104の 94 83バイト

Xcoder氏のおかげで-10バイト
ジョナサンアランのおかげで-11バイト

i=0
while 1:
 if`i`==''.join(d*int(d)for c,d in zip(`-i`,`i`)if d!=c):print i
 i+=1

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


以来...実際には、この許容され、それは一度倒れるi長くなりますか使用するstr必要があるかもしれません(しかし、これらのことは本当に確信できません)。
ジョナサンアラン

1
@JonathanAllanそれは興味深い質問です。通常、我々は、それが規格内だと仮定することが許可されている整数ではない、タイプ長い ...、しかし、Pythonはこの区別は非常に明確にしていません
FlipTack

6

Mathematica、66バイト

シーケンスを無期限に印刷します

Do[##&&Print@t&@@(#==Tr[1^{##}]&@@@Split@IntegerDigits@t),{t,∞}]

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

TIOでは、結果を見るために実行を終了する必要がありますが、Mathematicaでは問題なく動作します。

Martin Enderから-12バイト


6

05AB1E、9バイト

シーケンスのn番目の項を1インデックスで返します。

µNÔNγ€gJQ

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

説明

µ           # loop over increasing N until counter equals input
 NÔ         # push N with consecutive equal elements deduplicated
   Nγ       # push N grouped into runs of consecutive equal elements
     €g     # get the length of each run
       J    # join to a number
        Q   # check for equality
            # if true, implicitly increment counter

私の10バイトアプローチからインスピレーションの可能性のあるソース:µNγD€gs€ÙQ
Mr. Xcoder

6

JavaScript(ES6)、76 71 68バイト

シーケンスのn番目の項を0インデックスで返します。

f=(n,k)=>+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||n--?f(n,-~k):k

注意:再帰関数と同様に、入力範囲は、Tail Call Optimizationサポートとエンジンのスタックサイズに依存します。

デモ


Alt。バージョン、65バイト

入力を受け取らずalert()、一度に1つずつ結果を出力します。

f=k=>f(-~k,+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||alert(k))

オンラインでお試しください!(最大スタックサイズを超えるとすぐに停止します。)



2

CJam、20バイト

1{_Abe`::=:*{_p}&)}h

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

説明:

1                       push 1
 {                }h    while TOS is truthy (i.e. forever):            example iteration: 14444
  _                       duplicate                                                       14444 14444       
   Ab                     convert to base 10 (get decimal digits)                         14444 [1 4 4 4 4]
     e`                   run-length encode (array of two-element arrays)                 14444 [[1 1] [4 4]]
       :                  map over the array:
        :                   fold between the two array elements with:
         =                    equality                                                    14444 [1 1]
          :               fold between the array elements with:
           *                multiplication (a.k.a. logical AND for 1 or 0)                14444 1
            {  }&         if this yields a result of 1:
             _              duplicate the number and                                      14444 14444
              p             print it                                                      14444 (output 14444)
                 )        increment the number                                            14445


2

Brachylog、10バイト

≜ℕẹḅ⟨l=h⟩ᵐ

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

入力変数を通じてシーケンスの要素を無限に生成します。(実際に、それ自体を印刷、追記を行う必要がある場合&ẉ⊥。)これは、本質的に、対応する解決するためのコードで最初の最小のソリューションブルートフォースの前に付加します。

        ᵐ    For every
  ḅ          run of
 ẹ           digits in
             the input variable
ℕ            (which is a non-negative integer),
   ⟨l  ⟩     its length
   ⟨  h⟩     and its first element
   ⟨ = ⟩     are equal.

これに必要なのは9バイトだけだと思っていましたが、数字の桁をランに分けるには明示的に必要と思われます。


1

JavaScript 4、83 80バイト

for(i=0;;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)

for(i=0;i<1000;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)


「Javascript 1」?そのような言語名はありますか?
user202729

私にはJavaScriptを有効にしてください名前がcorrewctであれば、いないように見えるので、それが動作する意味
l4m2

申し訳ありませんが、js1では動作しないようです。私は交換してください読んでいないと見られる
l4m2


1

R、56バイト

function(n)all((r=rle(el(strsplit(c(n,''),''))))$l==r$v)

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

分割番号のランレングスエンコーディングを使用します。すべての長さが値に等しい場合にtrueを返します。

注:作業methodsを開始するためelに、TIOにライブラリをロードしました。





0

Java 10、121バイト

からintまでのラムダint。この関数は、インデックスnを受け取り、n番目(1インデックス)のシーケンス値を返します。

n->{int x=0,m=1;for(;n>0;n-=m,m=1)for(var p:(++x+"").split("(?<=(.))(?!\\1)"))m=p.length()==p.charAt(0)-48?m:0;return x;}

オンラインで試す

非ゴルフ

n -> {
    int x = 0, m = 1;
    for (; n > 0; n -= m, m = 1)
        for (var p : (++x + "").split("(?<=(.))(?!\\1)"))
            m = p.length() == p.charAt(0) - 48 ? m : 0;
    return x;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.