Я спеціальний номер 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.