Giriş
N öğeli bir listenin sözlüksel permütasyonları 0'dan n'ye kadar numaralanabilir ! - 1. Örneğin, 3! = 6 permütasyon (1,2,3)
olur (1,2,3)
, (1,3,2)
, (2,1,3)
, (2,3,1)
, (3,1,2)
, (3,2,1)
.
Listeye bir permütasyon uygulandığında, elemanları permütasyondaki sayılarla aynı sırada sıralanır. Örneğin, permütasyon uygulanması (2,3,1)
için l = (a,b,c)
verim (l[2],l[3],l[1]) = (b,c,a)
.
Bir permütasyonun tersi, bu işlemi tersine çeviren permütasyon olarak tanımlanır, yani bir permütasyon uygulamak ve ardından bunun tersi (veya tersi) diziyi değiştirmez. Örneğin, ters (2,3,1)
IS (3,1,2)
bu uygulama için, (b,c,a)
verim (a,b,c)
.
Ayrıca, permütasyonun kendisine uygulanan bir permütasyonun tersi 1… n tamsayılarını verir . Örneğin, uygulama (3,1,2)
için (2,3,1)
verim (1,2,3)
.
Şimdi fonksiyonu tanımlayabilir revind ( x indeksi ile permütasyon ters permütasyon indeksi olarak) x . ( İlgileniyorsanız bu A056019'dur .)
İ dizinine sahip bir permütasyon, iff 0 ≤ i < k ! Listesindeki sadece son k öğelerini değiştirdiğinden, revind ( i ) 'yi etkilemeden listenin başına istediğiniz sayıda öğe ekleyebiliriz . Bu nedenle listenin uzunluğu sonucu etkilemez.
Meydan okuma
Göreviniz revind ( x ) uygulamaktır . Girdi / bağımsız değişken olarak tek bir negatif olmayan tamsayı x alan ve sonucu tek bir negatif olmayan tamsayı olarak çıkaran / döndüren tam bir program veya işlev yazacaksınız .
Girdi ve çıktı 0 dizinli veya 1 dizinli olabilir, ancak bu ikisi arasında tutarlı olmalıdır.
Dizine göre permütasyon oluşturan, bir permütasyonun indeksini döndüren veya ters permütasyonu bulan yapıdaki yapılar yasaklanmıştır. (Tüm permütasyonları veya bir sonraki permütasyonu üreten yerleşiklere izin verilir.)
Standart kod golf kuralları geçerlidir.
Örnekler
Aşağıdaki örnekler 0 dizinlidir.
Input Output
0 0
1 1
2 2
3 4
4 3
5 5
6 6
13 10
42 51
100 41
1000 3628
2000 3974
10000 30593
100000 303016
Referans uygulaması (Python 3)
def revind(n):
from math import factorial
from itertools import permutations, count
l = next(filter(lambda x: factorial(x) > n, count(1)))
pms = list(permutations(range(l)))
return [k for k in range(len(pms)) if tuple(pms[n][i] for i in pms[k]) == pms[0]][0]
(a,b,c)
Örneğini son derece belirsiz buluyorum . Lütfen ters permütasyonun ne olduğuna dair uygun bir açıklama ekleyin.
Ụ
bir dizinin indekslerini karşılık gelen değerlerine göre sıralayan atomu (derece yukarı) içerir. Bu olur bir permütasyon ters 1, ..., n , ancak diğer permütasyon için çalışmaz. Yerleşik Ụ
bir yasak var mı ?