カントールの言いようのない数


58

話せない数とは、7で割り切れる数、または数字の1つが7である数です。子供向けゲームは、言葉にできない数字のスキップを数えることです

1 2 3 4 5 6 ( ) 8 9 10 11 12 13 ( ) 15 16 ( ) 18 ...

Cantorのゲームのバージョンは、シーケンス「1 2 3 4 5 6()8 ...」を上のギャップ()に再帰的に埋めることによって定義されるシーケンスです。

1 2 3 4 5 6 1 8 9 10 11 12 13 2 15 16 3 18 19 20 4 22 23 24 25 26 5 6 29 30 31 32 33 34 1 36 8 38 ...

Cantorの言いようのない番号ゲームの少なくとも最初の7 ^ 7番号を印刷/出力してください...

定義は再帰的に与えられますが、コードで再帰を使用する義務はありません。

これはであるため、バイトカウントが最も短いプログラムが優先されます。

注:1〜7 ^ 7の数字の合計は203511962727です。その範囲の最後の10個の数字は823534 823535 221563 108068 823538 823539 823540 823541 823542 221565です。

最初の1000回のペーストビンダンプ:http : //pastebin.com/Ksiu9Svf


8
ソリューションを確認できるように、そのシーケンスの最初の7 ^ 7の番号を入力してください。
-flawr


2
誰かがさらに数を生成して結果を比較する場合:シーケンスの最初の7 ^ 77数の合計は3336402440238885119980169136020683586413168645292341926482898521634332654984279162327502549917668322950744929983987545341421076028
Niklas B.

確かに、そのシーケンスの1の数は22977です。つまり、最初の7 ^ 77からランダムに一様に要素を選択した場合、2 * 10 ^ -61の確率で1になる可能性があります
Niklas B.

1
ここであなたが興味を持っている、ここでは繰り返さ1の数の増加を示すグラフである:drive.google.com/file/d/0B71iQwGfNtw5NGladjdOZVhoNkk/...
ニクラスB.

回答:


6

Pyth25 23 22バイト

-2バイトの@Maltysenに感謝

.V1=+Y
?}7+PbjbT@Y~hZb

無限ストリームを印刷するプログラム。

オンラインでお試しください!(出力は一定間隔でフラッシュされ、1分でタイムアウトします)

使い方

.V1=+Y
?}7+PbjbT@Y~hZb

Z = 0, Y = []    Implicit variable assignment
.V1              Infinite incrementing for loop with variable b, starting at 1:
   =+Y            Y = Y +
(newline)          (Implicitly print the result of the following:)
?                   If
 }7                  7 is in
    Pb                the prime factorisation of b
   +                  or
      jbT             the digits of b:
         @Y            Index into Y at index
             Z          Z
           ~h          (Increment Z)
                    else:
              b      b

1
23バイト。それはcuzの作品7素数であるので、整除は、他のチェックとうまくフィットし素因数分解、チェックを介して行うことができている
Maltysen

あなたはそれを投稿することができます、あなたの主な部分
Maltysen

1
このコンテストに優勝しておめでとうございます。@Maltysenのトリックも好きです!
mschauer

23

Python 2、77 75 74 70バイト

限界を示唆しているため@MartinEnderのおかげ9e5エンデのどのrは、変更後の作業アップDは。
@mschauerに4バイトを節約して、無限ストリームを提案してくれてありがとう。

def f(n=0):
 i=f()
 while 1:n+=1;yield next(i)if'7'in`n`or n%7<1else n

これは、数の無限ストリームを生成するジェネレータです。


上限を完全に削除できませんか?
mschauer

@mschauerありがとう、そのことを考えていませんでした。
-PurkkaKoodari

if n%7<1or'7'in`n`else nn%7<1文字列をチェックするよりも高速であり、or短絡しているため、わずかに高速(同じバイトカウント)になる可能性があります。yield[n,next(i)][n%7<1or'7'in`n`]動作しないのは残念です。
mbomb007

@ mbomb007ここで速度が問題になるとは思わないが、ありがとう。:)
PurkkaKoodari

10

Perl、47 46 41 39バイト

@Dadaのおかげで5バイト節約

say$_=$_%7*!/7/?$_:$a[$b++]for@a=1..1e6

オンラインでお試しください!TIO Nexus、Perlサポート付き!これにより、特定のポイントの後に出力が切り捨てられますが、Perlがインストールされている場合は、ローカルで実行して完全な出力を生成できます。

