N verildiğinde, ['A', 'B', 'AB', 'C', 'D', 'CD', 'ABCD', 'E',…] 'nin n.


12

Aşağıdaki listeyi düşünün:

expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]

İşte bakmanın bir yolu - Çince karakterleri nasıl yazacağınızı öğreniyorsunuz ve gittikçe artan büyük parçalarını öğrenmek, gittikçe prova yapmak istiyorsunuz. A ile başlarsınız, sonra B ile devam edersiniz, o zaman zaten iki çift olan bir dizi vardır, böylece birleştirirsiniz. Sonra C ve D ile devam et, başka bir çift yap, pratik yap. Sonra prova yapıyorsun: ABCD. Aynı şey E ile H'ye kadar gider, sonra prova yapın: ABCDEFGH. Liste sonsuzdur.

Amaç, bu listenin n'inci bir elemanını oluşturmak ve yazdırmaktır. 'Z' den sonra tekrar 'A' aldığını varsayın.

Kazanan kriterler kaynak kod uzunluğudur.


3
Olduğunda emin değilim, bunu elde BCya CDEF? Neyi birleştirdiğimize ve neyi bitirmediğimize ne karar verir? Nasıl bu kampanyanın en başlarsa sonsuz olduğunu Asonra tekrar Z(sonra bir noktada anlamına ABCDEFGHIJKLMNOPQRSTUVWXZelimizdeki ABCDEFGHIJKLMNOPQRSTUVWXZABşey ya?)
Jonathan Allan

5
Etrafında saran harfler için test durumu takdir edilmektedir ( x,y,z,a,b...).
Stewie Griffin

7
Meydan okumanızı geliştirmek için gelecekte Sandbox'ı kullanmanızı kesinlikle öneririz . Orada, meydan okumanın ana PPCG sitesi için uygun olduğundan emin olmak için diğer kullanıcılardan geri bildirim alacaksınız! Şahsen, Sandbox'ta en az 2 gün boyunca bir görev bırakacağım, böylece herkesin gönderiyi görme şansı var.
JungHwan Min

2
@JungHwanMin: listeyi sonsuz yazdırmak için sorun değil. Tamsayıların listesini döndürerek geçirdim.
d33tah

4
"Tamsayıların listesini döndürerek geçirdim" ne anlama geliyor? Bir tamsayı listesinin çıktısı kabul edilebilir mi? Eğer öyleyse, "Z" den sonra tekrar "A" alırsınız "diyelim - bu çıktı biçiminde durum böyle olmalı (i + 25'ten sonra tekrar i alıyoruz)? (Ayrıca yazıyı ilgili bilgilerle güncelleyin - yorumlarda belirtilmesi için şartname bırakmayın.)
Jonathan Allan

Yanıtlar:


8

Python 2, 53 bayt

x,y=0,1
exec"x^=y-x;y+=x/y;"*input()
print range(x,y)

Çevrimiçi deneyin!

Dönüşümle bu yapıya benzer şekilde x = u-v,y = u


Ne güzel bir sadeleştirme! İlk ifade x^=y-x-1 bayt olabilir.
xnor

@xnor oh doğru, saçma bana
KSab

6

JavaScript (ES6), 59 bayt

Diziyi 1 dizinli hale getirerek ve KSab tarafından kullanılana benzer bir basitleştirme kullanarak 2 bayt kaydedebiliriz :

n=>(x=g=y=>n?g(y+=y==(x^=y-x),n--):x<y?[x++,...g(y)]:[])(1)

Çevrimiçi deneyin!


JavaScript (ES6), 61 bayt

Kaydırmayan tam sayıların bir listesini döndürür.

n=>(g=v=>n?g(u&-u^v?v*2:!!u++,n--):v?[u-v,...g(v-1)]:[])(u=1)

Çevrimiçi deneyin!

Donald Knuth'un yapımına dayanıyor. İlgili OEIS girişi: A182105 .

Nasıl?

Bu iki aşamalı özyinelemeli bir işlevdir.

(un,vn)(u1,v1)=(1,1)

(un+1,vn+1)={(un+1,1),if (unANDun)=vn(un,2vn),otherwise

[unvn,unvn+1,,un]


JavaScript (ES6), 97 bayt

Büyük harflerin sarılmasını döndürür.

n=>(s=i='',g=v=>(s+=String.fromCharCode(65+i++%26),n--)?g(u&-u^v?v*2:!!u++):s.substr(u-v,v))(u=1)

Çevrimiçi deneyin!

Veya 91 baytlık küçük harf.





1

Jöle , 16 bayt

1;ẎṀ+ƊẎQṭƊƊ¡ị@‘Ṿ

13

Tam program. Baskılar ,tamsayılar listesini -separated.


1

Kömür , 45 42 35 bayt

FN⊞υ⎇∧›Lυ¹⁼L§υ±¹L§υ±²⁺⊟υ⊟υ§αL⭆υκ⮌⊟υ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. 1 endeksli. Sonucu oluşturmak için basit bir formül bulamadım, bu yüzden soruda verilen prosedürü takip ettim. Açıklama:

FN

Verilen sayıyı ntekrarlayın.

⊞υ

Sonraki öğeyi u, şu şekilde hesaplanan önceden tanımlanmış boş diziye ...

⎇∧›Lυ¹⁼L§υ±¹L§υ±²

... içinde birden fazla eleman varsa uve son iki eleman aynı uzunlukta ise ...

⁺⊟υ⊟υ

... sondan bir önceki öğeyi son öğeye ekle (sonucu ters sırada oluşturur) ...

§αL⭆υκ

... yoksa bir sonraki harf, şimdiye kadar kaç harf eklediğimizi sayarak ve döngüsel olarak önceden tanımlanmış büyük harf alfabe dizinini oluşturarak bulunabilir. (Toplam veya uzunluk uzunluğunun toplamı, liste boş olduğunda başarısız olur ve listeyi bir dizeye eşlemek, boş bir listenin özel kasasına iki bayt kazandırır.)

⮌⊟υ

İstenen listenin utersi olan son öğesi olan son öğesini alın ve ntersini dolaylı olarak yazdırın.

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.