Найменший невидимий, але ніяких цифр для обміну немає!


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.
Shaggy

Чи не за замовчуванням правило, що ви не можете додати щось до мови після того, як поставлено запитання? Інакше було б банально просто завжди створювати новий вбудований модуль, який вирішує завдання, роблячи їх довільно короткими.
trlkly

@trlkly Я вважаю, що це дозволено в рамках хорошого рішення. Вбудований я додав набагато більш загального призначення, ніж тільки для цієї однієї відповіді. Я думаю, що хтось теоретично міг би додати вбудований модуль, який вирішує проблему цілком, але така відповідь, безумовно, буде отримана дуже погано.
ETHproductions


3

Хаскелл, 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між двома рядками (реалізовано a gу посиланні TIO).

Спробуйте в Інтернеті!



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

Математика 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.