このコードは、Perlの構文のいくつかの奇妙な癖を利用しているため、その仕組みを以下で説明します。

コードの内訳:

say$_=$_%7*!/7/?$_:$a[$b++]for@a=1..1e6
                              @a=1..1e6 #Assign the range (1..1,000,000) to the array @a
                           for          #and then loop through this list, with $_ as an alias for the list member.  As an alias, modifying $_ modifies @a.
      $_%7*!/7/?$_:$a[$b++]             #Ternary operation
      $_%7                              #Returns the residue modulo 7...
          *!/7/                         #...and multiplies it by the negation of whether or not there exists a 7 $_
                                        #Since % and * have the same operator precedence, it must be evaluated in this order
                                        #otherwise we would get (!/7/*$_)%7 instead of ($_%7)*!/7/
               ?$_                      #If the result is non-zero (i.e. truthy), then return $_
                  :$a[$b++]             #Otherwise, return the $b-th element of @a, and increment $b
   $_=                                  #Reassign the result back to $_, modifying @a
say                                     #Prints the result of the assignment, separated by newlines

1
say$a[@a]=$_=...間違っていなければ2バイト勝ちます。
ダダ

実際、@ Dadaを使用すると$_、に割り当てる必要がなくなり、5バイト節約できます。ありがとう!
ガブリエルベナミー

1
ああ、確かに、私はちょっと見て、途中でその割り当てに気づかなかった..良い仕事:)
ダダ

「Perlは非常に書き込み専用言語になり得ます」という文を理解したのは、この瞬間(そしてこの瞬間だけです!)です。
ハニーフムバラク

@Grimyは、他のコードを編集しないでください。回答を改善したい場合は、改善を含むコメントを追加するか、独自の回答を投稿してください。コメントでOPにたどり着けないので、自分の答えを投稿してください。
ovs

5

PHP、80(ワホカ)57 54バイト

アイデアはワホカからです。私のバージョンは、それを独自の答えにするのに十分異なると思います:

for(;;)echo$a[]=strpos(++$n,55)<-$n%7?"$n ":$a[+$b++];

5

Haskell、67 66バイト

i#x|mod x 7<1||'7'`elem`show x=f!!i:(i+1)#(x+1)|y<-x+1=x:i#y
f=0#1

f 数の無限リストです。

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

fで新しい反復を開始し1、インデックスを0から選択します。ギャップが発生するたびに、新しい反復を取得してそのith要素を選択し、現在の反復をで継続しi+1ます。ギャップがない場合、現在の数を取得し、x増加せずに続行しiます。

編集:@BMOのおかげで-1バイト。


4

MATL26 25バイト

