Я спеціальний номер N-боханця?


11

Послідовність N-бочанок, спочатку винайдена @DJMcMayhem у цьому питанні , є послідовністю, що формується, починаючи з цілих чисел 0 і 1, а потім додаючи попередні N числа для генерації наступного числа. Спеціальна послідовність N-боханців - це послідовність N-бочан, що починається з пари чисел, відмінних від 0 і 1, які будуть названі X і Y. Якщо N більше числа термінів, які вже є в послідовності, просто додайте всі наявні умови.

Так, наприклад, нормальна послідовність вирівнювання має N 2 (займає два попередні елементи), а X і Y 0 і 1, або 1 і 1, залежно від того, кого ви запитуєте.

Ваше завдання:

Ви повинні написати програму або функцію, яка перевіряє, чи введене ціле число (A) є частиною спеціальної послідовності N-bo bora, що генерується наступними трьома цілими числами (використовуючи другий вхід як N, а третій і четвертий як X і Y) . Переконайтеся, що ви обробляєте особливий випадок N = 1.

Вхід:

Чотири невід’ємні цілі числа, A, N, X і Y.

Вихід:

Корекційне / хибне значення, яке вказує, чи є A частиною послідовності N-боханок, породженої входами N, X та Y.

Випробування:

Input:    Output:
13,2,0,1->truthy
12,3,1,4->falsy
4,5,0,1-->truthy
8,1,8,9-->truthy
9,1,8,9-->truthy

12,5,0,1->falsy  [0,1]>[0,1,1]>[0,1,1,2]>[0,1,1,2,4]>[0,1,1,2,4,8]>[0,1,1,2,4,8,16]>etc.  

Оцінка:

Це , тому виграє найнижчий бал у байтах.


1
N==1такий дивний випадок.
Чарівний восьминога Урна

Так, але дивні випадки - це те, що робить це цікавим :)
Грифон

Якщо ви справді хочете, щоб відповіді вирішували справу N=1, ви можете зателефонувати в запитання, оскільки багато відповідей (включаючи всі поточні відповіді, я думаю) матимуть умову відмови, яка передбачає суворо зростаючий ряд. Також може бути Xі Yбути негативним? Це, ймовірно, також визнає недійсними всі відповіді.
apsillers

1
Я думаю, що всі існуючі відповіді не справляються із випадком, що збільшується, коли і X, і Y дорівнюють нулю. Чи потрібно також розбиратись із цією справою?
апспіллери

1
Я думаю, вам слід додати справжні випадки 8,1,8,9та 9,1,8,9переконатися, що N=1обробка справ визначає не повторне Xзначення, а також Yзначення. (Якщо ви хочете розглянути 0,0справи, то вам слід додати і це.)
apsillers

Відповіді:


5

Желе , 12 байт

ḣ⁴S;µṀ<⁵µ¿⁵e

Повна програма взяття [X,Y], N, A.

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

Як?

ḣ⁴S;µṀ<⁵µ¿⁵e - Main link (monadic): [X,Y]
    µ   µ¿   - while:
     Ṁ       -   maximum value of the list
       ⁵     -   5th command line argument (3rd input) = A
      <      -   less than?
             - ...do:
 ⁴           -   4th command line argument (2nd input) = N
ḣ            -   head (get the first N (or less) items from the list)
  S          -   sum
   ;         -   concatenate (add the result to the front of the list)
          ⁵  - 5th command line argument (3rd input) = A
           e - exists in the resulting list?

Відмінно. Здається, для мене це все одно працює. +1
Грифон

Щоб замість цього побачити зворотну послідовність N-боконів до значення, що перевищує або дорівнює A, просто видаліть ⁵eз кінця; набагато простіше сказати, що це буде працювати тоді (зазначивши, що порядок перших двох термінів не має жодного наслідку).
Джонатан Аллан

Спробував купу тестових справ, тож якщо хтось не знайде одного, він не вдається, зі мною це добре.
Грифон

