Нова послідовність сусідів


24

Ненегативні цілі числа нудьгують завжди мати однакових двох * сусідів, тому вони вирішують трохи змішати речі. Однак вони також ліниві і хочуть якомога ближче до свого початкового положення.

Вони придумують такий алгоритм:

  • Перший елемент дорівнює 0.
  • Елемент - це найменше число, яке ще немає в послідовності і яке не є сусідом елемента .nth(n1)th

Це породжує таку нескінченну послідовність:

0,2,4,1,3,5,7,9,6,8,10,12,14,11,13,15,17,19,16,18,20,22,24,21,23,25,27,29,26,28 ...

0є першим елементом. 1- це найменше число, яке ще не є в послідовності, але воно є сусідом 0. Наступне найменше число - 2значить, це другий елемент послідовності. Тепер інші числа є 1,3,4,5,6,..., але як обидва, так 1і 3сусіди 2, 4є третім членом послідовності. Оскільки 1не є сусідом 4, він, нарешті, може зайняти своє місце як четвертий елемент.

Завдання

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

Ви можете

  • виводити послідовність нескінченно,
  • взяти вхід і повернути елемент послідовності, абоnnth
  • взяти вхід і повернути перші елементів послідовності.nn

І нульова, або одна індексація чудово, якщо ви виберете один із двох останніх варіантів.

Вам не потрібно дотримуватися алгоритму, наведеного вище, будь-який метод, який створює ту саму послідовність, чудово.


Натхненний Code golf найкращою перестановкою . Виявляється, це A277618 .
* Нуль має буквально лише одного сусіда і насправді не хвилює.


Відповіді:


18

JavaScript (ES6), 13 байт

Повертає й член послідовності.n

n=>n-2-~++n%5

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

Як?

Це обчислює:

n2+((n+2)mod5)

           n |  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 ...
-------------+--------------------------------------------------
       n - 2 | -2 -1  0  1  2  3  4  5  6  7  8  9 10 11 12 ...
 (n+2) mod 5 |  2  3  4  0  1  2  3  4  0  1  2  3  4  0  1 ...
-------------+--------------------------------------------------
         sum |  0  2  4  1  3  5  7  9  6  8 10 12 14 11 13 ...







3

Піп , 14 байт

02413@a+a//5*5

Приймає (на основі 0) як аргумент командного рядка та виводить . Спробуйте в Інтернеті!nan

Зауважте, що . Ми жорстко кодуємо перші п’ять значень і зсуваємо звідти.an+5=an+5


Або формула, якою користуються всі, на 12 байт :

a-2+(a+2)%5


2

Japt , 8 байт

U-2Ò°U%5

Перекладач Japt

Прямий порт відповіді Ярнауля Арнольда. Пов'язана версія проходить через перші n елементів, але якщо -mпрапор буде знято, він все-таки є дійсним і друкує натомість n-й елемент.

Для порівняння, ось наївна версія, яка реалізує алгоритм, наведений у питанні:

@_aX É«NøZ}a}gNhT

Я дам пояснення цьому:

              NhT    Set N to [0]
@           }g       Get the nth element of N by filling each index with:
 _        }a          The first integer that satisfies:
  aX É                 It is not a neighbor to the previous element
      «NøZ             And it is not already in N

-3 байти у вашому другому рішенні, і, ймовірно, може бути вдосконалено далі.
Кудлатий




2

J , 30 байт

{.2}.[:,_5,./\2(i.-4 0$~])@,~]

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

Повертає список перших nчисел

Це рішення, очевидно, не конкурує, але я хотів спробувати метод на основі масиву.

Пояснення:

Аргумент є n

2 ,] - додайте 2 до входу

   (2,~]) 10
10 2

()@ - і використовувати цей список для:

i.- створити матрицю nx 2 з числами в діапазоні 0..2n-1:

   i.10 2
 0  1
 2  3
 4  5
 6  7
 8  9
10 11
12 13
14 15
16 17
18 19

4 0$~]- ~обертає аргументи, так це] $ 4 0 - створює матрицю nx 2, повторюючи 4 0

   4 0$~10 2
4 0
4 0
4 0
4 0
4 0
4 0
4 0
4 0
4 0
4 0

- відняти другу матрицю від першої, так що перший стовпець "затримається" на 2 позиції

   2(i.-4 0$~])@,~] 10
_4  1
_2  3
 0  5
 2  7
 4  9
 6 11
 8 13
10 15
12 17
14 19

_5,./\ прокладіть матрицю групами, що не перекриваються, по 5 рядків і прошийте стовпчики

   _5,./\2(i.-4 0$~])@,~] 10
_4 _2  0  2  4
 1  3  5  7  9

 6  8 10 12 14
11 13 15 17 19

[:, роз'їхати весь масив

   ,_5,./\2(i.-4 0$~])@,~] 10
_4 _2 0 2 4 1 3 5 7 9 6 8 10 12 14 11 13 15 17 19

2}. - скиньте перші 2 числа

   2}.,_5,./\2(i.-4 0$~])@,~] 10
0 2 4 1 3 5 7 9 6 8 10 12 14 11 13 15 17 19

{.візьміть перші nчисла

   ({.2}.[:,_5,./\2(i.-4 0$~])@,~]) 10
0 2 4 1 3 5 7 9 6 8

J , 9 байт

+_2+5|2+]

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

Повертає nелемент th.

Відповідь порту Арнольда




1

машинний код x86, 16 байт

00000000: 31d2 89c8 4949 4040 b305 f7f3 9201 c8c3 1...II@@........

Збірка:

section .text
	global func
func:	;function uses fastcall conventions, 1st arg in ecx, returns in eax
	;reset edx to 0 so division works
	xor edx, edx

	mov eax, ecx
	;calculate ecx (1st func arg) - 2
	dec ecx
	dec ecx

	;calculate (ecx+2) mod 5
	inc eax
	inc eax
	mov bl, 5
	div ebx
	xchg eax, edx
	
	;add (ecx-2) and ((ecx+2) mod 5), returning in eax
	add eax, ecx
	ret

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



1

Excel, 17 байт

=A1-2+MOD(A1+2,5)

Нічого розумного. Реалізує загальну формулу.



1

QBasic, 30 байт

INPUT x 
x=x+2 
?-4+x*2-(x\5)*5

Позначає 0-індексований запис списку за поз x.

Спробуйте в Інтернеті! (Зауважте, що це ?було розширено, PRINTоскільки інтерпретатор не працює в іншому випадку ...)





0

TI-BASIC, 11 байт

Ans-2+remainder(Ans+2,5

Ans
a(n)

Простий порт інших відповідей.


Примітка: TI-BASIC - це токенізована мова. Кількість символів не дорівнює кількості байтів.

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