Sayılarla dolanırken, sayılar listesinden oluşturabileceğiniz ilginç bir permütasyon buldum. Bu aynı izinleri yeterince tekrarlarsanız, daima orijinal diziye geri dönersiniz. Aşağıdaki listeyi kullanalım:
[1, 2, 3, 4, 5]
Örnek olarak
Diziyi ters çevir. Şimdi dizimiz
[5, 4, 3, 2, 1]
Her çifti yeniden sıralayın (değiştirin). Listemizde 2 çift var:,
[5, 4]
ve[3, 2]
. Maalesef,1
çifti bir çift halinde gruplayamıyoruz , bu yüzden sadece kendi başına bırakacağız. Her çifti değiştirdikten sonra, yeni dizi şöyledir:[4, 5, 2, 3, 1]
Orijinal diziye geri dönene kadar 1. ve 2. adımları tekrarlayın . İşte sonraki 4 adım:
Step 2: Start: [4, 5, 2, 3, 1] Reversed: [1, 3, 2, 5, 4] Pairs Swapped: [3, 1, 5, 2, 4] Step 3: Start: [3, 1, 5, 2, 4] Reversed: [4, 2, 5, 1, 3] Pairs Swapped: [2, 4, 1, 5, 3] Step 4: Start: [2, 4, 1, 5, 3] Reversed: [3, 5, 1, 4, 2] Pairs Swapped: [5, 3, 4, 1, 2] Step 5: Start: [5, 3, 4, 1, 2] Reversed: [2, 1, 4, 3, 5] Pairs Swapped: [1, 2, 3, 4, 5] # No more steps needed because we are back to the original array
Listenin uzunluğu n'nin tuhaf olması durumunda , orijinal diziye geri dönmek her zaman tam olarak n adım atar. Eğer n bile, bu her zaman için orijinal diziye dönmek için 2 adımları atacaktır sürece n 2'dir (ters ve takas aynı şeydir çünkü) 1 adım atacak durumda.
Bugünkü göreviniz (kabul etmeyi seçmelisiniz) isteğe bağlı uzunluk listeleri için bu adım kümesini görselleştirmektir. Girdi olarak tek bir pozitif tamsayı n alan bir program veya işlev yazmalısınız ve liste için bu adımları uygulayın [1, n]
. Her bir ara adımı yol boyunca çıkarmanız gerekir, bunun her adımı yazdırmak veya hepsini bir adım listesi olarak döndürmek anlamına gelir. Her adımı oluşturduğunuz belli olduğu sürece çıktı biçimi konusunda çok seçici değilim. Bunun anlamı (örneğin) bunlardan herhangi biri:
Her adımı bir liste olarak STDOUT'a aktarma
Bir liste listesi döndürmek
Her adımın dizgi gösterimlerinin bir listesini döndürme
Matris döndürme / basma
kabul edilebilir olurdu.
Orijinal diziyi de, sonunda veya başında gelirse size bağlı olsun çıkarmalısınız. (teknik olarak, ikisi de doğru)
2 yerine 1 adım atan 2 numaralı kenar kasasını kullanmanız gerekecek , bu nedenle lütfen çözümünüzün 2 girişiyle çalıştığından emin olun (ve 1, başka bir potansiyel kenar kasasıdır).
Her zamanki gibi, bu kod golfüdür , bu nedenle standart boşluklar uygulanır ve çözümünüzü tercih ettiğiniz dilden diğerlerinden daha kısa tutmaya çalışın (ya da kendinizi hissettiğinizde genellikle sizinkinden daha kısa olan başka bir dili geçmeyi deneyin) bir meydan okuma için).
Test IO
1:
[1]
2:
[1, 2]
3:
[2, 3, 1]
[3, 1, 2]
[1, 2, 3]
4:
[3, 4, 1, 2]
[1, 2, 3, 4]
5:
[4, 5, 2, 3, 1]
[3, 1, 5, 2, 4]
[2, 4, 1, 5, 3]
[5, 3, 4, 1, 2]
[1, 2, 3, 4, 5]
7:
[6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 6]
[4, 6, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 7, 5]
[7, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7]
9:
[8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 8]
[6, 8, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 9, 7]
[9, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Ve iyi bir ölçüm için, burada dev bir test durumu:
27:
[26, 27, 24, 25, 22, 23, 20, 21, 18, 19, 16, 17, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 11, 8, 13, 10, 15, 12, 17, 14, 19, 16, 21, 18, 23, 20, 25, 22, 27, 24, 26]
[24, 26, 22, 27, 20, 25, 18, 23, 16, 21, 14, 19, 12, 17, 10, 15, 8, 13, 6, 11, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 11, 4, 13, 6, 15, 8, 17, 10, 19, 12, 21, 14, 23, 16, 25, 18, 27, 20, 26, 22, 24]
[22, 24, 20, 26, 18, 27, 16, 25, 14, 23, 12, 21, 10, 19, 8, 17, 6, 15, 4, 13, 2, 11, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 11, 1, 13, 2, 15, 4, 17, 6, 19, 8, 21, 10, 23, 12, 25, 14, 27, 16, 26, 18, 24, 20, 22]
[20, 22, 18, 24, 16, 26, 14, 27, 12, 25, 10, 23, 8, 21, 6, 19, 4, 17, 2, 15, 1, 13, 3, 11, 5, 9, 7]
[9, 7, 11, 5, 13, 3, 15, 1, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 26, 14, 24, 16, 22, 18, 20]
[18, 20, 16, 22, 14, 24, 12, 26, 10, 27, 8, 25, 6, 23, 4, 21, 2, 19, 1, 17, 3, 15, 5, 13, 7, 11, 9]
[11, 9, 13, 7, 15, 5, 17, 3, 19, 1, 21, 2, 23, 4, 25, 6, 27, 8, 26, 10, 24, 12, 22, 14, 20, 16, 18]
[16, 18, 14, 20, 12, 22, 10, 24, 8, 26, 6, 27, 4, 25, 2, 23, 1, 21, 3, 19, 5, 17, 7, 15, 9, 13, 11]
[13, 11, 15, 9, 17, 7, 19, 5, 21, 3, 23, 1, 25, 2, 27, 4, 26, 6, 24, 8, 22, 10, 20, 12, 18, 14, 16]
[14, 16, 12, 18, 10, 20, 8, 22, 6, 24, 4, 26, 2, 27, 1, 25, 3, 23, 5, 21, 7, 19, 9, 17, 11, 15, 13]
[15, 13, 17, 11, 19, 9, 21, 7, 23, 5, 25, 3, 27, 1, 26, 2, 24, 4, 22, 6, 20, 8, 18, 10, 16, 12, 14]
[12, 14, 10, 16, 8, 18, 6, 20, 4, 22, 2, 24, 1, 26, 3, 27, 5, 25, 7, 23, 9, 21, 11, 19, 13, 17, 15]
[17, 15, 19, 13, 21, 11, 23, 9, 25, 7, 27, 5, 26, 3, 24, 1, 22, 2, 20, 4, 18, 6, 16, 8, 14, 10, 12]
[10, 12, 8, 14, 6, 16, 4, 18, 2, 20, 1, 22, 3, 24, 5, 26, 7, 27, 9, 25, 11, 23, 13, 21, 15, 19, 17]
[19, 17, 21, 15, 23, 13, 25, 11, 27, 9, 26, 7, 24, 5, 22, 3, 20, 1, 18, 2, 16, 4, 14, 6, 12, 8, 10]
[8, 10, 6, 12, 4, 14, 2, 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, 27, 13, 25, 15, 23, 17, 21, 19]
[21, 19, 23, 17, 25, 15, 27, 13, 26, 11, 24, 9, 22, 7, 20, 5, 18, 3, 16, 1, 14, 2, 12, 4, 10, 6, 8]
[6, 8, 4, 10, 2, 12, 1, 14, 3, 16, 5, 18, 7, 20, 9, 22, 11, 24, 13, 26, 15, 27, 17, 25, 19, 23, 21]
[23, 21, 25, 19, 27, 17, 26, 15, 24, 13, 22, 11, 20, 9, 18, 7, 16, 5, 14, 3, 12, 1, 10, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 10, 3, 12, 5, 14, 7, 16, 9, 18, 11, 20, 13, 22, 15, 24, 17, 26, 19, 27, 21, 25, 23]
[25, 23, 27, 21, 26, 19, 24, 17, 22, 15, 20, 13, 18, 11, 16, 9, 14, 7, 12, 5, 10, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 10, 7, 12, 9, 14, 11, 16, 13, 18, 15, 20, 17, 22, 19, 24, 21, 26, 23, 27, 25]
[27, 25, 26, 23, 24, 21, 22, 19, 20, 17, 18, 15, 16, 13, 14, 11, 12, 9, 10, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
Golf eğlenin!
1 2 3 4 5
, değil 1 2 4 3 5
.
array[0]
başında ve sonunda sadece 1 olacağını doğrulayan bir python betiğim var n = 999
. Desen bakarak, her garip için gibi görünüyor n , birinci eleman gider 1, n-1, 3, n - 3, 5, n - 5, 7...
kadar n - 2, 3, n, 1
hep alacağı, n adımlar. Bu desenin daha büyük n ile değişmesi için herhangi bir sebep görmüyorum .
1, n, 2, n-2, 4, n-4, 6, n-6, 8, n-8, ...