Trình tự hàng xóm mới


24

Các số nguyên không âm chán vì luôn có hai * hàng xóm giống nhau, vì vậy họ quyết định trộn lẫn mọi thứ lên một chút. Tuy nhiên, họ cũng lười biếng và muốn ở gần nhất có thể với vị trí ban đầu của họ.

Họ đưa ra thuật toán sau:

  • Phần tử đầu tiên là 0.
  • Phần tử là số nhỏ nhất chưa có trong chuỗi và không phải là hàng xóm của phần tử .nth(n1)th

Điều này tạo ra chuỗi vô hạn sau:

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

0là yếu tố đầu tiên. 1là số nhỏ nhất chưa có trong chuỗi, nhưng nó là hàng xóm của 0. Số nhỏ nhất tiếp theo là 2, vì vậy nó là phần tử thứ hai của chuỗi. Bây giờ các số còn lại là 1,3,4,5,6,..., nhưng vì cả hai 13là hàng xóm của 2, 4là thành viên thứ ba của chuỗi. Vì 1không phải là hàng xóm của 4nó, cuối cùng nó có thể lấy vị trí là yếu tố thứ tư.

Nhiệm vụ

Viết hàm hoặc chương trình càng ít byte càng tốt để tạo chuỗi trên.

Bạn có thể

  • đầu ra chuỗi vô tận,
  • lấy một đầu vào và trả về phần tử của chuỗi, hoặcnnth
  • lấy n đầu vào và trả về n phần tử đầu tiên của chuỗi.

Cả hai chỉ số 0 hoặc một chỉ mục đều ổn trong trường hợp bạn chọn một trong hai tùy chọn sau.

Bạn không cần phải tuân theo thuật toán được đưa ra ở trên, bất kỳ phương pháp nào tạo ra cùng một chuỗi đều ổn.


Lấy cảm hứng từ Code golf hoán vị tốt nhất . Hóa ra đây là A277618 .
* Zero chỉ có một người hàng xóm và không thực sự quan tâm.


Câu trả lời:


18

JavaScript (ES6), 13 byte

Trả về số hạng thứ n của chuỗi.

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

Hãy thử trực tuyến!

Làm sao?

Điều này tính toán:

n-2+((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 ...


8

MathGolf , 5 byte

⌠5%+⌡

Hãy thử trực tuyến!

Một số đối xứng tốt đẹp ở đây. Trả về nthphần tử của chuỗi.

Giải trình:

⌠      Increment input by 2
 5%    Modulo by 5
   +   Add to copy of input
    ⌡  Decrement by 2





3

Pip , 14 byte

02413@a+a//5*5

nmộtnHãy thử trực tuyến!

mộtn+5= =mộtn+5 . Chúng tôi mã hóa năm giá trị đầu tiên và bù đắp từ đó.


Hoặc, công thức mà mọi người đang sử dụng, cho 12 byte :

a-2+(a+2)%5


2

Japt , 8 byte

U-2Ò°U%5

Phiên dịch viên Japt

Một cổng thẳng của câu trả lời Javascript của Arnauld. Phiên bản được liên kết chạy qua n phần tử đầu tiên, nhưng nếu-m cờ bị xóa thì nó vẫn hợp lệ và in phần tử thứ n thay thế.

Để so sánh, đây là phiên bản ngây thơ thực hiện thuật toán được cung cấp trong câu hỏi:

@_aX É«NøZ}a}gNhT

Tôi sẽ đưa ra một lời giải thích cho điều này:

              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 byte trên giải pháp thứ hai của bạn và có thể được cải thiện hơn nữa.
Xù xì




2

J , 30 byte

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

Hãy thử trực tuyến!

Trả về danh sách đầu tiên n số

Giải pháp này rõ ràng là không cạnh tranh, nhưng tôi muốn thử một phương pháp dựa trên mảng.

Giải trình:

Đối số là n

2 ,] - nối 2 vào đầu vào

   (2,~]) 10
10 2

()@ - và sử dụng danh sách này để:

i.- tạo ma trận nx 2 với các số trong phạm vi 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$~]- ~đảo ngược các đối số, vì vậy nó là] $ 4 0 - tạo ma trận nx 2 lặp lại 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

- trừ ma trận thứ hai khỏi ma trận thứ nhất, để cột thứ nhất bị "trì hoãn" với 2 vị trí

   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,./\ đi qua ma trận trong các nhóm không chồng chéo gồm 5 hàng và khâu các cột

   _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

[:, ravel toàn bộ mảng

   ,_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}. - bỏ 2 số đầu tiên

   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

{.lấy nsố đầu tiên

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

J , 9 byte

+_2+5|2+]

Hãy thử trực tuyến!

Trả về nphần tử thứ.

Câu trả lời của cảng Arnauld




1

mã máy x86, 16 byte

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

Hội,, tổ hợp:

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

Hãy thử trực tuyến!



1

Excel, 17 byte

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

Không có gì thông minh. Thực hiện các công thức phổ biến.



1

QBasic, 30 byte

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

Cung cấp mục nhập 0 chỉ mục của danh sách tại pos x.

Hãy thử trực tuyến! (Lưu ý rằng ?đã được mở rộng thành PRINTvì trình thông dịch không thành công ...)



1

R , 25 byte

n=1:scan()-1;n-2+(n+2)%%5

Hãy thử trực tuyến!

Câu trả lời của cảng Robert S. (và chỉ bằng cách thêm 4 byte) nhờ R rất xuất sắc trong việc xử lý các vectơ.

Xuất ra các giá trị n đầu tiên.


1

dc , 9 byte

d2+5%+2-p

Hãy thử trực tuyến!

Phương pháp tương tự như hầu hết. Sao chép top-of-stack, thêm 2, mod 5, thêm vào bản gốc (sao chép trước đó), trừ 2, in.


0

TI-BASIC, 11 byte

Ans-2+remainder(Ans+2,5

Đầu vào là trong Ans.
Đầu ramột(n).

Một cổng đơn giản của các câu trả lời khác.


Lưu ý: TI-BASIC là ngôn ngữ được mã hóa. Số lượng ký tự không bằng số byte.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.