9e5:`t7\yFYA!7-A*~s:2M(2M

オンラインでお試しください!9e5置き換えられ9e4、オンラインコンパイラの最大実行時間と出力サイズを超えないようにします。

使い方

これは、再帰の代わりに反復を使用します。(実際、MATLには再帰がありません)。

から1までの数値の配列9e5が最初に生成されます(9e5を超えるため、これで十分7^7です)。その後、の倍数である数字7や持っている7数字とは識別され、置き換えられている12交換する必要が全く数字がなくなるまで、...プロセスが繰り返されます。

9e5:       % Generate array of numbers [1 2 ... 9e5]. This array will become the
           % output, after some numbers have been replaced
`          % Do...while
  t        %   Duplicate the array of numbers
  7\       %   Modulo 7. Gives zero for multiples of 7
  y        %   Duplicate the array of numbers
  FYA!     %   Matrix of decimal digits, with a column for each number
  7-       %   Subtract 7 to each entry of that matrix
  A        %   Array that contains "true" for columns that only contain nonzeros;
           %   that is, for numbers that do not have 7 as digit 
  *        %   Multiply. This corresponds to a logical "and" of the two conditions.
           %   A zero indicates that the number at that index needs to be replaced
  ~        %   Logical negate. Each "true" corresponds to a number to be replaced
  s        %   Sum. This is the amount of numbers to be replaced, say n
  :        %   Push array [1 2 ... n]
  2M       %   Push array of logical values again
  (        %   Replace the numbers at the positions indicated by the logical array
           %   by the values [1 2 ... n]
  2M       %   Push n again. This is used as loop condition, so if it is nonzero
           %   the next iteration will be executed. Note that this executes one
           %   too many iterations: the exit condition is that no replacing has
           %   been needed in the current iteration; but then the current iteration 
           %   (which will be the last) was not really necessary. This does not
           %   matter; the last iteration is useless but also harmless
           % End do...while implicitly. Display implicitly

3

Tcl、121バイト

無限ループを使用した些細なソリューション、空想なし。

set r 0;set n 0;while {[set r [expr $r+1]]} {if {![expr $r%7]||(7 in[split $r ""])} {puts [set n [expr $n+1]]} {puts $r}}

ゴルフをしていない:

set r 0
set n 0
while {[set r [expr $r+1]]} {
  if {![expr $r % 7] || (7 in [split $r ""])} {
    puts [set n [expr $n+1]]
  } {
    puts $r
  }
}

を使用できますincr。TCLバージョン> = 8.6なら、incr最初の反復にの増加を前提と新しいから変数を01その変数が以前に設定されていない場合。したがって、最初の2つのset指示を取り除くことができます。
-sergiol

私がゴルフをしました —不要な空白も削除しました
セルジオ

私があなたのために私のゴルフの提案を投稿したサイトはそれらを失ったので、私の新しい答え
-sergiol

3

PHP、106 80バイト

Ismael Miguelが、三値ソリューションとwhileの代わりにforを使用した短いループコードの支援をありがとう。

PhpFiddleの最大実行時間は30秒であるため、完全なシーケンスの最後の部分を検証できませんでした。OPが提供するサンプル出力に基づいて、少なくとも1Kまで​​動作するようです。

ゴルフ:

for($n=1;;$n++)echo$a[]=!(strpos($n,"7")>-1||$n%7==0)?"$n ":array_shift($a)." ";

オリジナルのゴルフバージョン

$n=1;while(1){if(!(strpos($n,"7")>-1||$n%7==0)){echo$a[]=$n." ";}else{echo$a[]=array_shift($a)." ";}$n++;}

1
for($n=1;;$n++)echo$a[]=!(strpos($n,7)>-1||$n%7==0)?"$n ":array_shift($a)." ";バイト数はわかりませんが、106バイトよりはるかに少ないと確信しています。試してみて、動作するかどうかを確認してください。
イスマエルミゲル

とてもいいです、助けてくれてありがとう。コードの唯一の変更は、78バイトバージョンに2バイトを追加する最初の7を引用符で囲むことです。
ワホカ

することで3バイトかそこら節約できますfor($n=1;;$n++)echo$a[]=strpos($n,"7")>-1||$n%7==0?array_shift($a)." ":"$n ";。私はあなたが交換することができるかどうかはわからない$n%7==0!$n%7、それは試してみる価値はあります。
イスマエルミゲル

1
-6を続けてください:$ n = 0は役に立たず、「7」は7になります
暗号

1
なぜシフト?for(;;)echo$a[]=strpos(++$n,55)<-1&&$n%7?"$n ":$a[++$b-1];(58バイト)。++$b-1なぜなら$a[null] === null
クリストフ

3

ジュリア、62バイト

x=[];j=0;for i=1:7^7;x=[x;i%7<1||('7' in "$i")?x[j+=1]:i]end;x

派手なものは何もありません。ギャップ内のシーケンスがシーケンス自体であることを使用します。余分な配列コピーを作成して、いくつかのバイトを節約します。


3

Perl 6の 74の57 54  53バイト

sub u{my@u;(1..*).map: {if $_%%7||.comb('7') {@u||=u;@u.shift} else {$_}}}
sub u{(1..*).map: {$_%%7||.comb('7')??(@||=u).shift!!$_}}
sub u{map {$_%%7||.comb('7')??(@||=u).shift!!$_},1..*}
sub u{map {$_%%7||.comb(~7)??(@||=u).shift!!$_},1..*}

それを試してみてください

拡張:

sub u{
  map             # for each element transform using:

  { # bare block lambda with implicit parameter 「$_」

      $_ %% 7     # if it is divisible by 7
      ||          # or
      .comb(~7)   # contains the number 7 (implicit method call on 「$_」)

    ??            # then
      ( @ ||= u ) # store a new instance of the Seq into an unnamed state array if it is empty
                  # ( it is only empty the first time it is seen in this Seq instance )
      .shift      # pull one off of the front

    !!            # else
      $_          # return the value
  },

  1 .. *          # infinite range starting at one ( elements to be mapped over )
}

テスト:

$ time perl6 -e'sub u{map {$_%%7||.comb(~7)??(@||=u).shift!!$_},1..*};put 203511962727 == sum u()[^7**7]'
True

real    2m45.744s
user    2m45.416s
sys     0m0.212s

~7代わりに言うことでバイトを節約できるように見えます'7'
ショーン

2

セイロン、202バイト

object u satisfies{Integer*}{iterator()=>object satisfies Iterator<Integer>{variable value i=0;late Iterator<Integer>n;next()=>if(++i%7<1||'7'in"``i``")then(i<8then(n=iterator())else n).next()else i;};}

これは関数ではなく、無限シーケンス(Iterable)を実装するオブジェクト宣言です。オブジェクトは直接印刷することができ、print(u)これを出力します:

{ 1, 2, 3, 4, 5, 6, 1, 8, 9, 10, 11, 12, 13, 2, 15, 16, 3, 18, 19, 20, 4, 22, 23, 24, 25, 26, 5, 6, 29, 30, ... }

さらに印刷するには、を使用しますprintAll(u)。次のコードは改行を使用し、合計(および上記の最初の30要素)も出力します。

shared void run() {
    printAll(u.take(7^7), "\n");
    print(sum({0, * u.take(7^7)}));
    print(u);
}

以下は、コメントなしのバージョンです。

// Prints cantor's unspeakable numbers.
//
// Question:  http://codegolf.stackexchange.com/q/101231/2338
// My answer: http://codegolf.stackexchange.com/a/101297/2338

// this object u (which is like a singleton class with its single instance)
// implements the Iterable<Integer> interface.
object u satisfies {Integer*} {
    // That interface has just one formal method,
    // `shared formal Iterator<Integer> iterator()`.
    // Lets implement it by ...
    iterator()
    // ... providing for each call ...
            =>
                // ... a new (anonymous) object, which
                // implements the Iterator<Integer> interface.
                object satisfies Iterator<Integer> {
                    // This is the counter (the type `Integer`
                    // is longer than `value`, so we infer it).
                    // We start at 0.
                    variable value i = 0;
                    // This is a nested Iterator. It will be
                    // initialized when first needed, so we don't
                    // get an endless recursion when creating the
                    // first iterator.
                    late Iterator<Integer> n;
                    // `shared formal Integer next()` is the single method
                    // of Iterator which needs to be implemented.
                    next()
                    // each time it is called, the following
                    // expression will be evaluated.
                            =>
                                // increment the counter, then check if it
                                // is an unspeakable number.
                                if (++i % 7 < 1 || '7' in "``i``")
                                then
                                    // if so, take the nested iterator (and the
                                    //  first time, for i == 7, create it first),
                                    // and take its next element.
                                    (i < 8 then (n = iterator()) else n).next()
                                else
                                    // otherwise, just return i.
                                    i;
                };
}

2

ルビー、80バイト

l=->x{x%7==0||x.to_s[/7/]};a=(1..100);b=a.reject &l p a.map{|x|!l[x]?x:b.shift}

最初の提出、私はそれが改善できると確信しています:)


