Невероятные числа Кантора


58

Невыразимое число - это число, которое делится на семь или имеет семь в качестве одной из своих цифр. Детская игра состоит в том, чтобы считать пропущенные невероятные цифры

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

Канторская версия игры - это последовательность, определяемая путем рекурсивного заполнения последовательности «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 ...

Напечатайте / выведите хотя бы первые 7 ^ 7 чисел невероятной числовой игры Кантора ...

Хотя определение дается рекурсивно, вы не обязаны использовать рекурсию в коде.

Это , поэтому выигрывает программа с самым коротким числом байтов!

Примечание. Сумма чисел от 1 до 7 ^ 7 равна 203511962727. Последние 10 чисел в этом диапазоне: 823534 823535 221563 108068 823538 823539 823540 823541 823542 221565.

Дамп Pastebin первых 1000 итераций: http://pastebin.com/Ksiu9Svf


8
Пожалуйста, предоставьте первые 7 ^ 7 номеров этой последовательности, чтобы мы могли проверить наши решения.
flawr


2
В случае , если кто -то хочет создать еще несколько цифр и сравнить результаты: сумма первых 7 ^ 77 чисел в последовательности 3336402440238885119980169136020683586413168645292341926482898521634332654984279162327502549917668322950744929983987545341421076028
Никлас B.

Конечно, число 1 в этой последовательности равно 22977, что означает, что если вы случайно выберете элемент из первых 7 ^ 77 равномерно, у вас есть шанс 2 * 10 ^ -61, что он равен 1
Никлас Б.

1
Если вам интересно, вот график, показывающий рост числа повторяющихся: drive.google.com/file/d/0B71iQwGfNtw5NGladjdOZVhoNkk/…
Никлас Б.

Ответы:


6

Pyth , 25 23 22 байта

Спасибо @Maltysen за -2 байта

.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 байта . Это работает, потому что 7это простое число, поэтому делимость можно сделать с помощью проверки простой факторизации, которая хорошо согласуется с другой проверкой
Maltysen

Вы можете опубликовать его, основная его часть
Maltysen

1
Поздравляем с победой в этом конкурсе. Мне также нравится трюк @Maltysen!
mschauer

23

Python 2, 77 75 74 70 байт

Благодаря @MartinEnder за предположение , предел 9e5которого Ende г 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 nможет быть немного быстрее (то же самое количество байтов), так n%7<1как быстрее, чем проверка строки, и orимеет короткое замыкание. Жаль, что yield[n,next(i)][n%7<1or'7'in`n`]это не сработает.
mbomb007

@ mbomb007 Я не думаю, что скорость - это проблема, но спасибо. :)
PurkkaKoodari

10

Perl, 47 46 41 39 байт

Сохранено 5 байтов благодаря @Dada

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 байта, если я не ошибаюсь.
Дада

@ Дада на самом деле, поскольку это избавляет меня от необходимости присваивать $_, это экономит мне 5 байтов. Спасибо!
Габриэль Бенами

1
О, действительно, я только что бросил быстрый взгляд и не заметил это назначение в середине .. хорошая работа :)
Дада

Именно в этот момент (и только в этот момент!) Я понял утверждение: «Perl может быть языком только для записи».
Haneefmubarak

@ Грими, пожалуйста, не редактируйте чужой код. Если вы хотите улучшить ответ, добавьте комментарий, включая улучшение, или оставьте свой ответ. Поскольку вы, вероятно, не достигнете ФП с помощью комментария, просто оставьте свой собственный ответ.
овс

5

PHP, 80 (Wahooka) 57 54 байта

В то время как идея от Wahooka. Я думаю, что моя версия достаточно отличается, чтобы сделать ее собственным ответом:

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.

Редактировать: -1 байт благодаря @BMO.


4

MATL , 26 25 байт

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

Попробуйте онлайн! с 9e5заменой на 9e4, так что максимальное время работы и выходной размер онлайн-компилятора не превышены.

Как это устроено

Это использует итерацию вместо рекурсии. (На самом деле у MATL нет рекурсии).

Сначала создается массив чисел от 1до 9e5(этого достаточно, потому что он 9e5превосходит 7^7). Тогда число, кратные 7или имеют , 7как цифры будут определены, и заменены 1, 2... Процесс повторяется до тех пор, пока нет числа , которые должны быть заменены.

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}}

Ungolfed:

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предполагает первой итерации приращение в новой переменной от 0до , 1если эта переменная не была установлена ранее; так что вы можете избавиться от первых двух setинструкций.
sergiol

Гольф от меня - я также удалил ненужные пробелы.
Сергиол