5

05AB1E , 18 байт

[DR²£O©‚˜³®>‹#]³QZ

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


Використання: [X,Y], N, A


Я відчуваю, що якась ненавмисна функціональність зробила це складніше, ніж потрібно було.

Немає жодного більшого, ніж рівного, ніколи цього не помічав.

І не працювало, і потрібно ]+1 для байтів #]³.



3

Perl 6 , 47 байт

->\A,\N,\X,\Y{A∈(X,Y,{[+] @_.tail(N)}...*>A)}

перевірити його

Розширено:

->
  \A,
  \N,
  \X, \Y
{
    A          # is 「A」

              # an element of

    (          # this Sequence

      X, Y,        # seed values of sequence

      {            # generate the rest of the Seq using this code block

        [+]        # reduce by addition

          @_       # of all previously generated values
          .tail(N) # only use the last 「N」 of them
      }

      ...          # keep generating values until

      * > A        # it is greater than 「A」

    )
}


1

R , 69 60 байт

function(a,n,l){while(l<a)l=c(sum(l[1:n],na.rm=T),l)
a%in%l}

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

Повертає анонімну функцію, приймаючи a,nі вектор l=c(y,x). Побудовує послідовність N-боконів назад (тобто менший індекс знаходиться далі в послідовності), оскільки while(l<a)перевіряє лише перший елемент l.


1

Лист звичайний, 164 байти

(defun f(a n x y &aux(l(list y x)))(if(= n 1)(or(= a x)(= a y))(loop(if(<= a(car l))(return(member a l))(setf l(cons(reduce'+ l)(if(<(length l)n)l(butlast l))))))))

Ця функція повертається NILдля хибної, не-NIL для істинної (згідно з визначенням узагальненого булевого загального Lisp).

(defun f(a n x y &aux (l (list y x)))    ; initialize a list l for the N values
  (if (= n 1)                            ; special case for N = 1
      (or (= a x) (= a y))               ;    true only if A = X or A = Y
      (loop
        (if (<= a (car l))               ; when the last number generated is greater than A
            (return (member a l))        ; return true if A is in the list
            (setf l (cons (reduce '+ l)  ; otherwise compute the sum of l
                          (if (< (length l) n)   ; and push it to l (truncating the list at 
                              l                  ; end if it has already size = N)
                              (butlast l))))))))

Чи виконуєте ви спеціальні справи для N=1виявлення A, наприклад, 1і / або 2коли X=1 Y=2? Мої навички читання Ліппа не великі, але, схоже, ви можете порівняти лише Aодне з двох початкових значень.
apsillers

@apsillers, коли N = 1, я порівнюю A лише з X, а не з Y. чи слід порівнювати його з обома поверненими істинами, якщо він дорівнює одному з них? Може, послідовність недостатньо визначена для цього випадку?
Ренцо

Гаразд, тепер я бачу, що питання було змінено, я оновив свою відповідь.
Ренцо

0

k, 29 байт

{x=*(*x>){(x=#y)_y,+/y}[y]/z}

Спробуйте в Інтернеті! 1є правдою, 0є фальсією. Введення є [A;N;X,Y].


Я запускав це на всіх прикладах, які я бачив. 1 - триут, 0 - фальси.
згреп

@Gryphon Я перемістив вхід на колонтитул замість тіла, але я не впевнений, що ти хочеш, щоб я змінив. Це і є, і було однаковою функцією.
zgrep

О, я бачу зараз. Я думав, що ви не берете жодного внеску, але ви брали його в коді. Має набагато більше сенсу зараз. Я не знаю k, тому я припускав, що ви помилково трактували питання, тому що все, що він би робив, був вихід 1 0 1 1
Грифон


0

Математика, 94 байти

(s={#3,#4};t=1;While[t<#2-1,s~AppendTo~Tr@s;t++];!LinearRecurrence[1~Table~#2,s,#^2]~FreeQ~#)&


формат введення

[A, N, X, Y]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.