1
PPCGへようこそ!これは少なくとも7 ^ 7(つまり823543)に達し、数字 7、つまり17 を含む数字を考慮していますか?
-ETHproductions

確かにそうではなかった。修正されました。その問題は少し簡単すぎると思った:)
クリストファー後期

いいけど、まだ適格かどうかはわかりません。348現在の)後の数字はである必要がありますが7、これ7は言い表せない数字であるため、プログラムは3回目の反復を開始し、代わりにprintする必要があります1
-ETHproductions

2

Dyalog APL、39 バイト

{(⍵⍴⍨⍴i)@(i←⍸('7'∊¨⍕¨⍵)∨0=7|⍵)⊢⍵}⍣≡⍳7*7

⍳7*71 2 3 ... 7 7

{ }⍣≡ある固定小数点演算子-結果が安定するまで繰り返し関数を適用

A@I⊢B 修正作業を-インデックスにある要素を置き換えるIBしてA

0=7|⍵ 引数が7で割り切れる場所のビットマスク

'7'∊¨⍕¨⍵ 引数の10進形式に7が含まれるビットマスク

または

上記のビットマスクのいずれかが真であるインデックスは何ですか?

i← に割り当てます i

⍵⍴⍨⍴i 引数を次の要素の数に変更します i


これはいいね。mask7 * 7にビットマスクを掛けて、シーケンスのゼロを修正する不動点を取ると役立ちますか?
mschauer