Сайт, на котором я разместил свои предложения по игре в гольф, потерял их, поэтому я сделал свой новый ответ
sergiol

3

PHP, 106 80 байт

Спасибо Измаилу Мигелю за помощь в решении троичного кода и использовании более короткого кода цикла вместо вместо while.

Не удалось проверить последние части полной последовательности из-за 30-секундного максимального времени выполнения PhpFiddle. Кажется, работает по крайней мере до 1K на основе образца вывода, предоставленного OP.

Гольф:

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 байтов. Попробуйте и посмотрите, работает ли это.
Исмаэль Мигель

Очень приятно, спасибо за помощь. Единственная модификация вашего кода заключалась в том, чтобы поместить первые 7 в кавычки, которые добавили два байта к вашей 78-байтовой версии.
Вахука

Вы можете сохранить 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.
Crypto

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..*}

Попробуй

Expanded:

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

Конечно, нет. Исправлено сейчас. Думал, что проблема была немного слишком легкой :)
Кристофер Лэйтс

Хорошо, но я не уверен, что это еще подходит. Номер после 34(который в 8настоящее время) должен быть 7, но поскольку 7это невыразимое число, программа должна начать третью итерацию и вместо этого печатать 1.
ETHproductions

2

Дьялог АПЛ , 39 байт

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

⍳7*7это 1 2 3 ... 7 7

{ }⍣≡является оператором с фиксированной запятой - применяйте функцию несколько раз, пока результат не стабилизируется

A@I⊢B изменить оператор - заменить на индексы элементов Iв BсA

0=7|⍵ битовая маска для того, где аргумент делится на 7

'7'∊¨⍕¨⍵ битовая маска, для которой десятичное форматирование аргумента содержит 7

или же

по каким показателям верна любая из вышеперечисленных битовых масок?

i← назначить на i

⍵⍴⍨⍴i изменить аргумент на количество элементов в i


Это приятно. Поможет ли вам умножить ly7 * 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)большинстве случаев. Но некоторые компиляторы придирчивы. Мне лень проверять спецификации прямо сейчас.
LambdaBeta

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 Истину T(инициализированную в TRUE/ 1) для подсчета чисел в последовательности и значение Falsy F(инициализированное в FALSE/ 0) для подсчета невыразимых. Кроме того, программа просто проверяет, делится ли каждое число на семь или содержит число.


Замена 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, который указал, что я пропустил некоторые вещи.


Хороший подход. Два замечания. r% 10-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
    }
}

Синтаксическая ошибка: отсутствует) в скобках
l4m2


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);

Golfed

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, который сбросил еще несколько байтов. Я не сомневаюсь, что еще есть возможности для улучшения.
Ричард Симе

Рад, что смог помочь! Еще одна вещь, которую я только что понял, это то, что вы могли бы сделать 9e5вместо этого Math.pow(7,7), так как в Print/output AT LEAST the first 7^7
задании

Да, хороший снимок Док! Это позволило мне также удалить операторы равенства.
Ричард Симе

Кажется, он не делает то, что ожидается. При заполнении пробелов, вам, видимо, придется снова применять правила, а не просто сбрасывать счетчик (см. Эту часть последовательности:) 34 1 36 **8** 38. Но что бы это ни стоило, текущая версия может быть добавлена ​​в игру еще for(c=i=0;++i<9e5;)console.log(!/7/.test(i)&&i%7?i:c++%6+1).
Арно

1

Befunge, 100 или 156 байт

Эта первая версия является более переносимой из двух, ограничивая себя 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

Вторая версия работает только с интерпретаторами, которые имеют 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

В обоих случаях программа работает неопределенно долго, но первая версия будет переполнена около отметки 2 миллиона, а вторая версия должна получить максимальное значение int (около 2 миллиардов).

Вы можете попробовать это онлайн , но вам нужно будет остановить процесс, чтобы он не пытался работать вечно.


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], restудаляет первый элемент 0-индексированного результата.



1

Tcl , 64 байта

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

Попробуйте онлайн!


отлично! намного короче моего…
hdrz

Это пишет "... 33 34 7 36 8 38 ..." вместо "... 33 34 1 36 8 38 ..."
mschauer

@mschauer: Хорошо, я исправлю это, когда у меня будет время ...
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 == 823543в Япте.

Конечный символ новой строки важен, так как он активирует неявное присваивание U.

Создание списка занимает всего около секунды, но вывод всего массива, вероятно, приведет к зависанию вашего браузера.

Распаковано и как это работает

[]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

Использует свойство, что рекурсивное определение может быть разрешено путем просмотра уже сгенерированной последовательности.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.