Yeni Komşu Dizisi


24

Negatif olmayan tamsayılar her zaman aynı iki komşuya sahip olmaktan sıkılır, bu yüzden işleri biraz karıştırmaya karar verirler. Ancak, aynı zamanda tembeller ve orijinal konumlarına olabildiğince yakın kalmak istiyorlar.

Aşağıdaki algoritmayı buldular:

  • İlk eleman 0'dır.
  • elemanı henüz dizisinde mevcut değildir ve bir komşu olmadığı en küçük sayıdır elemanı.nth(n1)th

Bu, aşağıdaki sonsuz diziyi oluşturur:

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

0ilk öğedir. 1sıradaki henüz olmayan en küçük sayıdır, ancak bir komşudur 0. Bir sonraki en küçük sayıdır 2, yani dizinin ikinci elemanıdır. Şimdi kalan sayılardır 1,3,4,5,6,..., ancak her iki yanı 1ve 3sınır komşusu olmaları 2, 4dizinin üçüncü üyesidir. Gibi 1bir komşu değil 4, sonunda dördüncü unsur olarak yerini alabilir.

Görev

Yukarıdaki sırayı üreten, mümkün olduğu kadar az baytta bir işlev veya program yazın.

Yapabilirsin

  • diziyi sonsuza kadar çıkar,
  • Bir giriş almak ve dönüş dizisinin elemanı ya dannth
  • bir girişi alın ve dizinin ilk elemanlarını döndürün.nn

İki seçenekden birini seçmeniz durumunda, hem sıfır hem de bir dizin oluşturma iyidir.

Yukarıda verilen algoritmayı takip etmeniz gerekmez, aynı diziyi üreten herhangi bir yöntem iyidir.


Esinlenerek Kod golf iyi permütasyon . Bunun A277618 olduğu ortaya çıktı .
* Zero kelimenin tam anlamıyla sadece bir komşusu var ve gerçekten umursamıyor.


Yanıtlar:


18

JavaScript (ES6), 13 bayt

İade inci dizisinin terimi.n

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

Çevrimiçi deneyin!

Nasıl?

Bu hesaplar:

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


8

MathGolf , 5 bayt

⌠5%+⌡

Çevrimiçi deneyin!

Burada güzel bir simetri var. nthDizinin elemanını döndürür .

Açıklama:

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

6

Jöle , 5 bayt

æ%2.+

Çevrimiçi deneyin!

Git gadget yerleşik yerleşik git!

æ%2.      Symmetric modulo 5: map [0,1,2,3,4,5,6,7,8,9] to [0,1,2,-2,-1,0,1,2,-2,-1]
    +     Add to input




3

Pip , 14 bayt

02413@a+a//5*5

Alır komut satırı bağımsız ve çıkışları (0 bazlı) . Çevrimiçi deneyin!nan

olduğuna dikkat edin . İlk beş değeri zorluyoruz ve oradan dengeliyoruz.an+5=an+5


Veya, herkesin kullandığı formül, 12 bayt için :

a-2+(a+2)%5

2

Ortak Lisp , 67 bayt

(defun x(n)(loop for a from 0 to n collect(+(mod(+ a 2)5)(- a 2))))

Çevrimiçi deneyin!


Bence, sadece yeter (defun x(n)(+(mod(+ n 2)5)(- n 2)))veya (lambda(n)(+(mod(+ n 2)5)(- n 2)))yeter: terimler dizisinden ziyade n. Terimin döndürülmesi.
Misha Lavrov

2

Japt , 8 bayt

U-2Ò°U%5

Japt Tercüman

Arnauld'un Javascript cevabının düz bir limanı. Bağlantılı sürüm ilk n öğesinden geçer, ancak -mbayrak kaldırılırsa yine de geçerlidir ve bunun yerine nth öğesini yazdırır.

Karşılaştırma aşkına, burada söz konusu sağlanan algoritma uygulayan naif versiyonu:

@_aX É«NøZ}a}gNhT

Bunun için bir açıklama yapacağım:

              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

İkinci çözümünüzde -3 bayt bulunur ve muhtemelen daha da geliştirilebilir.
Shaggy,




2

J , 30 bayt

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

Çevrimiçi deneyin!

İlk nnumaraların listesini döndürür

Bu çözüm açıkça rekabet dışı, ancak dizi tabanlı bir yöntem denemek istedim.

Açıklama:

Argüman n

2 ,] - Girdiye 2 ekleyin

   (2,~]) 10
10 2

()@ - ve bu listeyi şunları yapmak için kullanın:

i.- nsayıları 0..2n-1 aralığında olan bir x 2 matrisi oluşturun :

   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$~]- ~Argümanları tersine çevirir, bu yüzden] 4 $ 0 - matris nx 2 tekrarlayan 0 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

- ikinci matrisi birinciden çıkarın, böylece ilk sütun 2 pozisyon ile "geciktirilir"

   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,./\ üst üste binmeyen 5 satırlık gruplarda matrisi kaydırın ve sütunları dikin

   _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

[:, tüm diziyi kaldırmak

   ,_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}. - ilk 2 sayıyı düşür

   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

{.ilk nnumaraları al

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

J , 9 bayt

+_2+5|2+]

Çevrimiçi deneyin!

nTh öğesini döndürür .

Arnauld Limanı'nın cevabı




1

x86 makine kodu, 16 bayt

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

Montaj:

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

Çevrimiçi deneyin!



1

Excel, 17 bayt

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

Akıllıca bir şey değil. Ortak formülü uygular.



1

QBasic, 30 bayt

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

Listenin 0 dizinli girişini pos konumunda verir x.

Çevrimiçi deneyin! ( Tercümanın aksi durumda başarısız olduğu için ?genişletildiğini unutmayın PRINT...



1

R , 25 bayt

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

Çevrimiçi deneyin!

Robert S. Limanı'nın cevabı (ve sadece 4 byte ekleyerek) R, vektörlerin işlenmesinde mükemmeldir.

İlk n değerini verir.


1

dc , 9 bayt

d2+5%+2-p

Çevrimiçi deneyin!

Çoğu ile aynı yöntem. Yığın üstünü çoğalt, 2, mod 5 ekle, orijinaline ekle (daha önce çoğaltılmış), 2'yi çıkar, yazdır.


0

TI-BASIC, 11 bayt

Ans-2+remainder(Ans+2,5

Ans
a(n)

Diğer cevapların basit bir portu.


Not: TI-BASIC belirtilmiş bir dildir. Karakter sayısı bayt sayısına eşit değil .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.