2

C 157の 155バイト

int c[999999],r;main(_,p){if(_){p=--_;c[_]=1;for(;;){printf("%d ",c[_]);main(0,++_+1);c[_]=r?_+1:c[p++];}}else!p?r=1:p%7?p%10-7?main(0,p/10):(r=0):(r=0);}

それは正しいように見えます、私は完全にチェックすることを気にしませんでした。明らかに十分に大きい999999まで上昇します。

ゴルフされていないバージョン:

int cantor_n[1000000];

int cantor_n_safe(int x) {
    if (!x) return 1;
    if (x % 7 == 0) return 0;
    if (x % 10 == 7) return 0;
    return cantor_n_safe(x / 10);
}

int main(_, prev_index) {
    prev_index = --_;
    cantor_n[_] = 1;
    for(;;) {
        printf("%d ", cantor_n[_]);
        _++;
        if (!cantor_n_safe(_+1)) {
            cantor_n[_] = cantor_n[prev_index++];
        } else {
            cantor_n[_] = _+1;
        }
    }
    return 0;
}

部分ゴルフバージョン:

int c[999999];int r;
safe(x){ 
    !x?
        r=1:
        x%7?
            x%10-7?
                safe(x/10):
                (r=0):
            (r=0);
}

main(_){
    int p;
    p=--_;
    c[_]=1;
    for(;;){
        printf("%d ",c[_]);
        safe(++_+1);
        if (!r) {
            c[_]=c[p++];
        } else {
            c[_]=_+1;
        }
    }
}

中括弧が必要elseですか?
ザカリー

ありません、ありがとうございます。また、技術的には(r=0)ほとんどの場合、ブレースは必要ありません。しかし、いくつかのコンパイラはうるさいです。私はすぐに仕様を確認するのが面倒です。
ラムダベータ

2

R、86バイト

x=1;while(T<7^7){T=T+1;x[T]=if(!T%%7|7%in%el(strsplit(c(T,""),""))){F=F+1;x[F]}else T}

RのTruthyビルトインTTRUE/で初期化1)を使用してシーケンス内の数値をカウントし、Falsy値FFALSE/で初期化0)を使用して、話し言葉をカウントします。それ以外は、プログラムは、各数値が7で割り切れるかどうか、または数値が含まれているかどうかを単純にチェックします。


-4バイトが交換7%in%el(strsplit(c(T,""),""))によって55%in%utf8ToInt(paste(T))?(テストなし)
JayCe

2

C-115バイト

s[99],r;g(x){return x%10-7&&(!x||g(x/10));};f(i){(r=++s[i])%7&&g(r)||f(i+1);}main(){for(;;f(0),printf("%d\n",r));}

編集:私はいくつかのことを見逃したと指摘した@mschauerに感謝します。


いいアプローチ。2つの発言。r%10-7は末尾の7のみをキャプチャし、ヒープを破損しません。スタックの深さが多項式的に増加します... s [99]は安全です。
mschauer

2

Javascript、80バイト

n=[]
r=l=>(m=n[l]=++n[l]||1,!/7/.test(m)m%7?m:r(l+1))
for(;;)console.log(r(0))

最小要件のみがあり、最大要件はないため、このソリューションは無期限に出力し続けます。

アルゴリズムが正しいことを確認するには、最後の10個の数字と合計のみを出力する同じコードを実行できます。

n = []
r = l => (m = n[l] = ++n[l] || 1, !/7/.test(m) && m % 7 ? m : r(l + 1))
var tot = 0
for (i = 0; i + 1; i++) {
    v = r(0)
    tot += v
        if (i > Math.pow(7, 7) - 11) {
        console.log(v)
    }
    if (i === Math.pow(7, 7) - 1) {
        console.log(tot)
        break
    }
}



1

JavaScript 81バイト

オリジナル(98バイト)

for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,console.log(c)):console.log(i);

ゴルフ

p=console.log;for(c=0,i=1;i<9e5;i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);

サイトへようこそ!私はjavascriptについてあまり知りませんが、あなたは何かをすることができますp=console.log;for(c=0,i=1;i<=Math.pow(7,7);i++)/7/.test(i)||i%7==0?(6==c?c=1:c++,p(c)):p(i);か?
DJMcMayhem

@DrMcMoylex、ありがとうございます。まだ改善の余地があることを疑いません。
リチャードSime

