Dizi Karıştırılamaz mı?


15

Arka fon

Çok yetenekli kart işleyicileri, bir desteyi mükemmel bir şekilde ikiye kesen, daha sonra kartları mükemmel şekilde serpiştiren bir teknik yeteneğine sahiptir. Sıralı bir güverte ile başlarlar ve bu tekniği arka arkaya 52 kez kusursuz bir şekilde yaparlarsa, güverte sıralama düzenine geri yüklenir. Senin meydan okuma bir deste bir tamsayı dizisi almak ve sadece Faro shuffles kullanılarak sıralanıp sıralanamayacağını belirlemek için.

Tanım

Matematiksel olarak, bir Faro shuffle i (1 indeksli) pozisyonundaki elemanı 2 i (mod 2 n +1) pozisyonuna alan 2 n element üzerinde (herhangi bir pozitif tamsayı n için ) bir permütasyondur . Ayrıca tek uzunluklu listeleri de ele almak istiyoruz, bu nedenle listenin sonuna bir öğe ekleyin (eğer kullanışlı bir Joker varsa) ve Faro yeni listeyi yukarıdaki gibi karıştırın, ancak yok sayın Listenin sırasını kontrol ederken eklenen kukla öğe.

Hedef

Bir dizi Faro karması, bu listenin azalan sırada sıralanmasına neden olursa, tamsayıların listesini alan ve bir doğruluk veren veya çıktı veren bir program veya işlev yazın (bu sayı sıfır olsa bile - küçük listeler bir doğruluk vermelidir). Aksi takdirde, bir falsiyi iade edin veya çıktı alın.

Örnekler

[1,1,2,3,5,8,13,21]  => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True

puanlama

Bu bayt kazanır en kısa kaynak.


Diğer kart işleyicileriyle karışıklığı önlemek için, iki tür Faro karıştırmasının olduğu unutulmamalıdır. Bir karışık ve bir karışık . Burada tarif edilen yöntem bir karışıklıktır. İlginçtir ki, bir güverteyi orijinal sırasına geri döndürmek için sadece 8 karışıklık gerekir. Daha Fazla Bilgi
BrainSteel

Bu sadece "karışıklık N + 1 kez ve yol boyunca listelerden herhangi birinin sıralanıp sıralanmadığını görmek" değil mi?
lirtosiast

Aslında n kez yeterlidir, çünkü bunu 2n kez yapmak olası tüm permütasyonları bulmayı garanti eder, ancak ilk n'de artan veya azalan düzenden en az birini alırsınız.
quintopia


1
ilk eleman her zaman birinci konumda kalmaz mı?
Eumel

Yanıtlar:


3

Pyth - 26 25 24 bayt

Faro shuffle'ı birden çok kez uygulamak ve tüm sonuçları saklamak için kümülatif azaltmayı kullanır. Sonra, onun üzerinden eşler ve sıralama altında değişmez olup olmadığını kontrol eder, sonra herhangi bir doğru olup olmadığını kontrol etmek için toplam kullanır. Pozitif veya sıfır döndürür.

smSI-db.usC_c2NQsC.tc2Qb

Test Takımı .


3

MATL , 41 bayt

itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx

Çıktı 1veya 0.

açıklama

i              % get input array
tn2\           % is size odd?
?              % if that's the case
  YNh          % concat NaN at the end
]              % end if
tn             % get size of input array
t1+:           % vector 1:n+1, where n is input size, so loop will be entered even with []
"              % for loop
  x[]2e!PY)    % delete result from previous iteration and do the shuffling
  ttZN~)       % remove NaN, if there's any
  tS=A         % check if array is sorted
  t.           % copy the result. If true, break loop
]              % end for
wx             % remove unwanted intermediate result

Misal

>> matl itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx
> [1,1,2,3,5,8,13,21]
1
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.