Самый маленький невидимый, но без обмена цифрами!


28

Вызов

Здесь, в PPCG, нам действительно нравятся наши последовательности, так что вот еще один интересный .

Давайте определим , a(n)как наименьшее неотрицательное целое число X, которое не равно ни a(k)( 0 < k < n), а также a(n-1)и Xне имеют общих десятичных цифр.a(0) = 0

Учитывая вход n > 0, выход такой a(n).

Например, для ввода n = 13у нас есть a(13) = 20, так как a(12) = 11и 20является наименьшим неотрицательным целым числом, которое мы еще не видели, с которым не делятся никакие десятичные цифры 11.

Последовательность

Вот первые 20 условий, чтобы вы начали. Это последовательность A067581 в OEIS.

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

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


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

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

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


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