Giriş
Tabii ki, birçok dizi zorluğumuz var, işte bir tane daha.
Kimberling dizisi ( A007063 ) aşağıdaki gibidir:
1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28, 22, ...
Bu, normal yinelemenin karıştırılmasıyla üretilir:
[1] 2 3 4 5 6 7 8
Dizinin ilk terimi 1
. Bundan sonra, soldaki tüm terimler kullanılana kadar diziyi yeniden karıştırırız. Karıştırmanın deseni vardır right - left - right - left - ...
. Solunda terim 1
bulunmadığından, karıştırma yoktur. Aşağıdakileri alıyoruz:
2 [3] 4 5 6 7 8 9
İ On inci yineleme, biz i atmak inci madde ve sırayla koymak. Bu 2. iterasyon, bu yüzden 2. maddeyi atıyoruz . Dizisi gibi olur: 1, 3
. Bir sonraki yinelememiz için, mevcut yinelemeyi yukarıdaki desenle karıştıracağız. İlk kullanılmamış öğeyi i . Öğenin sağında alırız . Bu olur 4
. Bunu yeni yinelememize ekleyeceğiz:
4
Şimdi ben sol tarafındaki ilk kullanılmayan öğeyi almaya gidiyoruz inci öğe. Bu 2
. Bunu yeni yinelememize ekleyeceğiz:
4 2
İ solunda sol hiçbir öğe olduğundan inci öğe, yaparız yeni yinelemesiyle dizisinin sadece ekleme kalanı:
4 2 [5] 6 7 8 9 10 11 ...
Bu bizim 3. yinelememiz, bu yüzden 3. öğeyi atacağız, yani 5
. Bu, dizimizdeki üçüncü öğedir:
1, 3, 5
Bir sonraki yinelemeyi elde etmek için işlemi tekrarlayın. Net değilse bir gif yaptım:
GIF gerçek gönderiyi yazmaktan daha uzun sürdü
Görev
- Negatif olmayan bir tamsayı n verildiğinde , dizinin ilk n terimini çıktılar
- Bir işlev veya program sağlayabilirsiniz
- Bu kod golf , bu yüzden en az bayt ile gönderme kazanır!
Test senaryoları:
Input: 4
Output: 1, 3, 5, 4
Input: 8
Output: 1, 3, 5, 4, 10, 7, 15, 8
Input: 15
Output: 1, 3, 5, 4, 10, 7, 15, 8, 20, 9, 18, 24, 31, 14, 28
Not: Çıktıdaki virgüller gerekli değildir. Örneğin, yeni satırlar kullanabilir veya bir liste vb. Çıktı alabilirsiniz.