お役に立てて嬉しいです!私はちょうど実現もう一つの事は、あなたができるある9e5代わりにMath.pow(7,7)課題が言っているので、:Print/output AT LEAST the first 7^7
DJMcMayhemは

うん、ナイスショットDoc!これにより、比較演算子から等号も削除できました。
リチャードSime

それは期待されることをしないようです。ギャップを埋めるときは、単にカウンターをリセットするのではなく、ルールを再度適用する必要があるようです(シーケンスのこの部分を参照してください:)34 1 36 **8** 38。しかし、それは価値がある何のために、現在のバージョンではいくつかのより多くのgolfedすることができますfor(c=i=0;++i<9e5;)console.log(!/7/.test(i)&&i%7?i:c++%6+1)
アーナルド

1

Befunge、100または156バイト

この最初のバージョンは、2つの移植性が高く、7ビットのメモリセルに制限されています。これは、リファレンスインタープリターで得られるものです。

"O":0>\#09#:p#-:#1_v<0$.< 
9\*"~"g9+1:+1::p00:<+3$_^#g01$$<v"~":/"~"p9g00%"~"::+1+g9\*"~"+g
:#15#+5#g+#0%#17#\-#/!#+\#5:#5_^>%00g1+9p"~"/00g2+9p::7%!10>>p#0

2番目のバージョンは、32ビットメモリセルを持つインタープリターでのみ動作するため、厳密には標準的なBefungeではありませんが、セル間で分割することなく、より大きな値をメモリに格納できます。

"O":0>\#09#:p#-:#1_v<0$.< 
%7::p9g00:+1g9:p00:<+1$_^#g01$$<v01!
:#15#+5#g+#0%#17#\-#/!#+\#5:#5_^>p#0

どちらの場合も、プログラムは無期限に実行されますが、最初のバージョンは200万マーク前後でオーバーフローし、2番目のバージョンは最大int値(約20億)に達するはずです。

あなたはできるオンラインそれを試してみてください、しかし、あなたは永遠に実行しようとしているから、それを防ぐために、プロセスを強制終了する必要があります。


1

Clojure、130バイト

#(let[R(range(inc %))](rest((reduce(fn[[r s]i](if(or(=(mod i 7)0)((set(str i))\7))[(assoc r i(r s))(inc s)][r s]))[(vec R)0]R)0)))

基本的な削減、結果ベクトルの内容とスキップされた値の数を追跡します。最後0[r s]restreduceの最初の要素を取り、0インデックスの結果の最初の要素をドロップします。



1

Tcl、64バイト

while 1 {puts [expr {[incr i]%7&&7ni[split $i ""]?$i:[incr s]}]}

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


いいね!私よりずっと短い…
hdrz

これは、「... 33 34 1 36 8 38 ...」の代わりに「... 33 34 7 36 8 38 ...」と書き込みます
-mschauer

@mschauer:OK、時間があるときに修正します
...-sergiol

@hdrz私はあなたの解決策を試してみましたが、それはmschauerが言ったのと同じ問題を持っています!
sergiol

1

JavaScript、64バイト

for(f=n=>!/7/.test(m=++n[0])*m%7?m:f(n.t=n.t||[0]);;)alert(f(f))

output=[];index=0;for(f=n=>!/7/.test(m=++n[0])*m%7?m:f(n.t=n.t||[0]);index<100;)output[index++]=f(f);console.log(output.join(','))


ps他のいくつかの(console.log)JavaScriptの回答と比較すると、70バイト
l4m2

1

Japt、25バイト

[]L³õ@pX%7«/7/tX ?X:UgV°

合計最後の10個の要素をテストします。

シーケンスの最初の1,000,000エントリを生成し、印刷します。7**7 == 823543Japtで最も短いのは100万です。

末尾の改行は、への暗黙的な割り当てをアクティブにするため、重要Uです。

リストの生成には1秒程度しかかかりませんが、配列全体を出力するとブラウザがハングする可能性があります。

開梱と仕組み

[]L³õX{UpX%7&&!/7/tX ?X:UgV++

[]                            Assign empty array to U
  L³õX{                       Map over 1 to 1,000,000 inclusive...
         X%7&&                  If X is not divisible by 7 and
              !/7/tX            X does not have a digit 7
                     ?X:UgV++   then X, otherwise the next element already in U
       Up                       Push it to the end of U

                              Implicit print U

すでに生成されたシーケンスを調べることにより、再帰的定義を解決できるプロパティを使用します。

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